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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12387|回復(fù): 0
收起左側(cè)

51單片機(jī)電子鐘設(shè)計(jì)6位共陽數(shù)碼管顯示的PCB及仿真源程序

[復(fù)制鏈接]
ID:408881 發(fā)表于 2018-10-13 09:12 | 顯示全部樓層 |閱讀模式
Altium Designer畫的8位共陽數(shù)碼管顯示51單片機(jī)時(shí)鐘原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png 0.png 0.png

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png

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

  4. uchar sec,min,hour;//定義時(shí)、分、秒變量
  5. uchar counter10ms0,counter10ms1; //定義T0和T1的10ms計(jì)數(shù)變量
  6. uchar counter05s0;//定義0.5秒變量

  7. uchar KeyCounter; //定義保存功能按鍵計(jì)數(shù)值變量

  8. uchar OldKey;  //定義保存按鍵狀態(tài)變量
  9. bit AddFlag,SubbFlag;//定義加、減按鍵標(biāo)志
  10. bit FlashFlag; //定義閃爍標(biāo)志
  11. sbit LED1=P1^0;
  12. sbit LED2=P1^1;
  13. sbit LED3=P1^2;
  14. sbit LED4=P1^3;
  15. uchar Disbuff[8]={0,0,10,0,0,10,0,0};//定義數(shù)碼管顯示緩沖區(qū)單元
  16. uchar code DisCode[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};        //共陽數(shù)碼管段碼,0~9及“-”“熄滅”字符的字型碼

  17. sbit LED=P3^4; //工作指示燈

  18. /****************************************
  19. * 延時(shí)函數(shù)Delaynms(uint dly)          *
  20. * 延時(shí)時(shí)間 dly x 1ms    12MHz           *
  21. ****************************************/
  22. void Delaynms(uint dly)
  23. {
  24.         uchar i;
  25.         while(dly--)
  26.                 for(i=0;i<123;i++);
  27. }
  28. /***************************************/

  29. /****************************************
  30. * 顯示函數(shù)Display()                     *
  31. * 功能:根據(jù)將8個(gè)數(shù)碼管顯示一遍         *
  32. ****************************************/
  33. void Display(void)
  34. {
  35.         uchar i,n=0x01;
  36.         for(i=0;i<8;i++)
  37.         {
  38.                  P0=DisCode[Disbuff[i]];         //送段碼  
  39.                 P2=~n;                        //開位選
  40.                 Delaynms(1);   //延時(shí)
  41.                 n=n<<1;           //位選移位
  42.                 P0=0xff;                //段碼低電平全滅
  43.                 P2=0xff;           //經(jīng)過非門后變成高電平,使得位選關(guān)閉
  44.         }
  45. }
  46. /****************************************/

  47. /****************************************
  48. * BIN碼變換成BCD碼函數(shù)TimeDataBin2Bcd() *
  49. * 功能:將時(shí)、分、秒分離出十位和個(gè)位    *
  50. ****************************************/
  51. void TimeDataBin2Bcd()
  52. {
  53.          Disbuff[0]=hour/10;//分離小時(shí)十位
  54.          Disbuff[1]=hour%10;//分離小時(shí)個(gè)位
  55.          Disbuff[3]=min/10;//分離分鐘十位
  56.          Disbuff[4]=min%10;//分離分鐘個(gè)位
  57.          Disbuff[6]=sec/10;//分離秒十位
  58.          Disbuff[7]=sec%10;//分離秒個(gè)位

  59. }
  60. /***************************************/

  61. /****************************************
  62. * 讀入按鍵函數(shù)ReadKey()                 *
  63. * 功能:若有按鍵按下,返回按鍵值        *
  64. *       若沒有按鍵按下,返回255         *
  65. ****************************************/
  66. uchar ReadKey()
  67. {
  68.         uchar Key;
  69.         Key=P3&0xe0; //讀入按鍵值  P3&1110 0000
  70.         if(Key!=0xe0)
  71.         {                          //若有鍵按下
  72.                  
  73.                 Delaynms(10);
  74.                 Key=P3&0xe0; //重新讀入按鍵值
  75.                 if(Key!=0xe0)
  76.                 {                         //若有鍵按下
  77.                         if((Key!=0xe0)&&(OldKey==0xe0))        //判斷是否下降沿  
  78.                          {
  79.                                 OldKey=Key;         //保存本次按鍵值
  80.                                 return(Key); //返回按鍵值
  81.                         }
  82.                 }        
  83.         }
  84.         OldKey=Key;        //無鍵按下,保存本次按鍵值,返回255
  85.         return(255);        //不能夠刪,否則出錯(cuò)   
  86. }
  87. /***************************************/

  88. /****************************************
  89. * 按鍵分析函數(shù)KeyAnalysis(uchar Key)    *
  90. * 功能:對功能鍵計(jì)數(shù)                    *
  91. *       對加、減鍵設(shè)標(biāo)志                *
  92. ****************************************/
  93. void KeyAnalysis(uchar Key)
  94. {
  95.         if(Key!=255)
  96.         {        //有鍵按下
  97.                 switch(Key)
  98.                 {
  99.                 case 0x60:        KeyCounter++;        //功能鍵按下           0110 0000  因?yàn)?5行Key=P3&0xe0; //重新讀入按鍵值
  100.                                                 if(KeyCounter==3)KeyCounter=0;
  101.                                                 break;
  102.                 case 0xa0:  if(KeyCounter!=0)AddFlag=1;break;  //+鍵按下        1010 0000         
  103.                 case 0xc0:  if(KeyCounter!=0)SubbFlag=1;break; //-鍵按下        1100 0000
  104.                 }
  105.         }
  106. }
  107. /***************************************/

  108. /****************************************
  109. * 時(shí)間調(diào)整函數(shù)AdjTime()                 *
  110. * 功能:對分鐘、小時(shí)加、減設(shè)置          *
  111. *                                       *
  112. ****************************************/
  113. void AdjTime()
  114. {
  115.          if(KeyCounter==1)
  116.         {                                 //設(shè)置分鐘
  117.                  if(AddFlag)
  118.                 {                         //分鐘+設(shè)置
  119.                          AddFlag=0; //標(biāo)志位要清零 ,否則影響下次按鍵判斷
  120.                         min++;
  121.                         if(min==60)min=0;
  122.                 }
  123.                 if(SubbFlag)
  124.                 {                   //分鐘-設(shè)置
  125.                          SubbFlag=0;                 //標(biāo)志位要清零 ,否則影響下次按鍵判斷
  126.                         min--;
  127.                         if(min==255)min=59;        //分鐘減到0的時(shí)候,unsigned char型的變量回到255
  128.                 }
  129.         }
  130.         if(KeyCounter==2)
  131.         {                          //設(shè)置小時(shí)
  132.                  if(AddFlag)
  133.                 {                  //小時(shí)+設(shè)置
  134.                          AddFlag=0;
  135.                         hour++;
  136.                         if(hour==24)hour=0;
  137.                 }
  138.                 if(SubbFlag)
  139.                 {                   //小時(shí)-設(shè)置
  140.                          SubbFlag=0;
  141.                         hour--;
  142.                         if(hour==255)hour=23;
  143.                 }
  144.         }
  145. }
  146. /***************************************/


  147. /****************************************
  148. * 閃爍控制函數(shù)FlashControl()            *
  149. * 功能:對調(diào)整的分鐘、小時(shí)進(jìn)行熄滅設(shè)置  *
  150. *                                       *
  151. ****************************************/
  152. void FlashControl()
  153. {
  154.         if(FlashFlag)
  155.         {
  156.                  if(KeyCounter==1)
  157.                 {
  158.                            Disbuff[3]=11;        //DisCode[11]=0x00,數(shù)碼管滅
  159.                          Disbuff[4]=11;
  160.                 }
  161.                  if(KeyCounter==2)
  162.                 {
  163.                            Disbuff[0]=11;
  164.                          Disbuff[1]=11;
  165.                 }
  166.         }
  167. }
  168. /******************************?????*********/

  169. /*void LEDFLASH(void)                  
  170. {
  171.         LED1=~LED1;
  172.         LED2=~LED2;
  173.         LED3=~LED3;
  174.         LED4=~LED4;
  175.         
  176. }
  177. */

  178. void main(void)
  179. {
  180.         uchar Key;
  181.         P1=0XF0;   //時(shí)分間隔的兩個(gè)LED燈亮
  182.         TMOD=0x11;         //定時(shí)器0,1都設(shè)置為工作方式一
  183.         TH0=(65536-10000)/256;
  184.         TL0=(65536-10000)%256;
  185.         TH1=(65536-10000)/256;
  186.         TL1=(65536-10000)%256;
  187.         ET0=1;ET1=1;   //開定時(shí)器0,1的中斷
  188.         EA=1;                //開總中斷
  189.         while(1)
  190.         {
  191.                 Key=ReadKey();                //讀取按鍵,檢測按鍵是否按下
  192.                 KeyAnalysis(Key);        //判斷哪個(gè)按鍵按下
  193.                 if(KeyCounter==0)         //假如沒有按下功能鍵
  194.                 {        TR0=1;                         //啟動(dòng)定時(shí)器0,秒計(jì)數(shù)
  195.                         TR1=0;
  196.                         TimeDataBin2Bcd();           //分離變量以便后面數(shù)碼管的顯示
  197.                 }
  198.                 else
  199.                 {
  200.                          TR0=0;                //關(guān)閉定時(shí)器0,
  201.                         TR1=1;                   //啟動(dòng)定時(shí)器1
  202.                         AdjTime();        //調(diào)整時(shí)間
  203.                         TimeDataBin2Bcd(); //分離變量以便后面數(shù)碼管的顯示
  204.                         FlashControl();           //對調(diào)整的分鐘、小時(shí)進(jìn)行熄滅數(shù)碼管設(shè)置
  205.                 }
  206.                 Display();         //顯示數(shù)碼管
  207.         }
  208. }

  209. void Timer0(void) interrupt 1
  210. {
  211.         TH0=(65536-10000)/256;
  212.         TL0=(65536-10000)%256;
  213.         counter10ms0++;
  214.         
  215.         if(counter10ms0==50)
  216.         {
  217.                  counter10ms0=0;
  218.                 counter05s0++;
  219.                 LED=0;                //LED=P3^4; //工作指示燈亮

  220.                 if(counter05s0==2)         //1s到來
  221.                 {         
  222.                         counter05s0=0;
  223.                         sec++;
  224. ……………………

  225. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
電子時(shí)鐘資料全.zip (2.56 MB, 下載次數(shù): 181)


回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区视频在线 | 亚洲高清免费观看 | 99re6在线视频精品免费 | 精品国产免费人成在线观看 | 成人精品一区二区三区四区 | av官网在线 | 中国一级毛片免费 | 午夜小视频免费观看 | 国产精品久久久久久久久久久新郎 | 国产精品色哟哟网站 | 午夜小视频免费观看 | 欧美性猛交一区二区三区精品 | 午夜在线视频一区二区三区 | 日操操夜操操 | 亚洲国产成人精品女人久久久 | 在线婷婷 | 久久精品国产一区二区三区不卡 | 狠狠婷婷综合久久久久久妖精 | 精品欧美一区二区精品久久久 | 国产婷婷在线视频 | 精品亚洲永久免费精品 | 精品国产色 | 美女黄网站视频免费 | 免费看91 | 日韩在线视频一区二区三区 | 亚洲精品一区二三区不卡 | 国产区一区| 久久精品免费观看 | 天堂一区二区三区 | 久久久久久黄 | 啪啪毛片 | 国产午夜精品一区二区三区 | 91视频在线 | 亚洲欧洲中文 | 精品一区二区三区中文字幕 | 欧洲成人免费视频 | 在线免费观看日本 | 香蕉国产在线视频 | 玖玖在线免费视频 | 日日操夜夜操天天操 | 欧美日韩精品久久久免费观看 |