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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

單片機(jī)實(shí)現(xiàn)呼吸燈,計(jì)算器,秒表源程序,大放送(帶詳細(xì)注釋)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

里面有三種方式實(shí)現(xiàn)LED呼吸燈,還有計(jì)算器,秒表

單片機(jī)源程序如下:
  1. #include <REGX51.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. #define PIN0 P0  //數(shù)碼管段選端
  5. sbit LSA=P2^2;  //38譯碼器數(shù)碼管位選
  6. sbit LSB=P2^3;
  7. sbit LSC=P2^4;
  8. sbit beep =  P1^5;

  9. sbit start=P3^2;  //啟動(dòng)/暫停按鈕
  10. sbit reset=P3^3;  //復(fù)位按鈕

  11. uint cnt=0;   //1s的次數(shù)的計(jì)數(shù)值
  12. uint num=0;     //進(jìn)入中斷次數(shù)的計(jì)數(shù)值(一次50ms)
  13. uint num1=0;                //0.1s的次數(shù)的計(jì)數(shù)值
  14. uint num2=0;
  15. uchar code table[]={0x3f,0x06,0x5b,
  16. 0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f};
  17. //不帶小數(shù)點(diǎn)的共陰極數(shù)碼管段碼0-9

  18. uchar code table1[]={0xbf,0x86,
  19. 0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
  20. //帶小數(shù)點(diǎn)的共陰極數(shù)碼管段碼0-9
  21. //<span style="font-size:14px;">
  22. char code table2[]={0xc0,0xf9,0xa4,
  23. 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  24. //不帶小數(shù)點(diǎn)的共陽(yáng)極數(shù)碼管段碼0-9

  25. void Display(uint w,uint a,uint b,uint c,uint d);  //聲明顯示函數(shù)
  26. void InitTimer0();  //聲明定時(shí)器初始化函數(shù)
  27. void Delayms(uint x);  //聲明延時(shí)函數(shù)

  28. void main()
  29. {
  30.         uint ms100=0;uint ms10=0;        //秒的十分位
  31.         uint s,s1,min,minu=0;
  32.         //依次是秒的個(gè)位,秒的十位,分的個(gè)位,分的十位
  33.         InitTimer0();          //初始化定時(shí)器
  34.         while(1)                        //進(jìn)入死循環(huán)
  35. {        
  36.         if(start==0)   //檢測(cè)啟動(dòng)/暫停鍵是否按下
  37.                         Delayms(20); //延時(shí)消抖
  38.         {
  39.                 if(start==0)  //消抖之后再次檢測(cè)
  40.                 {
  41.                         TR0=~TR0;                //定時(shí)器的控制位取反
  42.                         while(!start);  //等待按鍵釋放
  43.                 }
  44.         }
  45.         
  46. if(reset==0)  //檢測(cè)復(fù)位鍵是否按下
  47. {
  48.         Delayms(20);        //延時(shí)消抖
  49.         if(reset==0)          //消抖之后再次檢測(cè)
  50.         {
  51.                 num=0;               
  52.                 num1=0;                //進(jìn)入中斷次數(shù)值清0
  53.                 ms100=0;
  54.                 ms10=0;        //十分位的計(jì)數(shù)值清0
  55.                 cnt=0;                //秒的計(jì)數(shù)值清0
  56.                 minu=0;                //分的計(jì)數(shù)值清0
  57.                 while(!reset);                 //等待按鍵釋放
  58.         }
  59. }
  60.         if(num1>=2)                //檢測(cè)是否達(dá)到0.1s,(兩個(gè)50ms)
  61.         {
  62.                 num1=0;                  //進(jìn)入中斷次數(shù)值清零
  63.                 ms10++;
  64.         if(num2>=20)
  65.         {
  66.         ms10=0;
  67.         ms100++;
  68.         num2=0;
  69.         }                //秒的十分位的計(jì)數(shù)值加1
  70.                 if(ms100>=10)  //若秒的十分位計(jì)數(shù)值達(dá)到10
  71.                 {
  72.                         ms100=0;  //清零秒的十分位的計(jì)數(shù)值
  73.                         num1=0;//</span><span style="font-size:14px;">        </span><span style="font-size:14px;">//進(jìn)入中斷次數(shù)值置0
  74.                 }
  75.         }
  76.         
  77.         if(num>=200)  //判斷計(jì)時(shí)時(shí)間是否達(dá)到1s(20個(gè)50ms)
  78.         {
  79.                 num=0;     //進(jìn)入中斷次數(shù)值置0
  80.                 cnt++;
  81.                 switch(cnt)//判斷是否達(dá)到60s
  82.         {
  83.         case 5: beep=~beep;
  84.          
  85.          beep=~beep;
  86.          Delayms(2);beep=~beep;
  87.          Delayms(2);beep=~beep;
  88.          Delayms(2); break;         
  89. }                   //秒的計(jì)數(shù)值加1
  90.                 if(cnt>=60) //判斷是否達(dá)到60s
  91.         {
  92.                 cnt=0;                //若達(dá)到60s,將秒的計(jì)數(shù)值置零
  93.                 minu++;        
  94.         
  95.                 if(minu>=60)  //判斷是否達(dá)到60分鐘,一般秒表是用不到60分的,這是為了程序的嚴(yán)謹(jǐn)性

  96.                 {
  97.                         TR0=!TR0;                        //達(dá)到60分鐘則關(guān)閉定時(shí)器并清零所有的計(jì)數(shù)值
  98.                         num1=0;//
  99.                         num=0;
  100.                         ms100=0;
  101.                         cnt=0;               
  102.                         minu=0;
  103.                         
  104.                 }
  105.         }
  106.         }        
  107.         s=cnt%10;          //從秒的計(jì)數(shù)值里面分離秒的個(gè)位
  108.         s1=cnt/10;         //從秒的計(jì)數(shù)值里面分離秒的十位
  109.         min=minu%10;        //從分的計(jì)數(shù)值里面分離分的個(gè)位
  110.         
  111.         Display(ms100,s,s1,min,ms10);  //顯示這5個(gè)數(shù)
  112. }        
  113. }

  114. void InitTimer0() //定時(shí)器初始化函數(shù)
  115. {
  116.         
  117.         TMOD=0x01; //選擇定時(shí)器0的工作方式1
  118.         TH0=(65536-5000)/256;  //裝初值(定時(shí)50ms),晶振11.0592MHz
  119.         TL0=(65536-5000)%256;
  120.         EA=1;                //打開(kāi)總中斷
  121.         ET0=1;        //打開(kāi)定時(shí)器中斷
  122.         TR0=0;        //先不要啟動(dòng)定時(shí)器
  123.         
  124. }

  125. void TIMER0()  interrupt 1  //定時(shí)器中斷服務(wù)函數(shù)
  126. {
  127.         TH0=(65536-5000)/256;  //重裝初值
  128.         TL0=(65536-5000)%256;
  129.         num++;                //讓進(jìn)入中斷次數(shù)值加1,用于判斷是否達(dá)到1s
  130.         num1++;        
  131.         num2++;        //讓進(jìn)入中斷次數(shù)值加1,用于判斷是否達(dá)到0.1s
  132. }

  133. void Delayms(uint x)   //延時(shí)xms
  134. {
  135.         uint i,j;
  136.         for(i=x;i>0;i--)
  137.                 for(j=110;j>0;j--);
  138. }

  139. void Display(uint w,uint a,uint b,uint c,uint d) //定義顯示函數(shù)
  140. {
  141. LSA=0; LSB=0; LSC=0; PIN0=table[d];
  142.          
  143.         
  144.         LSA=1; LSB=0; LSC=0;PIN0=table[w];        //秒的十分位的段選
  145.         Delayms(5);
  146.         
  147.          LSA=0; LSB=1; LSC=0;
  148.          PIN0=table[a]; //秒的個(gè)位的段選
  149.         Delayms(5);                        
  150.         
  151.          LSA=1; LSB=1; LSC=0;
  152.           PIN0=table[b];  //秒的十位的段選               
  153.         Delayms(5);
  154.         
  155.           LSA=0; LSB=0; LSC=1;
  156.            PIN0=table[c];  //分的個(gè)位的段選(帶小數(shù)點(diǎn))
  157.                  //分的個(gè)位的位選
  158.         Delayms(5);
  159. }

  160.         
復(fù)制代碼

所有資料51hei提供下載:
單片機(jī).7z (31.15 KB, 下載次數(shù): 28)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:328014 發(fā)表于 2019-6-2 05:31 | 只看該作者
好東東 能分享電路嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:318851 發(fā)表于 2019-6-6 20:13 | 只看該作者
感謝樓主
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91国产视频在线 | 成人在线国产 | 精品一区二区三区在线视频 | 伊人二区 | www.色五月.com| 中文字幕一区二区三 | 日韩欧美在线观看 | 99精品免费久久久久久久久日本 | 免费在线观看av | 国产在线视频一区 | 日本欧美在线观看视频 | www.一区二区三区 | 男女羞羞网站 | 精品视频一区二区 | 99久久精品国产麻豆演员表 | 三级黄色大片网站 | 日日夜夜免费精品视频 | 91色视频在线观看 | 久久午夜电影 | 欧美日韩中 | 国产精品一区二区福利视频 | 黄网站免费入口 | 一区二区国产在线 | 国产精品我不卡 | 国产精品一区视频 | 91精品一区二区三区久久久久久 | 91欧美精品 | 欧美性生活视频 | 蜜桃免费一区二区三区 | 毛片一级网站 | 国产成人免费在线 | 香蕉一区| 一级黄片一级毛片 | 国产人成精品一区二区三 | 三区在线观看 | 色爱综合网| 一区影院 | 欧产日产国产精品视频 | 99精品亚洲国产精品久久不卡 | 亚洲成人精品 | 亚洲精品白浆高清久久久久久 |