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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9481|回復: 9
收起左側(cè)

51單片機-數(shù)碼管小時鐘制作

  [復制鏈接]
ID:80436 發(fā)表于 2015-5-20 14:56 | 顯示全部樓層 |閱讀模式
項目:簡單的時鐘(2015-2-23

設(shè)計要求:帶冒號的4位數(shù)碼管顯示時間(MT05643DR)、按鍵設(shè)置時間




分析:本例是簡單的時鐘,因此采用單片機定時器提供時鐘源。時間設(shè)置采用按鍵調(diào)節(jié),用兩個按鍵,一個負責小時的增加設(shè)置,另一個負責分鐘的增加。
單片機用STC12C2052AD20腳,晶振采用12M。
引腳分配:P1.0----P1.7  a b c d e f g :
P3.0 按鍵1 數(shù)碼管小時加1按鍵
P3.1 按鍵2 數(shù)碼管上分鐘加1設(shè)置按鍵
P3.2----P3.5  4位數(shù)碼管  
程序流程:
  1. #include <reg52.h>

  2. sbit Key1=P3^0;  //定義2個按鍵用于調(diào)整時間

  3. sbit Key2=P3^1;

  4. sbit Wei1=P3^2;     //四位數(shù)碼管定義端口

  5. sbit Wei2=P3^3;     //

  6. sbit Wei3=P3^4;

  7. sbit Wei4=P3^5;



  8. unsigned char code LEDchar[]={

  9.        0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};    //數(shù)碼管0-9真值表

  10. unsigned charLedBuff[4]={0xff,0xff,0xff,0xff}; //4位數(shù)碼管顯示數(shù)字緩存

  11. unsigned int ms=0;//定義毫秒全局變量

  12. unsigned char miao=0,fen=59,shi=23;//秒,分,時 全局變量

  13. bit keyst1=1;

  14. bit keyst2=1;

  15. bit backup1=1;

  16. bit backup2=1;

  17. void Time0int()//

  18. {

  19.        TMOD=0x01; //定時模式1,16位定時器

  20.        TH0=0xF8;//初值計算公式 65536-(定時時間(2ms=2000us)/1us(晶振12M的計數(shù)周期時間))=63536

  21.        TL0=0x30;//63536轉(zhuǎn)換為16進制為 F830H 分配給定時器TH0 TL0 就可以了

  22.        EA=1;//開總中斷

  23.        ET0=1;//打開定時器0中斷

  24.        TR0=1;//定時器0開始運行

  25. }



  26. void ShowNumber(unsigned int num)  //顯示數(shù)字函數(shù),參數(shù)是1個短整形的數(shù)字num

  27. {

  28.        signedchar i;              //定義變量i用于循環(huán)數(shù)的位數(shù)

  29.        unsignedchar buf[4];       //定義一個數(shù)組用于保存分離出來各位的數(shù)據(jù)



  30.        for(i=0;i<4; i++)

  31.        {

  32.               buf[i]= num % 10;  

  33.               num= num / 10;

  34.        }                       //上面2個語句就是循環(huán)4次,把1個4位數(shù)進行按位分離后存放在數(shù)組buf中



  35.        for(i=3;i>=1; i--)         //進行首位是零,不顯示

  36.        {

  37.               if(buf[i]== 0)     //如果首位是零,則把數(shù)碼管顯示緩存數(shù)據(jù)為0XFF,由于是共陽極數(shù)碼管,如果數(shù)據(jù)是0xff 則數(shù)碼管不顯示

  38.               {

  39.                      LedBuff[i]= 0xFF;

  40.               }

  41.               else               //如果首位不是零,則跳出循環(huán)

  42.                      break;

  43.        }

  44.       

  45.        for(;i>=0; i--)           //i繼承了上面語句的數(shù)值,把該位的數(shù)字通過Ledchar[buf[i]]數(shù)組,進行轉(zhuǎn)換為該數(shù)字的顯示數(shù)據(jù)并賦值給數(shù)碼管顯示緩存

  46.        {

  47.               LedBuff[i]= LEDchar[buf[i]];   

  48.        }



  49. }



  50. unsigned int num(unsigned charhour,unsigned char minute)  //2個8位數(shù)據(jù)類型變量,合并連接為16位數(shù)據(jù)來信變量

  51. {

  52.        unsignedint date;

  53.        date=100*hour+minute;

  54.        returndate;

  55. }



  56. void main()

  57. {

  58.        P1=LEDchar[0];

  59.        Time0int();//定時器初始化

  60.        while(1)

  61.        {

  62.               ShowNumber(num(shi,fen));

  63.               if(keyst1!=backup1)

  64.               {

  65.                      if(keyst1==0)

  66.                      {

  67.                             shi++;

  68.                      }

  69.                      backup1=Key1;

  70.               }

  71.              if(keyst2!=backup2)

  72.               {

  73.                      if(keyst2==0)

  74.                      {

  75.                             fen++;

  76.                      }

  77.                      backup2=Key2;

  78.               }

  79.        }   



  80. }



  81. void interruptTimer0() interrupt 1

  82. {

  83.        staticunsigned char i;

  84.        staticunsigned char keybuf1=0xff;

  85.        staticunsigned char keybuf2=0xff;

  86.        TH0=0xf8;     //定時器初值重新賦值

  87.        TL0=0x30;

  88.        ms++;            //利用2毫秒定時器中斷來進行時間的累計并把累計次數(shù)賦值給時間變量

  89.        if(ms>=500)

  90.        {

  91.               ms=0;

  92.               miao++;

  93.        }

  94.        if(miao>=60)

  95.        {

  96.               miao=0;

  97.               fen++;

  98.        }

  99.        if(fen>=60)

  100.        {

  101.               fen=0;

  102.               shi++;

  103.        }

  104.        if(shi>=24)

  105.        {

  106.               shi=0;

  107.        }

  108.        switch(i)//每次進入中斷進行1位數(shù)碼管的顯示刷新,5次耗時10ms

  109.        {

  110.              case0: Wei4=1;Wei3=1;Wei1=0;i++;P1=LedBuff[3];break;

  111.             case1: Wei1=1;Wei2=0;i++;P1=LedBuff[2];break;

  112.            case 2:Wei2=1;Wei3=0;i++;P1=LedBuff[1];break;

  113.               case3: Wei3=1;Wei4=0;i++;P1=LedBuff[0];break;

  114.               case4:

  115.               {

  116.                      Wei3=0;i=0;

  117.                      if(ms<=250)

  118.                             P1=0x7F;  //顯示數(shù)碼管上的冒號

  119.                      else

  120.                          P1=0xff;  //關(guān)閉冒號

  121.                      break;

  122.               }

  123.               default:break;

  124.        }

  125.        keybuf1=(keybuf1<<1)|Key1;       //按鍵掃描利用中斷每2ms檢測1次按鍵狀態(tài),把狀態(tài)值放入keybuf變量中

  126.        if(keybuf1==0x00) //經(jīng)過8次中斷,如果keybuf變量時0x00,則按鍵為按下狀態(tài),

  127.               keyst1=0;

  128.        elseif(keybuf1==0xff)  //經(jīng)過8次中斷,如果keybuf變量時0xff,則按鍵為彈起狀態(tài),

  129.               keyst1=1;

  130.        keybuf2=(keybuf2<<1)|Key2;

  131.        if(keybuf2==0x00)

  132.               keyst2=0;

  133.        elseif(keybuf2==0xff)

  134.               keyst2=1;



  135. }
復制代碼













評分

參與人數(shù) 2黑幣 +7 收起 理由
vvv64 + 5 共享資料的黑幣獎勵!
qjzyx + 2 贊一個!

查看全部評分

回復

使用道具 舉報

ID:74992 發(fā)表于 2015-5-20 19:52 | 顯示全部樓層
不錯,就是樓主給的資料不全哦。
回復

使用道具 舉報

ID:89183 發(fā)表于 2015-9-25 22:34 | 顯示全部樓層
很好謝謝樓主
回復

使用道具 舉報

ID:79544 發(fā)表于 2015-9-27 22:05 | 顯示全部樓層
程序還可以優(yōu)化,有點繁瑣。謝謝分享
回復

使用道具 舉報

ID:90952 發(fā)表于 2015-10-4 23:46 | 顯示全部樓層
很好謝謝樓主
回復

使用道具 舉報

ID:91533 發(fā)表于 2015-10-5 20:15 | 顯示全部樓層
我也想做一個這樣的時鐘,感覺很好玩!
回復

使用道具 舉報

ID:251133 發(fā)表于 2018-1-18 19:38 | 顯示全部樓層
用的什么時鐘芯片啊
回復

使用道具 舉報

ID:225105 發(fā)表于 2018-2-10 11:22 | 顯示全部樓層
我也想做一個這樣的時鐘,感覺很好玩!
回復

使用道具 舉報

ID:283240 發(fā)表于 2018-2-12 07:59 | 顯示全部樓層
謝謝樓主,好玩!
回復

使用道具 舉報

ID:266116 發(fā)表于 2018-2-12 15:28 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩三级黄色片 | 欧美国产精品 | 国产日韩欧美日韩大片 | 少妇一级毛片 | 最近中文字幕在线观看 | 成人免费视频一区二区 | 超碰人人干 | 欧美在线不卡 | 国产精品亚洲一区 | 国产免费一区二区三区最新不卡 | 亚洲国产片 | 国内自拍一区 | 久草视频免费在线观看 | 午夜影院福利 | 欧美日本在线观看 | 亚洲第一网站 | 日韩一级在线观看 | 美女黄色在线观看 | 天天干天天谢 | 99小视频 | 免费观看av| 日日夜夜精品视频免费 | 九九九九精品 | 日韩精品视频在线 | 国产一级片免费看 | 专业操老外 | 久久精品欧美一区二区 | 中文字幕中文字幕 | 91天堂在线 | www.日韩在线 | 亚洲欧美日韩在线 | 99久久综合| 日韩二区在线 | 久久草视频 | 久热精品视频在线观看 | 中文字幕在线一区二区三区 | 国产福利小视频 | 丁香婷婷色 | 中文字幕第一区 | 国产日韩中文字幕 | 国产黄色一区 |