找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2337|回复: 0
打印 上一主题 下一主题
收起左侧

在原单片机程序加按键程序怎么加?

[复制链接]
跳转到指定楼层
楼主
这是一个温度和烟雾传感器报警程序,(图中的P1.3脚输入低电平和温度传感器到达31度后报警,LED等都亮起,也就是P3.0-P3.4脚都输出低电平),现在需要加4个按键,(图中已经画好)一个手动报警,一个进入设置模式,一个加键,一个减键,显示屏显示报警温度和现在室内温度。图和C程序在附件,希望有人帮忙解决一下。


单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar table[]={"  T:                                       "};
  5. uchar table1[]={"  Tmax 31                                 "};
  6. /********IO????**********/
  7. sbit rs=P2^7;
  8. sbit rw=P2^6;
  9. sbit en=P2^5;
  10. sbit dq=P1^6;
  11. sbit yw=P1^5;
  12. sbit D1=P3^0;
  13. sbit D2=P3^1;
  14. sbit D3=P3^2;
  15. sbit D4=P3^3;
  16. sbit D5=P3^4;


  17. uchar num;
  18. uint tempwarn,d=0,h=0;

  19. void delay(uint n)               
  20. {
  21.         while(n--);
  22. }
  23. //?????
  24. void write_com(uchar com)  
  25. {
  26.         rs=0;                        
  27.         en=0;                        
  28.         P0=com;                        
  29.         delay(100);               
  30.         en=1;                        
  31.         delay(100);
  32.         en=0;                        
  33. }
  34. void write_data(uchar date)           
  35. {
  36.         rs=1;                  
  37.         en=0;
  38.         P0=date;         
  39.         delay(100);
  40.         en=1;
  41.         delay(100);
  42.         en=0;
  43. }  
  44. void init()      
  45. {
  46.         en=0;
  47.         write_com(0x38);        
  48.         write_com(0x0c);        
  49.         write_com(0x06);        
  50.         write_com(0x01);        
  51. }
  52. void  Writebyte(uchar dat)
  53. {
  54.         uchar j;
  55.         for(j=0;j<8;j++)
  56.         {
  57.                 dq=0;
  58.                 dq=dat&0x01;
  59.                 delay(5);
  60.                 dq=1;
  61.                 dat>>=1;
  62.         }
  63. }
  64. uchar Readbyte(void)
  65. {
  66.         uchar i,dat=0;
  67.         for(i=0;i<8;i++)
  68.         {
  69.                 dq=0;
  70.                 dat>>=1;
  71.                 dq=1;
  72.                 if(dq==1)
  73.                 dat|=0x80;
  74.                 delay(4);
  75.         }        
  76.         return dat;
  77. }
  78. void initds18b20(void)
  79. {
  80.         uchar x=0;
  81.         dq=1;
  82.         delay(8);
  83.         dq=0;
  84.         delay(80);
  85.         dq=1;
  86.         delay(14);
  87.         x=dq;
  88.         delay(20);
  89. }
  90. void Readtemp(void)
  91. {
  92.         initds18b20();
  93.         Writebyte(0xcc);
  94.         Writebyte(0x44);

  95.         initds18b20();
  96.         Writebyte(0xcc);
  97.         Writebyte(0xbe);
  98.         d=Readbyte();        
  99.         h=Readbyte();        
  100. }
  101. get()
  102. {
  103.         uint temp,tmp;
  104.         float tt;
  105.         tmp=d;         
  106.         temp=h;         
  107.         temp<<=8;  
  108.         temp|=d;   
  109.         if((h&0x80)!=0)         
  110.         {
  111.                 table[7]='-';        
  112.                 temp=temp-1;
  113.                 temp=~temp;
  114.         }
  115.         else
  116.                 table[7]='+';
  117.                 temp>>=4;
  118.                 table[8]=(temp/100)+'0';        
  119.                 table[9]=(temp/10)%10+'0';      
  120.                 table[10]=(temp%10)+'0';        
  121.                 tmp=tmp&0x0f;                                          
  122.                 tt=tmp*0.0625;                                         
  123.                 table[11]='.';                                         
  124.                 table[12]=((uchar)(tt*10))%10+'0';
  125.                 tempwarn=temp;               
  126.         return tempwarn;
  127. }
  128. void warn(uint tempwarn)
  129. {
  130.                 if(tempwarn>=31&yw==0)
  131.         {
  132.                 D1=0;
  133.                 D2=0;
  134.                 D3=0;
  135.                                               D4=0;
  136.                 D5=0;
  137.         }
  138.                                 else
  139.                                 {
  140.                                               D1=1;
  141.                 D2=1;
  142.                 D3=1;
  143.                                               D4=1;
  144.                 D5=1;
  145.         }
  146. }
  147. void main()
  148. {        
  149.         rw=0;                                          
  150.         init();                                         
  151.         write_com(0x80+0x40);                        
  152.         for(num=0;num<16;num++)               
  153.         {
  154.                 write_data(table1[num]);        
  155.         }
  156.         while(1)                                                
  157.         {
  158.                  Readtemp();
  159.                  get();
  160.              warn(tempwarn);
  161.                  write_com(0x80);  
  162.                  for(num=0;num<15;num++)
  163.                  {
  164.                         write_data(table[num]);
  165.                  }
  166.         }
  167. }

复制代码

所有资料51hei提供下载:
图和程序.zip (22.74 KB, 下载次数: 8)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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