找回密码
 立即注册

QQ登录

只需一步,快速开始

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

超声波模块跟GSM模块冲突了,怎么改单片机程序?

[复制链接]
跳转到指定楼层
楼主
ID:985137 发表于 2022-5-3 18:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先谢谢大家
  1. void Init_Timer()
  2. {
  3.     PCON=0x00;         
  4.     SCON=0x50;         
  5.     TMOD=0x21;         
  6.     TL0 =0x00;
  7.     TH0 =0x4C;
  8.     TL1 =0xfd;   
  9.     TH1 =0xfd;
  10.     TR0 =1;
  11.     TR1 =1;
  12.     ET0 =1;
  13.     ES  =1;
  14.     EA  =1;
  15. }

  16. void inter() interrupt 4
  17. {
  18.         date = SBUF;
  19.         if(RI)
  20.         RI = 0;
  21. }

  22. //外部中断0
  23. void initex()
  24. {
  25.   TMOD=0x09;                    //定时器T0工作方式1  GATE0=1
  26.   IT0=1;                        //设置为下降沿中断方式
  27.   EX0=1;                        //开外部中断                    
  28. }
  29. void int0() interrupt 0
  30. {
  31. t=(TH0*256+TL0);//计算高电平持续的时间,上升沿到来时候开始计时,下降沿到来进入外部中断,关闭计时器,停止计时
  32. TH0=0;
  33. TL0=0;
  34. }

  35. /*主函数*/
  36. uchar global_state = 0;
  37. uchar count_num = 0;  //输入的数字个数
  38. void main()
  39. {  
  40.     uchar i;
  41.     uchar passwd;  
  42.            uchar key_value = 0;
  43.         uchar temp_key_value = 0xff;
  44.         Lock = 1;  //刚上电 锁是需要保持闭合

  45.         Init_Timer();
  46.         initex();

  47.          lcd_init();        //LCD1602初始化  
  48.         while(1)        //进入不断循环
  49.           {
  50.                    temp_key_value = Calkey_scan();          //读取矩阵按键的键值
  51.                 if(temp_key_value != 0xff)
  52.                 {
  53.                         key_value = temp_key_value;
  54.                 }
  55.                 switch(global_state)
  56.                 {
  57.                         case 0:         //初始化状态
  58.                                 display1();         //显示欢迎语句        -- "welcome"
  59.                                 zyx = 1;         //紫外线
  60.                                 zm = 0;
  61.                                 display5();  //显示Current T=
  62.                                 Read_Temperature(); //读取温度值
  63.                                 display7();  //显示温度
  64.                                 Alarm();         //报警
  65.                                 wenk();                 //温控

  66.                                 HC05_Init();  //超声波
  67.                                 
  68.                                 if(SetKey==0)        //设置键                          
  69.                                 {         
  70.                                            clear();         //清屏
  71.                                          global_state = 3;   //切换运行状态                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  72.                                   }
  73.                                                                                                                                                                                                                                                                                                                                                                                                                               
  74.                                 if(key_value == 13)  //存餐按键被按下
  75.                                 {
  76.                                 key_value = 0xff;  //将按键值清除                                
  77.                                 if(distance>300)
  78.                                 {
  79.                                 TMOD=0x21;                                         
  80.                                 global_state = 4;                  
  81.                                 }
  82.                                 else
  83.                                 {
  84.                                   clear();        //清屏,准备下一屏的显示
  85.                                   display10();        
  86.                                   delay(1000);
  87.                                   clear();        //清屏,准备下一屏的显示
  88.                                   global_state = 0;  //返回到初始界面
  89.                                 }
  90.                                 }
  91.                                  
  92.                                 if(key_value == 14)  //取餐按键被按下
  93.                                 {
  94.                                     key_value = 0xff;  //将按键值清除
  95.                                         clear();    //清屏,准备下一屏的显示
  96.                                         global_state = 2;  //切换运行状态
  97.                                         count_num = 0;   //清除数字按键变量
  98.                                         for(i = 0;i < 4;i++)  //清空输入的密码数组
  99.                                         inpPasswd[i] = ' '-0x30;
  100.                                 }
  101.                             break;

  102.                         case 1:                //密码生成状态                                                

  103.                                    display2();         //显示密码生成界面
  104.                                 GSM_PDU();
  105.                     GSM_PDU_SMS();
  106.                                 global_state = 0;  //返回到初始界面
  107.                                 clear();        //清屏,准备下一屏的显示                                
  108.                             break;

  109.                         case 2:          //输入密码状态
  110.                            display4();           //显示输入密码界面
  111.                            if((key_value >= 0) && (key_value <= 9))          //如果按下的为0-9的数字按键
  112.                            {                              
  113.                                 if(count_num <= 3)         //如果按键次数小于4次
  114.                                         {
  115.                                         inpPasswd[count_num] = key_value; //将按键值存入数组,并显示
  116.                                                    count_num++;
  117.                                     }
  118.                                          key_value = 0xff;  //将按键值清除
  119.                            }
  120.                                                                                                          
  121.                            if(key_value == 15) //清除按键被按下
  122.                            {
  123.                                 key_value = 0xff;  //将按键值清除
  124.                                            for(i = 0;i < 4;i++)
  125.                                         inpPasswd[i] = ' '-0x30;  //清除刚刚输入的密码
  126.                                         count_num=0;
  127.                            }
  128.                            if(key_value == 16) //确认按键被按下
  129.                            {
  130.                                 key_value = 0xff;  //将按键值清除
  131.                                            for(i = 0;i < 4;i++)
  132.                                         {
  133.                                                 if(inpPasswd[i] != genPasswd[i])
  134.                                                 break;
  135.                                         }
  136.                                         if(i == 4)          //密码输入正确
  137.                                         {                                                
  138.                                         Lock = 0;    //开锁
  139.                                         zm = 1;         //照明
  140.                                         zyx = 0;
  141.                                         clear();                 //清屏,准备下一屏的显示
  142.                                         display3();    //显示关门提示语        -- "close door!"
  143.                                     delay(1900);    //等待关门 大约3秒
  144.                                         clear();                 //清屏,准备下一屏的显示
  145.                                         Lock = 1;   //关锁
  146.                                         zyx = 1;         //紫外线
  147.                                         zm = 0;                                       
  148.                                         }
  149.                                         else   //密码输入错误  报警
  150.                                         {        
  151.                                                 clear();           //清屏,准备下一屏的显示                                
  152.                                                 Lock = 1;  //关锁
  153.                                                 BEEP=0;
  154.                                                 display9();        
  155.                                                 delay(1000);
  156.                                                 BEEP=1;
  157.                                                 display9();                                                                                                
  158.                                         }
  159.                                         clear();           //清屏,准备下一屏的显示
  160.                                         global_state = 0;  //返回到初始界面
  161.                            }
  162.                            break;

  163.                            case 3:
  164.                                     display5();         //显示Current T=
  165.                         display6();         //显示上下限
  166.                         Read_Temperature(); //读取温度值
  167.                         display7();         //显示温度
  168.                         display8();         //显示上下限温度
  169.                                                 SetFun();           //指针>  
  170.                                             Alarm();
  171.                                                 wenk();
  172.                                                 if(key_value == 16) //确认按键被按下
  173.                                                 {
  174.                                                         key_value = 0xff;  //将按键值清除
  175.                                                         clear();           //清屏,准备下一屏的显示
  176.                                                 global_state = 0;  //返回到初始界面
  177.                                                 }
  178.                                 break;

  179.                                 case 4:                           
  180.                                         Lock = 0;    //开锁
  181.                                         zm = 1;         
  182.                                         zyx = 0;
  183.                                         clear();                 //清屏,准备下一屏的显示
  184.                                         display3();    //显示关门提示语        -- "close door!"
  185.                                        delay(1900);    //等待关门 大约3秒
  186.                                         clear();                 //清屏,准备下一屏的显示
  187.                                         Lock = 1;    //关锁
  188.                                         zyx = 1;         //紫外线
  189.                                         zm = 0;                                                                                                               
  190.                                         clear();                 //清屏,准备下一屏的显示
  191.                                         global_state = 1;   //切换运行状态
  192.                                         passwd = TL0;  //采用定时器寄存器的值作为密码
  193.                                         genPasswd[0] = passwd/100;                  //存储密码
  194.                                         genPasswd[1] = passwd%100/10;
  195.                                         genPasswd[2] = passwd%10;
  196.                                         genPasswd[3] = (genPasswd[1]+genPasswd[2])%10;                                                                                                                                       
  197.                                         break;                                                                                                         
  198.                 }               
  199.         }
  200. }
复制代码

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

使用道具 举报

沙发
ID:624769 发表于 2022-5-3 22:04 | 只看该作者
方法1:

//外部中断0
void initex()
{
   TMOD |=0x09;                    //定时器T0工作方式1  GATE0=1
   IT0=1;                        //设置为下降沿中断方式
  EX0=1;                        //开外部中断                    
}


方法2:

void Init_Timer()
{
     PCON=0x00;         
     SCON=0x50;         
     TMOD=0x29;         
     TL0 =0x00;
     TH0 =0x4C;
     TL1 =0xfd;   
     TH1 =0xfd;
     TR0 =1;
     TR1 =1;
     ET0 =1;
     ES  =1;
     EA  =1;
}
//外部中断0
void initex()
{
//  TMOD=0x09;                    //定时器T0工作方式1  GATE0=1
   IT0=1;                        //设置为下降沿中断方式
  EX0=1;                        //开外部中断                    
}
回复

使用道具 举报

板凳
ID:161164 发表于 2022-5-3 23:00 | 只看该作者
有啥冲突?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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