欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1751|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)超聲波做的存包柜,定時(shí)器0中斷和外部0中斷,應(yīng)該是隨機(jī)密碼,但是顯示固定密碼

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

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

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

  44. /*主函數(shù)*/
  45. uchar global_state = 0;
  46. uchar count_num = 0;  //輸入的數(shù)字個(gè)數(shù)
  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();        //定時(shí)器初始化
  55.         initex();
  56.          lcd_init();        //LCD1602初始化  
  57.         while(1)        //進(jìn)入不斷循環(huán)
  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:         //初始化狀態(tài)
  67.                                 display1();         //顯示歡迎語句        -- "welcome"
  68.                                 deng = 1;         //紫外線
  69.                                 display5();  //顯示Current T=
  70.                                 Read_Temperature(); //讀取溫度值
  71.                                 display7();  //顯示溫度
  72.                                 Alarm();         //報(bào)警
  73.                                 wenk();                 //溫控
  74.                                 HC05_Init();
  75.                                 
  76.                                 if(SetKey==0)        //設(shè)置鍵                          
  77.                   {         
  78.                                            clear();         //清屏
  79.                                          global_state = 3;   //切換運(yùn)行狀態(tài)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  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();        //清屏,準(zhǔn)備下一屏的顯示
  93.                                   display10();        
  94.                                   delay(1000);
  95.                                   clear();        //清屏,準(zhǔn)備下一屏的顯示
  96.                                   global_state = 0;  //返回到初始界面
  97.                                 }
  98.                         }
  99.                                  
  100.                                 if(key_value == 14)  //取餐按鍵被按下
  101.                                 {
  102.                                     key_value = 0xff;  //將按鍵值清除
  103.                                         clear();    //清屏,準(zhǔn)備下一屏的顯示
  104.                                         global_state = 2;  //切換運(yùn)行狀態(tài)
  105.                                         count_num = 0;   //清除數(shù)字按鍵變量
  106.                                         for(i = 0;i < 4;i++)  //清空輸入的密碼數(shù)組
  107.                                         inpPasswd[i] = ' '-0x30;
  108.                                 }
  109.                             break;

  110.                         case 1:                //密碼生成狀態(tài)                                                

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

  116.                         case 2:          //輸入密碼狀態(tài)
  117.                            display4();           //顯示輸入密碼界面
  118.                            if((key_value >= 0) && (key_value <= 9))          //如果按下的為0-9的數(shù)字按鍵
  119.                            {                              
  120.                                 if(count_num <= 3)         //如果按鍵次數(shù)小于4次
  121.                                         {
  122.                                         inpPasswd[count_num] = key_value; //將按鍵值存入數(shù)組,并顯示
  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) //確認(rèn)按鍵被按下
  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();                 //清屏,準(zhǔn)備下一屏的顯示
  148.                                         display3();    //顯示關(guān)門提示語        -- "close door!"
  149.                                     delay(1900);    //等待關(guān)門 大約3秒
  150.                                         clear();                 //清屏,準(zhǔn)備下一屏的顯示
  151.                                         Lock = 1;   //關(guān)鎖
  152.                                         deng = 1;         //紫外線                                       
  153.                                         }
  154.                                         else   //密碼輸入錯(cuò)誤  報(bào)警
  155.                                         {        
  156.                                                 clear();           //清屏,準(zhǔn)備下一屏的顯示                                
  157.                                                 Lock = 1;  //關(guān)鎖
  158.                                                 BEEP=0;
  159.                                                 display9();        
  160.                                                 delay(1000);
  161.                                                 BEEP=1;
  162.                                                 display9();                                                                                                
  163.                                         }
  164.                                         clear();           //清屏,準(zhǔn)備下一屏的顯示
  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) //確認(rèn)按鍵被按下
  178.                                                 {
  179.                                                         key_value = 0xff;  //將按鍵值清除
  180.                                                         clear();           //清屏,準(zhǔn)備下一屏的顯示
  181.                                                 global_state = 0;  //返回到初始界面
  182.                                                 }
  183.                                 break;

  184.                                 case 4:                           
  185.                                         Lock = 0;    //開鎖
  186.                                         deng = 0;         //照明
  187.                                         clear();                 //清屏,準(zhǔn)備下一屏的顯示
  188.                                         display3();    //顯示關(guān)門提示語        -- "close door!"
  189.                                     delay(1900);    //等待關(guān)門 大約3秒
  190.                                         clear();                 //清屏,準(zhǔn)備下一屏的顯示
  191.                                         Lock = 1;    //關(guān)鎖
  192.                                         deng = 1;         //紫外線                                                                                                               
  193.                                         clear();                 //清屏,準(zhǔn)備下一屏的顯示
  194.                                         global_state = 1;   //切換運(yùn)行狀態(tài)
  195.                                         passwd = TL0;  //采用定時(shí)器寄存器的值作為密碼
  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. }
復(fù)制代碼

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

使用道具 舉報(bào)

沙發(fā)
ID:161164 發(fā)表于 2022-4-6 11:49 來自觸屏版 | 只看該作者
global_state
回復(fù)

使用道具 舉報(bào)

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

理解不懂,怎么改呢
回復(fù)

使用道具 舉報(bào)

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

在手機(jī)看,按錯(cuò)了

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

使用道具 舉報(bào)

5#
ID:985137 發(fā)表于 2022-4-16 18:24 來自觸屏版 | 只看該作者
lkc8210 發(fā)表于 2022-4-6 18:44
在手機(jī)看,按錯(cuò)了

TL0在第44行被清零了

對,怎么改呀
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表