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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

一個小學(xué)生都會做的單片機(jī)時鐘。帶源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
    自己做的小時鐘--沒用時鐘芯片。。。           注: 時鐘精度取決于晶振精度(這是用單片機(jī)產(chǎn)生時鐘的)   功能詳見資料和源程序。。。。                                                       本人是新手,請別介意
長按P2.5的按鍵,進(jìn)入下一項(xiàng)調(diào)整;
在正常顯示狀態(tài)下,短按2.2的按鍵進(jìn)行亮度調(diào)整;
在調(diào)時狀態(tài)下,短按2.2的按鍵進(jìn)行加1調(diào)整;
在鬧鐘鳴響狀態(tài)下,輕觸單片機(jī)的3.3進(jìn)行關(guān)閉鬧鐘;程序下載:http://www.zg4o1577.cn/bbs/dpj-186560-1.html

單片機(jī)源程序如下:
  1. /*********************************************************************************************
  2. 程序名:    數(shù)碼管時鐘 ZJW48
  3. 編寫人:    張晉瑋 
  4. 編寫時間:  2020年5月2日
  5. 硬件支持:  一定要用型號為4563BS的數(shù)碼管,否則可能無法正常顯示
  6. 接口說明:  無                                                         
  7. /*********************************************************************************************
  8. 說明:先要把STC12C5608AD的頭文件復(fù)制到Keil/C51/INC里
  9.           (如果有的話就不用)
  10. /*********************************************************************************************/

  11. #include <STC12C5630AD.H>

  12. /**********************************************************************************************/
  13. //-------程序調(diào)試設(shè)置項(xiàng)-------
  14. #define LI                        5         //設(shè)置LED顯示的亮度(值域:1~9)
  15. #define DELAY                9         //設(shè)置每一個點(diǎn)顯示的時間長度(1~20)
  16. /**********************************************************************************************/
  17. sbit        LED_H1        =P2 ^ 0; //設(shè)置LED數(shù)碼管連接的I/O口
  18. sbit        LED_H2        =P3 ^ 7; //設(shè)置LED數(shù)碼管連接的I/O口
  19. sbit        LED_H3        =P2 ^ 7; //設(shè)置LED數(shù)碼管連接的I/O口
  20. sbit        LED_H4        =P2 ^ 6; //設(shè)置LED數(shù)碼管連接的I/O口

  21. sbit        LED_L1        =P1 ^ 7; //設(shè)置LED數(shù)碼管連接的I/O口
  22. sbit        LED_L2        =P1 ^ 0; //設(shè)置LED數(shù)碼管連接的I/O口
  23. sbit        LED_L3        =P1 ^ 3; //設(shè)置LED數(shù)碼管連接的I/O口
  24. sbit        LED_L4        =P1 ^ 5; //設(shè)置LED數(shù)碼管連接的I/O口
  25. sbit        LED_L5        =P1 ^ 6; //設(shè)置LED數(shù)碼管連接的I/O口
  26. sbit        LED_L6        =P1 ^ 1; //設(shè)置LED數(shù)碼管連接的I/O口
  27. sbit        LED_L7        =P1 ^ 2; //設(shè)置LED數(shù)碼管連接的I/O口
  28. sbit        LED_L8        =P1 ^ 4; //設(shè)置LED數(shù)碼管連接的I/O口                                                                 

  29. sbit        BEEP         =  P2 ^ 4; //揚(yáng)聲器
  30. sbit        KEY1         =  P2 ^ 5; //按鍵1(M鍵)                        
  31. sbit        KEY2         =  P2 ^ 2; //按鍵2(+鍵)
  32. sbit        KEY3         =  P3 ^ 3; //按鍵3(關(guān)蜂鳴器鍵)

  33. #define P3M0SET                0x08 //設(shè)置I/O口工作方式//00001000(左到右,高到低位)
  34. #define P3M1SET                0x80 //設(shè)置I/O口工作方式//10000000
  35. #define P1M0SET                0x00 //設(shè)置I/O口工作方式//00000000
  36. #define P1M1SET                0x00 //設(shè)置I/O口工作方式//00000000
  37. #define P2M0SET                0x00 //設(shè)置I/O口工作方式//00000000
  38. #define P2M1SET                0xc1 //設(shè)置I/O口工作方式//11000001
  39. unsigned char TIME_FH,TIME_FM,TIME_HH,TIME_MM,TIME_SS=0;
  40. unsigned char cou  = 0;    // 軟計數(shù)器,對50ms時基信號累加到1s
  41. unsigned char PWM;         //顯示亮度
  42. unsigned char MENU=0;                //菜單值
  43. bit r=1;                                    //秒點(diǎn)閃爍標(biāo)志位                                                         

  44. unsigned char code disdata[]={
  45. 0x3f,0x06,0x5b,0x4f,0x66,
  46. 0x6d,0x7d,0x07,0x7f,0x6f         //無小數(shù)點(diǎn)數(shù)碼管段碼表(0~9)
  47. };
  48. /*********************************************************************************************/
  49. void delay (unsigned int a){ // 用于點(diǎn)掃描的延時
  50.         unsigned int i;
  51.         while( --a != 0){
  52.                 for(i = 0; i < DELAY; i++);
  53.         }                                      
  54. }
  55. /*********************************************************************************************/
  56. void MCU_YS (unsigned int a){
  57.         unsigned int i;
  58.         while( --a != 0){
  59.                 for(i = 0; i < 600; i++);
  60.         }
  61. }
  62. /*********************************************************************************************/
  63. void dis_off (void){
  64.         P3 = ~P3M1SET; //關(guān)所有顯示
  65.         P1 = ~P1M1SET;
  66.         P2 = ~P2M1SET;
  67.         delay(10-PWM);
  68. }
  69. /*********************************************************************************************/
  70. void displayHH1 (unsigned char d){ //第1列橫向顯示程序
  71.         unsigned char i;
  72.         i = d & 0x01;
  73.         if(i == 0x01){
  74.                 LED_H1 = 1;LED_L1 = 0;}delay(PWM);dis_off();
  75.         i = d & 0x02;
  76.         if(i == 0x02){
  77.                 LED_H1 = 1;LED_L2 = 0;}delay(PWM);dis_off();
  78.         i = d & 0x04;
  79.         if(i == 0x04){
  80.                 LED_H1 = 1;LED_L3 = 0;}delay(PWM);dis_off();
  81.         i = d & 0x08;
  82.         if(i == 0x08){
  83.                 LED_H1 = 1;LED_L4 = 0;}delay(PWM);dis_off();
  84.         i = d & 0x10;
  85.         if(i == 0x10){
  86.                 LED_H1 = 1;LED_L5 = 0;}delay(PWM);dis_off();
  87.         i = d & 0x20;
  88.         if(i == 0x20){
  89.                 LED_H1 = 1;LED_L6 = 0;}delay(PWM);dis_off();
  90.         i = d & 0x40;
  91.         if(i == 0x40){
  92.                 LED_H1 = 1;LED_L7 = 0;}delay(PWM);dis_off();
  93.         i = d & 0x80;
  94.         if(i == 0x80){
  95.                 LED_H1 = 1;LED_L8 = 0;}delay(PWM);dis_off();
  96. }
  97. /*********************************************************************************************/
  98. void displayHH2 (unsigned char d){ //第2列橫向顯示程序
  99.         unsigned char i;
  100.         i = d & 0x01;
  101.         if(i == 0x01){
  102.                 LED_H2 = 1;LED_L1 = 0;}delay(PWM);dis_off();
  103.         i = d & 0x02;
  104.         if(i == 0x02){
  105.                 LED_H2 = 1;LED_L2 = 0;}delay(PWM);dis_off();
  106.         i = d & 0x04;
  107.         if(i == 0x04){
  108.                 LED_H2 = 1;LED_L3 = 0;}delay(PWM);dis_off();
  109.         i = d & 0x08;
  110.         if(i == 0x08){
  111.                 LED_H2 = 1;LED_L4 = 0;}delay(PWM);dis_off();
  112.         i = d & 0x10;
  113.         if(i == 0x10){
  114.                 LED_H2 = 1;LED_L5 = 0;}delay(PWM);dis_off();
  115.         i = d & 0x20;
  116.         if(i == 0x20){
  117.                 LED_H2 = 1;LED_L6 = 0;}delay(PWM);dis_off();
  118.         i = d & 0x40;
  119.         if(i == 0x40){
  120.                 LED_H2 = 1;LED_L7 = 0;}delay(PWM);dis_off();
  121.         i = d & 0x80;
  122.         if(i == 0x80){
  123.                 LED_H2 = 1;LED_L8 = 0;}delay(PWM);dis_off();

  124. }
  125. /*********************************************************************************************/
  126. void displayHH3 (unsigned char d){ //第3列橫向顯示程序
  127.         unsigned char i;
  128.         i = d & 0x01;
  129.         if(i == 0x01){
  130.                 LED_H3 = 1;LED_L1 = 0;}delay(PWM);dis_off();
  131.         i = d & 0x02;
  132.         if(i == 0x02){
  133.                 LED_H3 = 1;LED_L2 = 0;}delay(PWM);dis_off();
  134.         i = d & 0x04;
  135.         if(i == 0x04){
  136.                 LED_H3 = 1;LED_L3 = 0;}delay(PWM);dis_off();
  137.         i = d & 0x08;
  138.         if(i == 0x08){
  139.                 LED_H3 = 1;LED_L4 = 0;}delay(PWM);dis_off();
  140.         i = d & 0x10;
  141.         if(i == 0x10){
  142.                 LED_H3 = 1;LED_L5 = 0;}delay(PWM);dis_off();
  143.         i = d & 0x20;
  144.         if(i == 0x20){
  145.                 LED_H3 = 1;LED_L6 = 0;}delay(PWM);dis_off();
  146.         i = d & 0x40;
  147.         if(i == 0x40){
  148.                 LED_H3 = 1;LED_L7 = 0;}delay(PWM);dis_off();
  149.         i = d & 0x80;
  150.         if(i == 0x80){
  151.                 LED_H3 = 1;LED_L8 = 0;}delay(PWM);dis_off();

  152. }
  153. /*********************************************************************************************/
  154. void displayHH4 (unsigned char d){ //第4列橫向顯示程序
  155.         unsigned char i;
  156.         i = d & 0x01;
  157.         if(i == 0x01){
  158.                 LED_H4 = 1;LED_L1 = 0;}delay(PWM);dis_off();
  159.         i = d & 0x02;
  160.         if(i == 0x02){
  161.                 LED_H4 = 1;LED_L2 = 0;}delay(PWM);dis_off();
  162.         i = d & 0x04;
  163.         if(i == 0x04){
  164.                 LED_H4 = 1;LED_L3 = 0;}delay(PWM);dis_off();
  165.         i = d & 0x08;
  166.         if(i == 0x08){
  167.                 LED_H4 = 1;LED_L4 = 0;}delay(PWM);dis_off();
  168.         i = d & 0x10;
  169.         if(i == 0x10){
  170.                 LED_H4 = 1;LED_L5 = 0;}delay(PWM);dis_off();
  171.         i = d & 0x20;
  172.         if(i == 0x20){
  173.                 LED_H4 = 1;LED_L6 = 0;}delay(PWM);dis_off();
  174.         i = d & 0x40;
  175.         if(i == 0x40){
  176.                 LED_H4 = 1;LED_L7 = 0;}delay(PWM);dis_off();
  177.         i = d & 0x80;
  178.         if(i == 0x80){
  179.                 LED_H4 = 1;LED_L8 = 0;}delay(PWM);dis_off();
  180. }
  181. /*********************************************************************************************/
  182. void diplay_data (unsigned char l,unsigned char d){
  183.           switch (l){                      //顯示的列位置               
  184.                  case 1: displayHH1(d); break; //將顯示數(shù)據(jù)送入                        
  185.                  case 2: displayHH2(d); break; //將顯示數(shù)據(jù)送入                        
  186.                  case 3: displayHH3(d); break; //將顯示數(shù)據(jù)送入                        
  187.                  case 4: displayHH4(d); break; //將顯示數(shù)據(jù)送入                        
  188.           }
  189. }
  190. /*********************************************************************************************/
  191. void init (void){ //上電初始化
  192.         P3M0 = P3M0SET;
  193.         P3M1 = P3M1SET;
  194.         P1M0 = P1M0SET;
  195.         P1M1 = P1M1SET;
  196.         P2M0 = P2M0SET;
  197.         P2M1 = P2M1SET;
  198. ////
  199.         BEEP=1;
  200.         dis_off();
  201.         PWM = LI;
  202. ////
  203.         AUXR &= 0x7F;                //定時器時鐘12T模式
  204.         TMOD &= 0xF0;                //設(shè)置定時器模式
  205.         TMOD |= 0x01;                //設(shè)置定時器模式
  206.   EA = 1;         // 開總中斷   
  207.         TH0 = 0x3C;                //設(shè)置定時初值
  208.         TL0 = 0xB0;                //設(shè)置定時初值
  209.   ET0 = 1;        // 定時/計數(shù)器0允許中斷   
  210.         TF0 = 0;                //清除TF0標(biāo)志
  211.         TR0 = 1;                //定時器0開始計時

  212. ////
  213.         //TIME_HH = 19; //初始時間:19時13分40秒
  214.         //TIME_MM = 13;
  215.         //TIME_SS = 40;
  216. }
  217. /*********************************************************************************************/
  218. void main (void){ //主程序
  219.         init();                  //初始化
  220.         while (1){
  221.           switch (MENU){
  222.                 case 0:
  223.       TR0 = 1;                //定時器0開始計時
  224.                    if(r){
  225.                          diplay_data (1,disdata[TIME_HH/10]);
  226.                          diplay_data (2,disdata[TIME_HH%10]+0x80);         
  227.                          diplay_data (3,disdata[TIME_MM/10]);
  228.                          diplay_data (4,disdata[TIME_MM%10]);
  229.                    }else{                                                        
  230.                          diplay_data (1,disdata[TIME_HH/10]);
  231.                          diplay_data (2,disdata[TIME_HH%10]);
  232.                          diplay_data (3,disdata[TIME_MM/10]);
  233.                          diplay_data (4,disdata[TIME_MM%10]);
  234.                     }
  235.                     if(KEY1==0){MCU_YS(2000);if(KEY1==0){MENU++;}}
  236.                     if(KEY2==0){MCU_YS(85);if(KEY2==0){PWM++;if(PWM>=10){PWM=1;}}}        
  237.                  break;///  MENU為0時  (正常顯示狀態(tài))

  238.                 case 1:
  239.               BEEP=1;
  240.               TR0 = 0;                //關(guān)閉定時器0
  241.                          diplay_data (1,disdata[TIME_HH/10]);
  242.                          diplay_data (2,disdata[TIME_HH%10]+0x80);
  243.                     if(KEY1==0){MCU_YS(2000);if(KEY1==0){MENU++;}}
  244.                     if(KEY2==0){MCU_YS(85);if(KEY2==0){TIME_HH++;if(TIME_HH>=24){TIME_HH=0;}}}
  245.                 break;        ///          MENU為1時        (小時調(diào)整)

  246.                 case 2:
  247.               TR0 = 0;                //關(guān)閉定時器0
  248.               BEEP=1;
  249.                          diplay_data (2,0x80);
  250.                          diplay_data (3,disdata[TIME_MM/10]);
  251.                          diplay_data (4,disdata[TIME_MM%10]);
  252.                     if(KEY1==0){MCU_YS(2000);if(KEY1==0){MENU++;}}
  253.                           if(KEY2==0){MCU_YS(85); if(KEY2==0){TIME_MM++;if(TIME_MM>=60){TIME_MM=0;}}}
  254.                  break;        ///          MENU為2時         (分鐘調(diào)整)
  255.                            
  256.                 case 3:
  257.               BEEP=1;
  258.               TR0 = 0;                //關(guān)閉定時器0
  259.                          diplay_data (1,disdata[TIME_FH/10]);
  260.                          diplay_data (2,disdata[TIME_FH%10]+0x80);
  261.                     if(KEY1==0){MCU_YS(2000);if(KEY1==0){MENU++;}}
  262.                     if(KEY2==0){MCU_YS(85);if(KEY2==0){TIME_FH++;if(TIME_FH>=24){TIME_FH=0;}}}
  263.                                 break;        ///          MENU為3時        (鬧鐘小時調(diào)整)

  264.                 case 4:
  265.               TR0 = 0;                //關(guān)閉定時器0
  266.               BEEP=1;
  267.                           diplay_data (2,0x80);
  268.                     diplay_data (3,disdata[TIME_FM/10]);
  269.                           diplay_data (4,disdata[TIME_FM%10]);
  270.                      if(KEY1==0){MCU_YS(2000);if(KEY1==0){MENU=0;}}
  271.                      if(KEY2==0){MCU_YS(85);if(KEY2==0){TIME_FM++;if(TIME_FM>=60){TIME_FM=0;}}}
  272.             break;        ///          MENU為4時         (鬧鐘分鐘調(diào)整)
  273.           }

  274.                    if(TIME_FH+TIME_FM!=0){if(TIME_HH==TIME_FH){if(TIME_MM==TIME_FM){BEEP=0;if(KEY3==1){TIME_FM=0;TIME_FH=0;}}}}

  275.     }         //while
  276. }                 //main
  277. /**********************************************************************************************/        
  278. void tiem0(void) interrupt 1{      // T/C0中斷服務(wù)程序(產(chǎn)生50ms時基信號)   
  279.     cou++;                         // 軟計數(shù)器加1   
  280.     if(cou >= 20){                 // 計數(shù)值到100(1s)   
  281.       cou = 0;                     // 軟計數(shù)器清零   
  282.       TIME_SS++;                   // 秒計數(shù)器加1(進(jìn)位50ms*20=1s)   
  283.       r=~r;                                               // 秒點(diǎn)閃爍
  284.         if(TIME_SS >= 60){         // 秒計數(shù)值到60   
  285.           TIME_SS = 0;             // 秒計數(shù)器清零   
  286.           TIME_MM++;               // 分計數(shù)器加1(進(jìn)位60s=1m)  
  287.             if(TIME_MM >= 60){     // 分計數(shù)到60   
  288.               TIME_MM = 0;         // 分計數(shù)器清零   
  289.               TIME_HH++;           // 時計數(shù)器加1(進(jìn)位60m=1h)   
  290.                 if(TIME_HH >= 24){ // 時計數(shù)到23   
  291.                   TIME_HH = 0;     // 時計數(shù)器清零
  292.                                         }  
  293.             }   
  294.         }  
  295.         }
  296.         TH0 = 0x3C;                //設(shè)置定時初值      
  297.         TL0 = 0xB0;                //設(shè)置定時初值
  298. }
  299. /**********************************************************************************************/        
復(fù)制代碼



評分

參與人數(shù) 1黑幣 +5 收起 理由
Sky丶藍(lán)天 + 5 贊一個!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:480510 發(fā)表于 2020-5-4 09:49 | 只看該作者
想看正面
回復(fù)

使用道具 舉報

板凳
ID:241769 發(fā)表于 2020-5-4 12:43 來自手機(jī) | 只看該作者
怎么搞的那么麻煩。。。
回復(fù)

使用道具 舉報

地板
ID:729886 發(fā)表于 2020-5-4 14:03 | 只看該作者
正面的亮相看看
回復(fù)

使用道具 舉報

5#
ID:720981 發(fā)表于 2020-5-4 17:23 | 只看該作者
應(yīng)該發(fā)一下正面照片,看一下器件
回復(fù)

使用道具 舉報

6#
ID:639106 發(fā)表于 2020-5-5 09:03 來自手機(jī) | 只看該作者
忘拍了

IMG_20200503_110124.jpg (506.25 KB, 下載次數(shù): 34)

IMG_20200503_110124.jpg

1588640551807..jpg (533.35 KB, 下載次數(shù): 29)

1588640551807..jpg
回復(fù)

使用道具 舉報

7#
ID:767459 發(fā)表于 2020-9-11 13:12 | 只看該作者
謝謝樓主的分享,下載來學(xué)習(xí)。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天天色天天色 | 亚洲精品国产一区 | 黄色欧美在线 | 午夜爱爱毛片xxxx视频免费看 | 欧美一级免费片 | 国产福利资源在线 | 久久久亚洲精品视频 | 美女天天干| 日韩在线一区二区三区 | 国产精品96久久久久久 | 久久福利电影 | 中日字幕大片在线播放 | 亚洲日日夜夜 | 黄视频网址 | 国产成人精品久久二区二区 | 国产精品久久久久久吹潮 | 九九热精品在线 | 久久精品成人一区 | 永久看片 | 激情久久网 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 亚洲一区免费在线 | 男女久久久 | 日韩成人免费av | 在线观看国产视频 | av在线免费播放 | 岛国av一区二区三区 | 久久久.com| 欧美中文一区 | 国产一区欧美一区 | 免费看片国产 | 91在线免费视频 | 成人二区| 午夜理伦三级理论三级在线观看 | 亚洲福利一区 | 国产馆| 午夜精品 | 日韩欧美中文 | 精品一区二区三区在线观看国产 | 日韩欧美一区二区三区免费看 | 国产婷婷 |