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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機壓力計時器程序 原理圖PCB文件 LCD1602顯示

[復制鏈接]
跳轉到指定樓層
樓主
感應壓力后進行計時
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源程序如下:
  1. #include<reg52.h>                         //頭文件
  2. #include<LCD1602.h>
  3. #include<INTERRUPT.h>
  4. #include<AT24C02.h>
  5. #include<ADC0832.h>

  6. #define uchar unsigned char         //宏定義
  7. #define uint unsigned int

  8. /**********************引腳定義************************/
  9. sbit key_set  = P1^0;         //設置鍵
  10. sbit key_jia  = P1^3;         //加值鍵
  11. sbit key_jian = P1^6;         //減值鍵

  12. /**********************變量定義************************/
  13. uchar set_f=0;                  //設置變量  =1進入設置
  14. uint num=0;

  15. /********************************************************
  16. 函數名稱:void delayms(uint ms)
  17. 函數作用:毫秒延時函數
  18. 參數說明:
  19. ********************************************************/
  20. void delayms(uint ms)
  21. {
  22.         unsigned char i=100,j;
  23.         for(;ms;ms--)
  24.         {
  25.                 while(--i)
  26.                 {
  27.                         j=10;
  28.                         while(--j);
  29.                 }
  30.         }
  31. }
  32. /********************************************************
  33. 函數名稱:void display(void)
  34. 函數作用:顯示函數
  35. 參數說明:
  36. ********************************************************/
  37. void display()
  38. {
  39.         ADC0832_read(0);
  40.         if(ADC_date>20)           //檢測到有壓力感應
  41.         {
  42.                 if(miao1==0&&fen1==0) //還沒有開啟計時的話
  43.                         TR0=1;                          //開啟定時器計時
  44.                 lcd1602_write_character(2,1,"Have pressure");

  45.                 LCD_disp_char(5,2,ASCII[fen1/10]);         //顯示設置分
  46.                 LCD_disp_char(6,2,ASCII[fen1%10]);
  47.                 LCD_disp_char(7,2,':');
  48.                 LCD_disp_char(8,2,ASCII[miao1/10]);         //顯示設置秒
  49.                 LCD_disp_char(9,2,ASCII[miao1%10]);

  50.                 f=0;
  51.                 T_num=0;
  52.         }
  53.         else
  54.         {
  55.                 f=1;
  56.                 //TR0=0;                                  //壓力釋放后,關閉定時器計時
  57.                 if(TR0==0)
  58.                 {
  59.                         lcd1602_write_character(2,1," No pressure ");
  60.                         lcd1602_write_character(5,2,"     ");
  61.                 }
  62.                 //miao1=0;                          //計時時間清0
  63.                 //fen1=0;
  64.                 //buzz=1;                                  //關閉蜂鳴器
  65.         }       
  66. }

  67. /********************************************************
  68. 函數名稱:void display2()
  69. 函數作用:設置時間
  70. 參數說明:
  71. ********************************************************/
  72. void display2()
  73. {
  74.         num++;

  75.         lcd1602_write_character(2,1,"Set MAX time");
  76.         if(num%2==0)        //偶數次顯示,奇數次不顯示。這樣就會有閃爍效果,可以清楚看到當前設置的是哪個值
  77.         {               
  78.                 LCD_disp_char(5,2,ASCII[fen/10]);         //顯示設置分
  79.                 LCD_disp_char(6,2,ASCII[fen%10]);
  80.                 LCD_disp_char(7,2,':');
  81.                 LCD_disp_char(8,2,ASCII[miao/10]);         //顯示設置秒
  82.                 LCD_disp_char(9,2,ASCII[miao%10]);
  83.         }
  84.         else                        //奇數次不顯示
  85.         {
  86.                 switch(set_f)//根據當前設置的內容,對應位置閃爍
  87.                 {
  88.                         case 1: lcd1602_write_character(5,2,"  "); break;
  89.                         case 2: lcd1602_write_character(8,2,"  "); break;
  90.                         default: break;
  91.                 }
  92.         }
  93. }
  94. /********************************************************
  95. 函數名稱:void scan(void)
  96. 函數作用:按鍵查詢處理函數
  97. 參數說明:
  98. ********************************************************/
  99. void scan(void)
  100. {
  101.         if(key_set==0)                                                  //按鍵按下
  102.         {  
  103.                 delayms(7);                                                  //延時消抖
  104.                 if(key_set==0)                                          //再次確認按鍵按下
  105.                 {
  106.                         set_f++;                                  //設置變量+1
  107.                         if(set_f>2)                                  //全部設置完成,退出設置
  108.                         {
  109.                                 set_f=0;                          //重置設置變量
  110.                
  111.                                 AT24C02_write_date(0,fen); //寫入【分】數據保存
  112.                                 AT24C02_write_date(1,miao);//寫入【秒】數據保存
  113.                         }
  114.                 }
  115.                 while(!key_set);
  116.         }
  117.        
  118.         //加值
  119.         if(key_jia==0)                                                           //按鍵按下
  120.         {  
  121.                 delayms(7);                                                           //延時消抖
  122.                 if(key_jia==0)                                                   //再次確認按鍵按下
  123.                 {
  124.                          if(set_f==1)                                  //設置時間-分
  125.                         {
  126.                                 if(fen<99)                              //最大可設置99分
  127.                                         fen++;                                  //時間-分+1
  128.                         }
  129.                         if(set_f==2)                                  //設置時間-秒
  130.                         {
  131.                                 if(miao<59)                              //最大可設置59秒
  132.                                         miao++;                                  //時間-秒+1
  133.                                 else                                          
  134.                                         miao=0;                                  //時間-秒清0
  135.                         }       
  136.                 }
  137.         }
  138.        
  139.         //減值
  140.         if(key_jian==0)                                                          //按鍵按下
  141.         {  
  142.                 delayms(7);                                                          //延時消抖
  143.                 if(key_jian==0)                                                  //再次確認按鍵按下
  144.                 {
  145.                         if(set_f==1)                                  //設置時間-分
  146.                         {
  147.                                 if(fen!=0)                                  //最小可設置到0
  148.                                         fen--;                                  //時間-分-1
  149.                         }
  150.                         if(set_f==2)                                  //設置時間-秒
  151.                         {
  152.                                 if(miao!=0)                                  //最小可設置到0
  153.                                         miao--;                                  //時間-秒-1
  154.                                 else
  155.                                         miao=59;
  156.                         }
  157.                 }
  158.         }       
  159. }
  160. /********************************************************
  161. 函數名稱:void mian()
  162. 函數作用:主函數
  163. 參數說明:
  164. ********************************************************/
  165. void main()
  166. {
  167.         if(key_jian==0)
  168.         {  
  169.                 delayms(100);
  170.                 if(key_jian==0)
  171.                 {
  172.                         AT24C02_write_date(0,0); //寫入【分】數據保存
  173.                         AT24C02_write_date(1,10);//寫入【秒】數據保存
  174.                 }
  175.         }
  176.         fen=AT24C02_read_date(0);           //讀取存儲的【分】數據
  177.         miao=AT24C02_read_date(1);           //讀取存儲的【秒】數據

  178.         T0_init(); //定時器初始化
  179.         LCD_init();//LCD1602初始化
  180.         while(1)   //死循環
  181.         {
  182.                 scan();//按鍵掃描并處理
  183.                 if(set_f==0)    //正常檢測狀態
  184.                 {
  185.                         num++;
  186.                         if(num%1500==0)
  187.                         {
  188.                                 num=0;
  189.                                 display();
  190.                         }
  191.                 }
  192.                 else                     //設置時間狀態
  193.                         display2();         
  194.         }
  195. }
復制代碼

程序和原理圖PCB下載:
壓力計時器.zip (1.12 MB, 下載次數: 55)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品视频一二三区 | 欧美日韩精品一区二区天天拍 | 国产成人精品一区二区三区视频 | 成人三级网址 | 天天色天天射天天干 | caoporn免费在线视频 | 在线看亚洲 | 亚洲国产视频一区二区 | 日韩一区二区av | 亚洲成人免费视频 | 色成人免费网站 | 成人不卡视频 | 人人干免费 | 日本精品视频一区二区三区四区 | 成人网在线观看 | 91秦先生艺校小琴 | 国产综合一区二区 | 午夜国产 | 午夜a级理论片915影院 | 一级黄色片一级黄色片 | 日韩av免费看 | 亚洲欧美激情四射 | 国产一级黄色网 | 一区二区在线 | 精品蜜桃一区二区三区 | 日韩欧美网 | 91精品国产自产精品男人的天堂 | 亚洲成人精品在线 | 天天操天天射综合网 | 视频一区在线观看 | 精品亚洲一区二区三区四区五区高 | 97色在线观看免费视频 | 久久99网 | 在线免费观看黄a | 国产目拍亚洲精品99久久精品 | 久久99精品久久久97夜夜嗨 | 国产wwwcom| 美女一级毛片 | 免费在线观看一区二区 | 一区二区三区欧美在线观看 | 免费一级大片 |