Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2932|回复: 11

20电信本2杨森组:智能路灯

[复制链接]

1

主题

2

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-11-4 13:26:20 | 显示全部楼层 |阅读模式
本帖最后由 qql123456 于 2022-11-11 10:39 编辑

  1. #include "reg52.h"
  2. #include  <math.h>     
  3. #include  <stdio.h>          
  4. #include  <INTRINS.H>
  5. #define   uchar unsigned char
  6. #define   uint unsigned int       
  7. sbit             SCL=P1^0;      
  8. sbit            SDA=P1^1;      
  9. #define          SlaveAddress   0x46
  10. typedef   unsigned char BYTE;
  11. typedef   unsigned short WORD;
  12. typedef unsigned int u16;
  13. sbit KEY1=P3^1;
  14. sbit KEY2=P3^2;
  15. sbit KEY3=P3^3;
  16. sbit LED=P2^0;
  17. unsigned char stat=0;
  18. unsigned char stat1=0;
  19. unsigned char stat2=0;
  20. unsigned char stat3=0;
  21. unsigned int u;
  22. float temp;
  23. BYTE   BUF[8];                                     
  24. uchar   ge,shi,bai,qian,wan;           
  25. int     dis_data;   
  26. void delay_nms(unsigned int k);
  27. void Init_BH1750(void);
  28. void WriteDataLCM(uchar dataW);
  29. void WriteCommandLCM(uchar CMD,uchar Attribc);
  30. void DisplayOneChar(uchar X,uchar Y,uchar DData);
  31. void conversion(uint temp_data);
  32. void  Single_Write_BH1750(uchar REG_Address);            
  33. uchar Single_Read_BH1750(uchar REG_Address);               
  34. void  Multiple_Read_BH1750();                              
  35. void Delay5us();
  36. void Delay5ms();
  37. void BH1750_Start();                    
  38. void BH1750_Stop();                     
  39. void BH1750_SendACK(bit ack);           
  40. bit  BH1750_RecvACK();                  
  41. void BH1750_SendByte(BYTE dat);        
  42. BYTE BH1750_RecvByte();                 
  43. void conversion(uint temp_data)  
  44. {  
  45.     wan=temp_data/10000+0x30 ;
  46.     temp_data=temp_data%10000;   
  47.         qian=temp_data/1000+0x30 ;
  48.     temp_data=temp_data%1000;   
  49.     bai=temp_data/100+0x30   ;
  50.     temp_data=temp_data%100;     
  51.     shi=temp_data/10+0x30    ;
  52.     temp_data=temp_data%10;     
  53.     ge=temp_data+0x30;        
  54. }
  55. void delay_nms(unsigned int k)       
  56. {                                               
  57. unsigned int i,j;                               
  58. for(i=0;i<k;i++)
  59. {                       
  60. for(j=0;j<121;j++)                       
  61. {;}}                                               
  62. }
  63. void Delay5us()
  64. {
  65.     _nop_();_nop_();_nop_();_nop_();
  66.     _nop_();_nop_();_nop_();_nop_();
  67.         _nop_();_nop_();_nop_();_nop_();
  68.         _nop_();_nop_();_nop_();_nop_();
  69. }
  70. void Delay5ms()
  71. {
  72.     WORD n = 560;
  73.     while (n--);
  74. }
  75. void BH1750_Start()
  76. {
  77.     SDA = 1;                    
  78.     SCL = 1;                    
  79.     Delay5us();                 
  80.     SDA = 0;                    
  81.     Delay5us();               
  82.     SCL = 0;                  
  83. }
  84. void BH1750_Stop()
  85. {
  86.     SDA = 0;                    
  87.     SCL = 1;                    
  88.     Delay5us();                 
  89.     SDA = 1;                    
  90.     Delay5us();               
  91. }
  92. void BH1750_SendACK(bit ack)
  93. {
  94.     SDA = ack;                  
  95.     SCL = 1;                  
  96.     Delay5us();               
  97.     SCL = 0;                    
  98.     Delay5us();               
  99. }
  100. bit BH1750_RecvACK()
  101. {
  102.     SCL = 1;                    
  103.     Delay5us();               
  104.     CY = SDA;                  
  105.     SCL = 0;                    
  106.     Delay5us();               
  107.     return CY;
  108. }
  109. void BH1750_SendByte(BYTE dat)
  110. {
  111.     BYTE i;
  112.     for (i=0; i<8; i++)         
  113.     {
  114.         dat <<= 1;            
  115.         SDA = CY;               
  116.         SCL = 1;               
  117.         Delay5us();            
  118.         SCL = 0;               
  119.         Delay5us();            
  120.     }
  121.     BH1750_RecvACK();
  122. }
  123. BYTE BH1750_RecvByte()
  124. {
  125.     BYTE i;
  126.     BYTE dat = 0;
  127.     SDA = 1;                    
  128.     for (i=0; i<8; i++)        
  129.     {
  130.         dat <<= 1;
  131.         SCL = 1;               
  132.         Delay5us();            
  133.         dat |= SDA;                           
  134.         SCL = 0;               
  135.         Delay5us();            
  136.     }
  137.     return dat;
  138. }
  139. void Single_Write_BH1750(uchar REG_Address)
  140. {
  141.     BH1750_Start();                 
  142.     BH1750_SendByte(SlaveAddress);  
  143.     BH1750_SendByte(REG_Address);     
  144.     BH1750_Stop();                  
  145. }
  146. void Multiple_read_BH1750(void)
  147. {   uchar i;       
  148.     BH1750_Start();                        
  149.     BH1750_SendByte(SlaveAddress+1);         
  150.        
  151.          for (i=0; i<3; i++)                     
  152.     {
  153.         BUF[i] = BH1750_RecvByte();         
  154.         if (i == 3)
  155.         {
  156.            BH1750_SendACK(1);               
  157.         }
  158.         else
  159.         {               
  160.           BH1750_SendACK(0);               
  161.        }
  162.    }

  163.     BH1750_Stop();                          
  164.     Delay5ms();
  165. }
  166. void Init_BH1750()
  167. {
  168.    Single_Write_BH1750(0x01);  
  169. }

  170. void delay(unsigned int t)
  171. {
  172.         while(t--);
  173. }
  174. void cor()
  175. {
  176.                 if(stat3==0)
  177.                 {
  178.                         if(temp<=20)
  179.                         {
  180.                                 stat2=1;
  181.                         }
  182.                 if(temp>20)
  183.                 {
  184.                                 stat2=0;
  185.                                 stat=0;
  186.                         }
  187.         }
  188.                 if(stat3==1)
  189.         {
  190.                  stat=1;
  191.                 if(temp>20)
  192.                 {
  193.                                 stat3=0;
  194.                 }
  195.                 if(KEY2==0)
  196.                 {
  197.                                 u=0;
  198.                                 stat1=1;
  199.                 }
  200.         }
  201. }
  202. void Timer0Init()
  203. {
  204.         TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
  205.         TH0=0XFC;        //给定时器赋初值,定时1ms
  206.         TL0=0X18;       
  207.         ET0=1;//打开定时器0中断允许
  208.         EA=1;//打开总中断
  209.         TR0=1;//打开定时器                       
  210. }
  211. void Timer0() interrupt 1
  212. {
  213.         static u16 i;
  214.         if(stat==0)
  215.         {
  216.         TH0=0XFC;        //给定时器赋初值,定时1ms
  217.         TL0=0X18;
  218.         i++;
  219.         if(i==10000)
  220.         {
  221.                 i=0;
  222.                 stat3=1;
  223.                 stat2=0;
  224.         }       
  225.   }
  226.         if(stat==1)
  227.         {
  228.                 i=0;
  229.         }
  230.         }
  231. void main()
  232. {
  233.          Timer0Init();
  234.          delay_nms(200);          
  235.      Init_BH1750();      
  236.         while(1)
  237.         {
  238.                 Single_Write_BH1750(0x01);   
  239.        Single_Write_BH1750(0x10);   
  240.        delay_nms(180);              
  241.        Multiple_Read_BH1750();      
  242.        dis_data=BUF[0];
  243.        dis_data=(dis_data<<8)+BUF[1];
  244.        temp=(float)dis_data/1.2;
  245.            cor();
  246.               if(stat2==0)
  247.                 {
  248.                         LED=1;
  249.                 }
  250.                   if(stat2==1)
  251.                 {
  252.                         LED=0;
  253.                 }
  254.                 if(stat1==1)
  255.                 {
  256.                     u++;
  257.                                 delay(50000);
  258.                                 if(u<10)
  259.                                 {
  260.                                         stat2=1;
  261.                                 }
  262.                           if(u>9)
  263.                                 {
  264.                                         stat2=0;
  265.                                         u=160;
  266.                                         stat1=0;
  267.                                 }
  268.                         }
  269.                
  270.         }
  271. }
复制代码


当外界光照强度强时,灯不亮;当外界光照强度弱时,灯亮延时自动熄灭,当有人通过时,光电开关指示灯亮起,灯再次亮起延时自动熄灭。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

412

主题

1281

帖子

4157

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4157
发表于 2022-11-4 14:59:46 来自手机 | 显示全部楼层
仿真源文件呢
回复

使用道具 举报

1

主题

2

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2022-11-11 10:40:58 | 显示全部楼层

老师,刚刚重新上传了,您看一下
回复

使用道具 举报

412

主题

1281

帖子

4157

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4157
发表于 2022-11-11 18:03:27 | 显示全部楼层
按改文件修改

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

4

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2022-11-22 20:00:51 | 显示全部楼层

老师。改完了。看看可以吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

412

主题

1281

帖子

4157

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4157
发表于 2022-11-24 10:22:19 | 显示全部楼层
再改

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

4

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2022-11-24 18:49:08 | 显示全部楼层

老师,改完了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

412

主题

1281

帖子

4157

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4157
发表于 2022-11-24 21:46:42 | 显示全部楼层
基本可以了,有个小问题是每一章的上面有很多空行,这个是由于你不会用换页符引起的(建议百度一下 换页符)
修改完了就可以打印上交了
回复

使用道具 举报

0

主题

4

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2022-11-24 22:12:01 | 显示全部楼层
gaohaikuo1 发表于 2022-11-24 21:46
基本可以了,有个小问题是每一章的上面有很多空行,这个是由于你不会用换页符引起的(建议百度一下 换页符 ...

老师,这样可以了吗?是双面打印还是单面?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

412

主题

1281

帖子

4157

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4157
发表于 2022-11-24 23:36:05 | 显示全部楼层
20页以下单面打印,以上可以双面,注意评分页面单独一页
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-9-13 19:25 , Processed in 0.044359 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表