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

標題: 3種按鍵實現不同功能的單片機源程序 [打印本頁]

作者: 初學者小樂    時間: 2019-7-19 17:27
標題: 3種按鍵實現不同功能的單片機源程序
此程序為本人以前剛學時候編寫的,還存在許多未經優化的地方,也沒有多少注釋,請多擔待。
功能如下:
1、按下k1,流水燈閃爍。
2、按下k2,開始從20開始計時。
3、按下k3,停止計時,開始累加。




以下為部分程序:
  1. #include  "reg52.h"
  2. #include "intrins.h"
  3. #define led P1   //定義LED
  4. sbit k1=P0^0;
  5. sbit k2=P0^1;
  6. sbit k3=P0^2 ;         //定義按鍵
  7. char code smguan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //數字定義
  8. #define num1   P2
  9. #define num2   P3//定義數碼管管腳
  10. int a=0,b=2;
  11. int c=0;d=2;

  12. void delay(int i)
  13. {
  14.   while(i--);
  15. }


  16. void delay800ms()   //誤差 0us
  17. {
  18.     unsigned char a,b,c;
  19.     for(c=95;c>0;c--)
  20.         for(b=138;b>0;b--)
  21.             for(a=29;a>0;a--);
  22.     _nop_();  //if Keil,require use intrins.h
  23.     _nop_();  //if Keil,require use intrins.h
  24. }

  25. void twinkle()
  26. {
  27.         
  28.   if(k1==1)                  //檢測按鍵K1是否按下
  29.         {        
  30.                 delay(1000);   //消除抖動 一般大約10ms
  31.                 if(k1==1)         //再次判斷按鍵是否按下
  32.                 {        
  33.                                 while(1)
  34.                                 {led=0xaa;
  35.                            delay(50000);
  36.                                  led=~led; //led狀態取反
  37.                                  delay(50000);
  38.                                         if((k2==1)||(k3==1))break;
  39.                                 }
  40.                 }
  41.         }        
  42. }        


  43. void Timer1Init()
  44. {
  45.         TMOD|=0X10;//選擇為定時器1模式,工作方式1,僅用TR1打開啟動。

  46.         TH1=0XFC;        //給定時器賦初值,定時1ms
  47.         TL1=0X18;        
  48.         ET1=1;//打開定時器1中斷允許
  49.         EA=1;//打開總中斷
  50.         TR1=1;//打開定時器                        
  51. }


  52. void time()
  53. {        
  54.         if(k2==1)                  //檢測按鍵K2是否按下
  55.         {        
  56.                 delay(1000);   //消除抖動 一般大約10ms
  57.                 if(k2==1)         //再次判斷按鍵是否按下
  58.                 {        
  59.         Timer1Init();  //定時器1初始化
  60.                
  61.                 }
  62.         }

  63. }


  64. void Timer1() interrupt 3
  65. {
  66.         static int i;
  67.         TH1=0XFC;        //給定時器賦初值,定時1ms
  68.         TL1=0X18;
  69.         i++;
  70.         if(i==1000)
  71.         {

  72.                 i=0;
  73.                 num2=smguan[a++];
  74.                 num1=smguan[b];
  75.                 if(a==10)        
  76.                 {
  77.                   a=0;
  78.                         if(b==5)
  79.                         {
  80.                           b=2;
  81.                         }
  82.                         else b++;
  83.                 }         
  84.         }        
  85.         if((k1==1)||(k3==1))TR1=0;
  86. }

  87. void Timer0Init()
  88. {
  89.         TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。

  90.         TH0=0XFC;        //給定時器賦初值,定時1ms
  91.         TL0=0X18;        
  92.         ET0=1;//打開定時器0中斷允許
  93.         EA=1;//打開總中斷
  94.         TR0=1;//打開定時器                        
  95. }


  96. void leijia()
  97. {
  98.         while(1){
  99.                 if(k3==1)                  //檢測按鍵K1是否按下
  100.         {
  101.                    delay(80);   //消除抖動 一般大約10ms
  102.                  if(k3==1)         //再次判斷按鍵是否按下
  103.                 { num2=smguan[c];
  104.                         num1=smguan[d];
  105.                         c=c+1;
  106.                  if(c==10)        
  107.                 {
  108.                   c=0;
  109.                         if(d==5)
  110.                         {
  111.                           d=2;
  112.                         }
  113.                         else d=d+1;
  114.                 }        

  115.    }
  116. }delay(20000);
  117.         if((k1==1)||(k2==1)){c=0;d=2;break;}
  118. }
  119. }

  120. void main()
  121. {
  122.   while(1)
  123.         {
  124.           twinkle();
  125.           time();
  126.                 leijia();
  127.         }        
  128. }
復制代碼
新建 Microsoft Word 文檔.docx (15.15 KB, 下載次數: 5)





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 免费性视频 | 成人在线免费观看av | 日韩成人 | 日韩欧美网 | 国产xxxx岁13xxxxhd | 亚洲福利一区二区 | 久久久久久成人 | 欧美性久久久 | 亚洲视频一区在线观看 | 91免费福利在线 | 色狠狠一区 | 一级一片在线观看 | 本道综合精品 | 在线视频国产一区 | 四虎免费视频 | 亚洲欧美一区二区三区国产精品 | 日韩欧美三区 | 成人夜晚看av | 国产91在线 | 亚洲 | 黄色免费在线观看网站 | a中文在线视频 | 国产精品美女久久久久久免费 | 欧美黄色性生活视频 | 欧美日韩在线一区二区 | 国产精品7777777| 久久999 | 一区二区三区不卡视频 | 丁香婷婷在线视频 | 免费一区 | 污污的网站在线观看 | 亚洲国产精品成人久久久 | 亚洲成人动漫在线观看 | 中文字字幕一区二区三区四区五区 | 亚洲国产成人精品久久久国产成人一区 | 亚洲三区在线播放 | 成人在线视频一区 | 久久中文高清 | 国产精品欧美一区二区 | 91精品国产综合久久久久 | 国产在线观看一区二区 | 一级毛片黄片 |