久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1372|回復: 4
打印 上一主題 下一主題
收起左側

單片機超聲波做的存包柜,定時器0中斷和外部0中斷,應該是隨機密碼,但是顯示固定密碼

[復制鏈接]
回帖獎勵 10 黑幣 回復本帖可獲得 10 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
ID:985137 發表于 2022-4-5 20:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. /***********************************
  2. 定時器0初始化
  3. ***********************************/
  4. void Timer0_init()
  5. {
  6.         TMOD = 0x01;
  7.         TH0 = (65536-50000)/256;
  8.         TL0 = (65536-50000)&256;
  9.         ET0 = 1;                         /*開定時器0中斷*/         
  10.         EA = 1;                    /*開總中斷*/
  11.         TR0 = 1;                   /*啟動定時器0*/                  
  12. }

  13. void T0_interrupt(void) interrupt 1         /*0表示外斷0,1表示定時0,2表示外斷1,3表示定時1*/
  14. {
  15.         TH0 = (65536-10000)/256;
  16.         TL0 = (65536-10000)&256;
  17. }

  18. //------超聲波引腳-------
  19. sbit TR=P3^3;              //觸發控制信號輸入
  20. sbit ECHO=P3^2;            //回響信號輸出
  21. long int t,distance;
  22. uchar a;
  23. //************超聲波指令函數************************
  24. void HC05_Init()                          //超聲波模塊初始化函數
  25. {
  26.         TR=1;                                 //觸發脈沖
  27.         NOP();NOP();NOP();NOP();
  28.         TR=0;
  29.         distance=0.1725*t;                       //距離計算
  30. }
  31. //外部中斷0
  32. void initex()
  33. {
  34.   TMOD=0x09;                    //定時器T0工作方式1  GATE0=1
  35.   IT0=1;                        //設置為下降沿中斷方式
  36.   EX0=1;                        //開外部中斷                     
  37. }
  38. void int0() interrupt 0
  39. {
  40. t=(TH0*256+TL0);//計算高電平持續的時間,上升沿到來時候開始計時,下降沿到來進入外部中斷,關閉計時器,停止計時
  41. TH0=0;
  42. TL0=0;
  43. }

  44. /*主函數*/
  45. uchar global_state = 0;
  46. uchar count_num = 0;  //輸入的數字個數
  47. void main()
  48. {  
  49.     uchar i;
  50.     uchar passwd;  
  51.            uchar key_value = 0;
  52.         uchar temp_key_value = 0xff;
  53.         Lock = 1;  //剛上電 鎖是需要保持閉合
  54.         Timer0_init();        //定時器初始化
  55.         initex();
  56.          lcd_init();        //LCD1602初始化  
  57.         while(1)        //進入不斷循環
  58.           {
  59.                    temp_key_value = Calkey_scan();          //讀取矩陣按鍵的鍵值
  60.                 if(temp_key_value != 0xff)
  61.                 {
  62.                         key_value = temp_key_value;
  63.                 }
  64.                 switch(global_state)
  65.                 {
  66.                         case 0:         //初始化狀態
  67.                                 display1();         //顯示歡迎語句        -- "welcome"
  68.                                 deng = 1;         //紫外線
  69.                                 display5();  //顯示Current T=
  70.                                 Read_Temperature(); //讀取溫度值
  71.                                 display7();  //顯示溫度
  72.                                 Alarm();         //報警
  73.                                 wenk();                 //溫控
  74.                                 HC05_Init();
  75.                                 
  76.                                 if(SetKey==0)        //設置鍵                          
  77.                   {         
  78.                                            clear();         //清屏
  79.                                          global_state = 3;   //切換運行狀態                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  80.                                   }
  81.                                                                                                                                                                                                                                                                                                                                                                                                                               
  82.                                 if(key_value == 13)  //存餐按鍵被按下
  83.                                 {
  84.                                 key_value = 0xff;  //將按鍵值清除                                
  85.                                 if(distance>300)
  86.                                 {
  87.                                 TMOD=0x01;                                         
  88.                               global_state = 4;                  
  89.                                 }
  90.                                 else
  91.                                 {
  92.                                   clear();        //清屏,準備下一屏的顯示
  93.                                   display10();        
  94.                                   delay(1000);
  95.                                   clear();        //清屏,準備下一屏的顯示
  96.                                   global_state = 0;  //返回到初始界面
  97.                                 }
  98.                         }
  99.                                  
  100.                                 if(key_value == 14)  //取餐按鍵被按下
  101.                                 {
  102.                                     key_value = 0xff;  //將按鍵值清除
  103.                                         clear();    //清屏,準備下一屏的顯示
  104.                                         global_state = 2;  //切換運行狀態
  105.                                         count_num = 0;   //清除數字按鍵變量
  106.                                         for(i = 0;i < 4;i++)  //清空輸入的密碼數組
  107.                                         inpPasswd[i] = ' '-0x30;
  108.                                 }
  109.                             break;

  110.                         case 1:                //密碼生成狀態                                                

  111.                                    display2();         //顯示密碼生成界面
  112.                                 delay(1900);    //等待大約3秒
  113.                                 global_state = 0;  //返回到初始界面
  114.                                 clear();        //清屏,準備下一屏的顯示                                
  115.                             break;

  116.                         case 2:          //輸入密碼狀態
  117.                            display4();           //顯示輸入密碼界面
  118.                            if((key_value >= 0) && (key_value <= 9))          //如果按下的為0-9的數字按鍵
  119.                            {                              
  120.                                 if(count_num <= 3)         //如果按鍵次數小于4次
  121.                                         {
  122.                                         inpPasswd[count_num] = key_value; //將按鍵值存入數組,并顯示
  123.                                                    count_num++;
  124.                                     }
  125.                                          key_value = 0xff;  //將按鍵值清除
  126.                            }
  127.                                                                                                          
  128.                            if(key_value == 15) //清除按鍵被按下
  129.                            {
  130.                                 key_value = 0xff;  //將按鍵值清除
  131.                                            for(i = 0;i < 4;i++)
  132.                                         inpPasswd[i] = ' '-0x30;  //清除剛剛輸入的密碼
  133.                                         count_num=0;
  134.                            }
  135.                            if(key_value == 16) //確認按鍵被按下
  136.                            {
  137.                                 key_value = 0xff;  //將按鍵值清除
  138.                                            for(i = 0;i < 4;i++)
  139.                                         {
  140.                                                 if(inpPasswd[i] != genPasswd[i])
  141.                                                 break;
  142.                                         }
  143.                                         if(i == 4)          //密碼輸入正確
  144.                                         {                                                
  145.                                         Lock = 0;    //開鎖
  146.                                         deng = 0;         //照明
  147.                                         clear();                 //清屏,準備下一屏的顯示
  148.                                         display3();    //顯示關門提示語        -- "close door!"
  149.                                     delay(1900);    //等待關門 大約3秒
  150.                                         clear();                 //清屏,準備下一屏的顯示
  151.                                         Lock = 1;   //關鎖
  152.                                         deng = 1;         //紫外線                                       
  153.                                         }
  154.                                         else   //密碼輸入錯誤  報警
  155.                                         {        
  156.                                                 clear();           //清屏,準備下一屏的顯示                                
  157.                                                 Lock = 1;  //關鎖
  158.                                                 BEEP=0;
  159.                                                 display9();        
  160.                                                 delay(1000);
  161.                                                 BEEP=1;
  162.                                                 display9();                                                                                                
  163.                                         }
  164.                                         clear();           //清屏,準備下一屏的顯示
  165.                                         global_state = 0;  //返回到初始界面
  166.                            }
  167.                            break;

  168.                            case 3:
  169.                                     display5();         //顯示Current T=
  170.                         display6();         //顯示上下限
  171.                         Read_Temperature(); //讀取溫度值
  172.                         display7();         //顯示溫度
  173.                         display8();         //顯示上下限溫度
  174.                                                 SetFun();           //指針>  
  175.                                             Alarm();
  176.                                                 wenk();
  177.                                                 if(key_value == 16) //確認按鍵被按下
  178.                                                 {
  179.                                                         key_value = 0xff;  //將按鍵值清除
  180.                                                         clear();           //清屏,準備下一屏的顯示
  181.                                                 global_state = 0;  //返回到初始界面
  182.                                                 }
  183.                                 break;

  184.                                 case 4:                           
  185.                                         Lock = 0;    //開鎖
  186.                                         deng = 0;         //照明
  187.                                         clear();                 //清屏,準備下一屏的顯示
  188.                                         display3();    //顯示關門提示語        -- "close door!"
  189.                                     delay(1900);    //等待關門 大約3秒
  190.                                         clear();                 //清屏,準備下一屏的顯示
  191.                                         Lock = 1;    //關鎖
  192.                                         deng = 1;         //紫外線                                                                                                               
  193.                                         clear();                 //清屏,準備下一屏的顯示
  194.                                         global_state = 1;   //切換運行狀態
  195.                                         passwd = TL0;  //采用定時器寄存器的值作為密碼
  196.                                         genPasswd[0] = passwd/100;                  //存儲密碼
  197.                                         genPasswd[1] = passwd%100/10;
  198.                                         genPasswd[2] = passwd%10;
  199.                                         genPasswd[3] = (genPasswd[1]+genPasswd[2])%10;                                                                                                                                       
  200.                                         break;                                                                                                                                                                 
  201.                 }               
  202.         }
  203. }
復制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:161164 發表于 2022-4-6 11:49 來自手機 | 只看該作者
global_state
回復

使用道具 舉報

板凳
ID:985137 發表于 2022-4-6 13:39 | 只看該作者

理解不懂,怎么改呢
回復

使用道具 舉報

地板
ID:161164 發表于 2022-4-6 18:44 | 只看該作者
2248373991 發表于 2022-4-6 13:39
理解不懂,怎么改呢

在手機看,按錯了

TL0在第44行被清零了
試試改變超聲波的距離看看密碼會不會有改變
回復

使用道具 舉報

5#
ID:985137 發表于 2022-4-16 18:24 來自手機 | 只看該作者
lkc8210 發表于 2022-4-6 18:44
在手機看,按錯了

TL0在第44行被清零了

對,怎么改呀
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费小视频 | 精品综合久久久 | 天天玩天天干天天操 | 欧美精品福利 | 国产ts人妖系列高潮 | 国产成人精品网站 | 一级黄a视频 | 日韩一区二区三区视频在线观看 | 最新日韩在线 | 国产精品一区二区三区四区五区 | 91精品久久久久久久久久入口 | 国产一区二区在线视频 | 99久久国产综合精品麻豆 | av日韩一区| 奇米视频777 | 久久精品99| 精品视频免费 | 精品美女在线观看视频在线观看 | 色综合久久天天综合网 | 韩日在线视频 | 正在播放国产精品 | 国产精品久久久久无码av | 欧美激情一区二区三区 | 亚洲免费在线观看视频 | 天天草天天干天天 | 欧美激情一区 | 蜜桃视频在线观看免费视频网站www | 国产农村妇女精品一二区 | 欧美多人在线 | caoporn地址 | 欧美激情欧美激情在线五月 | 国产成人精品免费视频大全最热 | 视频一二三区 | 亚洲欧美激情精品一区二区 | 精品国产欧美一区二区 | 91在线网站| 亚洲中午字幕 | 日韩成人在线观看 | 一区二区三区高清不卡 | 日韩中文字幕一区二区 | 日韩中文视频 |