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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91av视频在线播放 | 国产精品免费观看 | 国产欧美综合在线 | 久久久精品久 | 色噜噜色综合 | 免费视频一区二区 | 精品视频一区二区三区 | 91综合网 | 欧美一级久久 | 久久久久久高潮国产精品视 | 成人免费影院 | 狠狠色狠狠色综合系列 | 超碰97人人人人人蜜桃 | 91精品国产91久久久久久吃药 | 婷婷色网 | 成人在线精品视频 | 91精品国产91久久久久久最新 | 亚洲国产精选 | 国产精品国产精品国产专区不卡 | 欧美激情亚洲激情 | 成人在线中文字幕 | 欧美日韩在线免费观看 | 成人国产精品久久久 | 国产高清一二三区 | 久久久久精 | 91精品国产91久久久久久密臀 | 久久国产精品-久久精品 | 日韩一区二区在线视频 | av午夜电影 | 欧美亚洲视频 | 色婷婷久久综合 | 日韩国产在线 | 久久久国产一区二区三区 | 韩日av片 | 午夜www| 国产区第一页 | 亚洲精品无 | 日韩一区二区三区四区五区六区 | 久久免费高清 | 国产精品一区二区不卡 | 黄视频免费观看 |