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

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

QQ登錄

只需一步,快速開始

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

帶鬧鐘的51單片機(jī)六位數(shù)字鐘設(shè)計(jì) 含源碼+仿真+調(diào)試資料

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:416620 發(fā)表于 2018-11-15 17:10 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
一、硬件電路
  • 總電路圖
六位數(shù)字鐘仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
圖6-1總電路圖


2、時(shí)間調(diào)試
  記時(shí)時(shí)間,如圖6-1為“01:13:38”,圖6-2所示20秒后的時(shí)間“01:13:38”,調(diào)試顯示正常。
                           
圖6-1 01:13:38                                      圖 6-2  01:13:38
調(diào)整時(shí)間,如圖6-2到圖6-4所示,為修改位閃爍狀態(tài),圖6-5和圖6-6為修改后的時(shí)間和退出修改3秒后的時(shí)間,調(diào)試顯示正常。
             
圖6-2修改秒個(gè)位閃爍“滅”     圖6-3修改秒個(gè)位閃爍“亮”       圖6-4修改分個(gè)位閃爍“滅”
           
圖6-5修改后時(shí)間                                圖6-6退出修改



3、鬧鐘調(diào)試
              如圖6-7所示,長(zhǎng)按key2,右下角紅色led亮,表示開啟鬧鐘,并設(shè)置鬧鐘時(shí)間為“01:14:00”。若無開啟鬧鐘如圖6-8所示,到設(shè)定時(shí)間時(shí),綠色LED無反應(yīng)。如圖6-9和圖6-10所示,開啟鬧鐘,到設(shè)定時(shí)間,綠色led亮10s后熄滅。如圖6-11所示,鬧鐘“響起”后,按下key2取消“鬧鈴”,綠色led熄滅。
              
圖6-7  設(shè)定鬧鐘01:14:00                       圖6-8無開啟鬧鐘,到時(shí)無反應(yīng)
                              
            圖6-9到鬧鐘時(shí)間                                                                      圖6-10  鬧鐘10s后停止   
        
                                圖6-11鬧鐘手動(dòng)停止


4、日期調(diào)試
              如圖6-12和圖6-13所示,在顯示模式下流動(dòng)顯示8位數(shù)“2022年3月1日”。如圖6-14至圖6-16所示,當(dāng)年分為閏年“2020”時(shí),2月末為29日,過24點(diǎn),變成“2020年03月01日”。如圖6-17至圖6-19所示,當(dāng)年分為平年“2021”時(shí),2月末為28日,過24點(diǎn),變成“2021年03月01日”。

                             
圖6-12 顯示日期2022年03月          圖6-13 顯示日期2022年03月01日
         圖6-14 閏年2月29日      圖6-15 設(shè)定當(dāng)天23:59:50           圖6-16 24點(diǎn)后日期
      
   圖6-17 平年2月28日        圖6-18 設(shè)定當(dāng)天23:59:49          圖6-19   24點(diǎn)后日


單片機(jī)源程序如下:
  1. #include<reg51.h>                                                        //包含51單片機(jī)頭文件
  2. #include<intrins.h>                                                        //包含標(biāo)準(zhǔn)函數(shù)庫
  3. sbit P_alarm              =P1^6;                                           //鬧鐘開啟與關(guān)閉指示燈,低電平有效,滅代表鬧鐘關(guān)閉
  4. sbit P_alarming=P1^7;                                          //鬧鈴指示燈,到時(shí)則亮,低電平有效
  5. unsigned char code dis_7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  6.                                                                                                   //七段共陰顯示數(shù)碼管“0~9”陰碼
  7. unsigned char data time[3]={23,59,58};
  8.                                                                                                   //時(shí)間,從左到右分別為“小時(shí)、分鐘、秒”
  9. unsigned char data clock[3]={23,0,0};
  10.                                                                                                   //鬧鐘,從左到右分別為“小時(shí)、分鐘、秒”
  11. unsigned char data date[4]={20,18,02,20};
  12.                                                                                                   //日期,              從左到右分別為“年前兩位、年后兩位、月、日”
  13. unsigned char data day[12]={31,28,31,30,31,30,31,30,31,30,31,30};
  14.                                                                                                   //12個(gè)月對(duì)應(yīng)的天數(shù)
  15. unsigned char data *p;                                          //指針變量,指向當(dāng)前顯示地址
  16. unsigned char data mcs,ms_10;              //計(jì)數(shù)器,mcs每250us加1次記錄40次,ms_10記錄mcs 100次
  17. unsigned char data position=1;              //編輯模式下,記錄當(dāng)前修改位“1~6”分別表示數(shù)碼管右到左標(biāo)號(hào)
  18. unsigned char data screen=1;                //顯示模式下,記錄當(dāng)前顯示屏幕功能,如下:“1”代表time,“2”代表clock,“3”代表date
  19. unsigned int  data fliker;                                          //編輯模式下,修改位閃爍功能定時(shí)計(jì)數(shù)器
  20. unsigned int data flow;                                          //顯示模式下,日期流動(dòng)計(jì)數(shù)器

  21. bit edit;                                                                                    //“0”代表顯示模式,“1”代表編輯模式
  22. bit day_flag=0;                                                        //24點(diǎn)標(biāo)志位
  23. bit disp_num;                            //顯示數(shù)據(jù)位數(shù)切換,“0”代表顯示6位,即時(shí)間,“1”代表顯示日期
  24. bit alarm,alarming;                                                        //鬧鐘狀態(tài)和鬧鈴狀態(tài)標(biāo)志位


  25. void display(unsigned char *p);               //顯示函數(shù)
  26. void clock_c();                                                                      //鬧鐘功能程序
  27. void  date_c();                                                                      //日期程序
  28. unsigned char keyscan();                                          //鍵盤掃描程序,另外,K1長(zhǎng)按進(jìn)行模式切換
  29. void key2_function_d();                              //顯示狀態(tài),按鍵2功能程序,鬧鐘取消\啟動(dòng),鬧鈴消停
  30. void key2_function_e();                              //編輯狀態(tài),按鍵2功能程序,加1
  31. void key1_function_d();                              //顯示狀態(tài),按鍵2功能程序,顯示切換
  32. void key1_function_e();                              //編輯狀態(tài),按鍵2功能程序,修改位切換
  33. void delay(unsigned int i);                            //延時(shí)函數(shù)



  34. void main()
  35. {
  36.               unsigned char keyboard,key;            
  37.               TMOD=0x02;                                                                                    //設(shè)置定時(shí)器0工作方式為2
  38.               TL0=0x06;                                                                                    //設(shè)置低八位初始值
  39.               TH0=0x06;                                                                                    //設(shè)置高八位初始值
  40.               EA=1;                                                                                                  //開啟總中斷
  41.               ET0=1;                                                                                                  //開啟定時(shí)器0中斷允許
  42.               TR0=1;                                                                                                  //啟動(dòng)定時(shí)起0
  43.               p=time;                                                                                                  //指向時(shí)間地址
  44.               while(1)
  45.               {
  46.                             keyboard=P1&0x03;                                          //讀取按鍵的值,并且屏蔽無關(guān)位
  47.                             display(p);                                                                      //調(diào)用顯示函數(shù)
  48.                             clock_c();                                                                                    //調(diào)用鬧鐘函數(shù)
  49.                             date_c();                                                                                    //調(diào)用日期函數(shù)
  50.                             if((screen==1)&&(edit==1))TR0=0;else TR0=1;
  51.                                                                                                                               //修改時(shí)間時(shí),關(guān)閉定時(shí)器
  52.                             if(keyboard!=0x03)                                                        //若有按鍵按下,則執(zhí)行以下程序
  53.                             {
  54.                                           display(p);                                                        //顯示函數(shù)消除按鍵抖動(dòng)
  55.                                           if(keyboard!=0x03)                                          //再次檢測(cè),若有,則執(zhí)行以下程序
  56.                                           {
  57.                                                         key=keyscan();                                          //調(diào)用按鍵掃描程序,讀取按鍵值
  58.                                                         if(!edit)                                                        //顯示模式
  59.                                                         {
  60. switch(key)    //如果KEY1按下,則KEY1為1,若KEY2按下則為2
  61.                                                                       {
  62.                                                                                     case 1:key1_function_d();break;//顯示屏幕切換
  63.                                                                                     case 2:key2_function_d();break;//鬧鐘功能設(shè)置,鬧鈴取消
  64.                                                                                     default:break;
  65.                                                                       }
  66.                                                         }
  67.                                                         else                                                                      //編輯模式                                                                                                               
  68.                                                         {
  69.                                                                       switch(key)               //如果KEY1按下,則KEY1為1,若KEY2按下則為2
  70.                                                                       {
  71.                                                                                     case 1:key1_function_e();break;//修改位切換
  72.                                                                                     case 2:key2_function_e();break;//加1
  73.                                                                                     default:break;
  74.                                                                       }
  75.                                                         }              }              }              }              }
  76. void display(unsigned char *p)                            //顯示子程序,顯示參數(shù)為無符號(hào)字符型指針變量
  77. {
  78.               unsigned char disp[8]={0,0,0,0,0,0,0,0};
  79.                                                                                                                 //顯示數(shù)據(jù)緩存變量
  80.               unsigned char disp_com[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  81.                                                                                                                 //數(shù)碼管位控端分別代表從左到右“1~6”號(hào)數(shù)碼管
  82.               unsigned char a,b,d,dot;
  83.               unsigned char c=0;
  84.               if(!disp_num)a=6;else a=8;                            //顯示時(shí)間則a=6,否則a=8
  85. for(b=0;b<a;b++)                                                        //將顯示數(shù)據(jù)按位緩存與disp數(shù)據(jù)中
  86.               {
  87.                                           if(c==0)disp[b]=p[b/2]/10;
  88.                                           else disp[b]=p[b/2]%10;
  89.                                           c++;if(c==2)c=0;
  90.               }
  91.               if(!edit)                                                                                    //顯示模式
  92.               {
  93.                             if(!disp_num)                                                        //顯示時(shí)間
  94.                             {
  95.                                           for(b=0;b<6;b++)
  96.                                           {
  97.                                                         if(b==1||b==3)dot=128;else dot=0;
  98.                                                                                                                 //1為小時(shí)個(gè)位,3為分鐘個(gè)位,其后面加小數(shù)點(diǎn)
  99.                                                         P0=0xff;                                          //消影
  100.                                                         P2=~dis_7[disp[b]]+dot;//段碼刷新
  101.                                                         P0=disp_com[b];              //位選端有效,顯示輸出
  102.                                                         delay(5);                                          //延時(shí)
  103.                                           }
  104.                             }
  105.                             else                                                                                    //顯示日期                                         
  106.                             {
  107.                                           b=flow/50;                                          //flow最大為400,每顯示50次流動(dòng)一位
  108.                                           for(c=0;c<6;c++)
  109.                                           {
  110. d=c+b;if(d>7)d-=8;              //每次顯示6位,但流動(dòng)顯示起始位,第9位時(shí)返回第1位顯示
  111.                                                         if(d==3||d==5||d==7)dot=128;else dot=0;
  112.                                                                                                                 //年份、月份、日期個(gè)位加小數(shù)點(diǎn)
  113.                                                         P0=0xff;                                          //消影
  114.                                                         P2=~dis_7[disp[d]]+dot;//斷碼刷新
  115.                                                         P0=disp_com[c];              //輸出位選端
  116.                                                         delay(5);                                          //延時(shí)
  117.                                           }
  118.                                           flow++;                                                        //每顯示1次屏幕加1;
  119.                                           if(flow==400)flow=0;              //最大399
  120.                             }
  121.               }
  122.               else                                                                                                  //編輯模式            
  123.               {            
  124.                             fliker++;if(fliker>100)fliker=0;//修改位顯示閃爍功能
  125.                             if(!disp_num)                                                 //顯示時(shí)間
  126.                             {
  127.                                           for(b=0;b<6;b++)                  
  128.                                           {
  129.                                                         if(b==1||b==3)dot=128;else dot=0;
  130.                                                         P0=0xff;
  131.                                                         P2=~dis_7[disp[b]]+dot;
  132. if(b==(6-position))              //修改位閃爍,position=1代表修改第6位數(shù)碼管,最右邊數(shù)碼管
  133.                                                         {
  134.                                                                       if(fliker<50)P0=disp_com[b];  //亮
  135.                                                                       else P0=0xff;                                                        //滅
  136.                                                         }
  137.                                                         else P0=disp_com[b];
  138.                                                         delay(5);
  139.                                           }
  140.                             }
  141.                             else                                                                                    //顯示日期
  142.                             {            
  143.                                           if(position>6)b=0;else b=2;                            //顯示日期移動(dòng),起始顯示狀態(tài)“年,月”
  144.                                           for(c=0;c<6;c++)
  145.                                           {
  146.                                                         d=c+b;                                                                      //起始位置為disp[0或者2]
  147.                                                         if(d==3||d==5)dot=128;else dot=0;
  148.                                                         P0=0xff;
  149.                                                         P2=~dis_7[disp[d]]+dot;
  150.                                                         if(c==(6-position)||(c==(8-position)&&(position>6)))
  151. //修改位閃爍,年最大位開始修改(顯示“年、月”||顯示“年、月、日”)
  152.                                                         {
  153.                                                                       if(fliker<50)P0=disp_com[c];
  154.                                                                       else P0=0xff;
  155.                                                         }
  156.                                                         else P0=disp_com[c];
  157.                                                         delay(5);
  158.                                           }              }              }     }

  159. void clock_c()                                                                                    //鬧鐘子程序
  160. {
  161.               if(alarm)                                                                                    //開啟鬧鐘則允許以下程序
  162.               {
  163.                             int a,b,c;            
  164.                             a=time[0]-clock[0];
  165.                             b=time[1]-clock[1];
  166.                             c=time[2]-clock[2];                                          //比較鬧鐘時(shí)間和當(dāng)前時(shí)間
  167.                             if((a==0)&&(b==0)&&(c==0))              //時(shí)間到
  168.                                           alarming=1;                                          //啟動(dòng)鬧鈴
  169.                             if(alarming)                                                        //鬧鈴10秒自動(dòng)取消
  170.                             {
  171.                                           if((b*60+c)>=10)alarming=0;
  172.                             }
  173.               }
  174.               P_alarm=!alarm;                                                        //鬧鐘狀態(tài)輸出
  175.               P_alarming=!alarming;                                          //鬧鈴狀態(tài)輸出
  176. }

  177. void  date_c()                                                                                    //日期子程序
  178. {
  179.               unsigned char a,b,c,d;
  180.               d=date[0]*100+date[1];
  181.               a=23-time[0];
  182.               b=59-time[1];
  183.               c=59-time[2];                                                                      //是否到24點(diǎn)
  184.             
  185.               if((d%400==0)||((d%100!=0)&&(d%4==0)))              //閏年
  186.               {              day[1]=29;}
  187.               else
  188.               {              day[1]=28;if(date[3]>28)date[3]=28;}              //平年

  189.               if((a==23)&&(b==59)&&(c==59)&&(day_flag==0))              //日期記時(shí),24整點(diǎn)運(yùn)行1次
  190.               {
  191.                             date[3]++;                                                        //日加1
  192.                             if(date[3]>day[date[2]-1])              //月末
  193.                             {                                                                     
  194.                                           date[3]=1;                                          //日歸1
  195.                                           date[2]++;                                          //月份加1
  196.                                           if(date[2]>12)                                          //年末
  197.                                           {                                         
  198.                                                         date[2]=1;                            //月歸1
  199.                                                         date[1]++;                            //年后兩位加1
  200.                                                         if(date[1]>99)                            //99年進(jìn)位
  201.                                                         {
  202.                                                                       date[0]++;              //年前兩位加1
  203.                                                                       date[1]=0;              //年后兩位歸零
  204.                                                                       if(date[0]>99)              //最大9999年
  205.                                                                                     date[0]=0;
  206.                                                         }
  207.                                           }
  208.                             }
  209.                             day_flag=1;                                                        //執(zhí)行1次標(biāo)志位置1,防止重復(fù)執(zhí)行
  210.               }            
  211.               if(day_flag){if(c!=59)day_flag=0;}              //24整點(diǎn)過后,整點(diǎn)標(biāo)志位復(fù)位
  212. }

  213. unsigned char keyscan()                                                        //鍵盤掃描子程序,無符號(hào)字符型子程序,返回鍵號(hào)
  214. {
  215.               unsigned int a;
  216.               unsigned char temp;
  217.               temp=P1&0x03;                                                        //讀取按鍵輸入,屏蔽無關(guān)位
  218.               for(a=0;a<100&&((P1&(0x07))==0x06);a++)
  219.                                                                                                                 //按鍵延時(shí)功能
  220.               {
  221.                             display(p);                                                        //調(diào)用顯示程序
  222.                             if(a==99)                                                                      //延時(shí)閾值
  223.                             {
  224.                                           edit=!edit;
  225. if(screen==3)position=8;//進(jìn)入編輯模式初始狀態(tài)設(shè)置
  226. else position=1;a=3;temp=0;P0=0xff;delay(1000);
  227.                                                                       //進(jìn)入編輯模式,則返回值為3不調(diào)用任何按鍵程序
  228.                                           while((P1&(0x07))==0x06)display(p);
  229.                                                                                                                 //按鍵松開
  230.                             }
  231.               }
  232.               switch(temp)                                                                      //根據(jù)按鍵狀態(tài)返回鍵號(hào)
  233.               {
  234.                             case 0x06:a=1;break;
  235.                             case 0x05:a=2;break;
  236.                             default:break;
  237.               }
  238.               if(edit)while((P1&0x07)!=0x07)display(p);//按鍵松開
  239.               return(a);                                                                                    //返回鍵號(hào)
  240. }


  241. void key2_function_d()                                                                      //按鍵2,顯示狀態(tài),鬧鐘啟動(dòng)/停止,鬧鈴消停
  242. {
  243.               unsigned int a;            
  244.               if(!edit)                                                                                                  //顯示模式,執(zhí)行以下程序
  245.               {
  246.                             for(a=0;(a<100)&&((P1&(0x07))==0x05);a++)
  247.                                                                                                                               //按鍵延時(shí)功能
  248.                             {
  249.                                           display(p);                                                        //調(diào)用顯示程序
  250.                                           if(a==99)                                                                      //到達(dá)延時(shí)閾值,執(zhí)行以下程序
  251.                                           {            
  252.                                                         alarm=!alarm;                                          //開啟或取消鬧鐘
  253.                                                         P_alarm=!alarm;                            //立即輸出反饋鬧鐘狀態(tài)
  254.                                                         while((P1&(0x07))==0x05)display(p);//按鍵松開
  255.                                           }
  256.                             }
  257.                             if(alarm)                                                                                    //鬧鐘開啟
  258.                             {
  259.                                           if(alarming)alarming=0;                            //手動(dòng)取消,顯示模式下短按取消鬧鈴
  260.                             }else alarming=alarm;                                          //鬧鐘關(guān)閉狀態(tài)                                                                                                                }
  261. }

  262. void key2_function_e()                                                                      //編輯模式,按鍵2,加1功能
  263. {
  264.               if(edit)
  265.               {
  266.                             if(!disp_num)                                                                      //顯示時(shí)間,則執(zhí)行以下程序
  267.                             {
  268.                                           switch(position)                                          //根據(jù)位置進(jìn)行加1
  269.                                           {
  270.                                                         case 1:if(p[2]%10<9)p[2]++;else p[2]-=9 ;break;              //秒個(gè)位
  271.                                                         case 2:if(p[2]<50)p[2]+=10;else p[2]-=50;break;              //秒十位
  272.                                                         case 3:if(p[1]%10<9)p[1]++;else p[1]-=9 ;break;              //分鐘個(gè)位
  273.                                                         case 4:if(p[1]<50)p[1]+=10;else p[1]-=50;break;              //分鐘十位
  274.                                                         case 5:if((p[0]%10)<9&&(p[0]<23))p[0]++;else{if(p[0]<20)p[0]-=9;else p[0]-=3;};break;                                                                                                                                                                        //小時(shí)個(gè)位
  275.                                                         case 6:if((p[0]/10)<2&&(p[0]<14))p[0]+=10;else{if(p[0]<20)p[0]-=10;else p[0]-=20;};break;                                                                                                                                                                        //小時(shí)十位
  276.                                                         default: break;
  277.                                           }
  278.                             }
  279.                             else                                                                                                  //顯示日期,則執(zhí)行以下程序
  280.                             {            
  281.                                          
  282.                                           switch(position)                                          //根據(jù)位置進(jìn)行加
  283.                                           {
  284.                                                         case 8:if(p[0]<99)  p[0]+=10;else p[0]%=10;break;                            //年千位
  285.                                                         case 7:if(p[0]%10<9)p[0]++;              else p[0]-=9;break;                            //年百位
  286.                                                         case 6:if(p[1]<99)  p[1]+=10;else p[1]%=10;break;                            //年十位
  287.                                                         case 5:if(p[1]%10<9)p[1]++;  else p[1]-=9;break;                            //年個(gè)位
  288. case 4:p[3]=1;if(p[2]==1)p[2]=10;else p[2]=1;break;              //若進(jìn)行月份的調(diào)整,需要重新設(shè)置日期,調(diào)整月份十位代表10以上和10以下切換
  289.                                                         case 3:p[3]=1;if(p[2]>=10){if(p[2]<12) p[2]++;else p[2]=10; } else if(p[2]<9) p[2]++;else p[2]=1;break;              //調(diào)整月份個(gè)位
  290.                                                         case 2:               //日期的十位
  291.                                                                                                                 p[3]+=10;                                                                                    //日期的十位加1
  292.                                                                                                                 if(p[3]>day[p[2]-1])                                                        //如果超過月末
  293.                                                                                                                 {
  294.                                                                                                                               p[3]%=10;                                                        //保留日期個(gè)位
  295.                                                                                                                               if(p[3]==0)p[3]=10;                                          //十位歸零
  296.                                                                                                                 }break;
  297.                                                         case 1:              //日期的個(gè)位            
  298. if((p[3]/10)==(day[p[2]-1]/10))              //如果與月末十位相
  299.                                                                                     等則執(zhí)行以下程序
  300.                                                                                                                 {
  301.                                                                                                                               if(p[3]==day[p[2]-1]){ p[3]=p[3]-(day[p[2]-1]%10);}
  302.                                                                                     //達(dá)到月末,減去月末個(gè)位數(shù)
  303.                                                                                                                               else
  304.                                                                                                                               p[3]++;                                                                      //日期加1
  305.                                                                                                                 }
  306.                                                                                                                 else                                                                                                    //不與月末十位相等
  307.                                                                                                                 {                                                                                   
  308.                                                                                                                               if(p[3]%10<9)p[3]++;                            //最大值為9
  309.                                                                                                                               else
  310.                                                                                                                               {
  311.                                                                                                                                             p[3]-=9;
  312.                                                                                                                                             if(p[3]==0)p[3]=1;                            //日期為0時(shí)則為1
  313.                                                                                                                               }
  314.                                                                                                                 }break;
  315.                                                         default: break;
  316.                                           }
  317.                             }
  318.               }
  319. }


  320. void key1_function_d()                                          //按鍵1,顯示狀態(tài),顯示切換
  321. {
  322.               if(!edit)                                                                      //顯示狀態(tài)下
  323.               {
  324.                             screen++;                                                        //每調(diào)用1次,加1,范圍“1~3”
  325.                             switch(screen)
  326.                             {
  327.                                           case 1:p=time;disp_num=0;break;                            //顯示時(shí)間
  328.                                           case 2:p=clock;disp_num=0;break;                            //顯示鬧鐘
  329.                                           case 3:p=date;disp_num=1;break;                            //顯示日期
  330.                                           default:p=time;disp_num=0;screen=1;break;              //顯示時(shí)間
  331.                             }
  332.               }
  333. }

  334. void key1_function_e()                                          //按鍵1,編輯模式下,移位
  335. {
  336.               if(edit)                                                                      //編輯模式下執(zhí)行以下程序
  337.               {
  338.                             if(!disp_num)                                          //顯示時(shí)間狀態(tài)
  339.                             {
  340.                                           position++;
  341.                                           if(position>6)position=1;              //position范圍“1~6”
  342.                             }else                                                                      //顯示日期
  343.                             {
  344.                                           position--;                            //從年千位開始修改
  345.                                           if(position==0||position>8)
  346.                                                         position=8;              //范圍“1~8”
  347.                             }                                         
  348.               }else position=1;                                          //復(fù)位
  349. }
  350. void delay(unsigned int i)                            //延時(shí)程序
  351. {
  352.               unsigned int k;
  353.               for(;i>0;i--)
  354.                             for(k=0;k<54;k++);
  355. }
  356. void time_int0() interrupt 1                            //定時(shí)中斷,中斷方式2
  357. {
  358.               EA=0;                                                                      //關(guān)閉總中斷,防止高級(jí)中斷影響定時(shí)
  359.               if(mcs!=0x28)                                                        //10ms定時(shí)
  360.                             mcs++;
  361.               else
  362.               {
  363.                             mcs=0;
  364.                             if(ms_10!=100)ms_10++              ;              //1s定時(shí)
  365.                             else
  366.                             {
  367.                                           ms_10=0;            
  368.                                           if(time[2]!=59)time[2]++;              //1s到則秒位加1
  369.                                           else
  370.                                           {
  371.                                                         time[2]=0;                                          //60秒歸0
  372.                                                         if(time[1]!=59)time[1]++;//分鐘加1
  373.                                                         else
  374.                                                         {
  375.                                                                       time[1]=0;                             //60分鐘歸0
  376.                                                                       if(time[0]!=23)time[0]++; //小時(shí)加1
  377.                                                                       else time[0]=0;              //24小時(shí)歸0
  378.                                                         }
  379.                                           }
  380.                             }
  381.               }
  382.               EA=1;                                                                                                  //開放總中斷
  383. }
復(fù)制代碼


所有資料51hei提供下載:
時(shí)鐘.zip (4.86 MB, 下載次數(shù): 209)



評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:426296 發(fā)表于 2018-11-18 16:39 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

板凳
ID:429043 發(fā)表于 2018-11-19 10:52 | 只看該作者
厲害,剛好需要這個(gè)
回復(fù)

使用道具 舉報(bào)

地板
ID:447688 發(fā)表于 2018-12-17 09:27 來自手機(jī) | 只看該作者
改成8個(gè)數(shù)碼管顯示器怎么改 求教
回復(fù)

使用道具 舉報(bào)

5#
ID:457618 發(fā)表于 2018-12-28 21:12 | 只看該作者
壓縮包的仿真和上面顯示的不同,壓縮包的仿真文件里P3口都連接了,實(shí)際上就連接了兩個(gè)LED燈,而且按鍵的功能并不能完全實(shí)現(xiàn),長(zhǎng)按K2沒反應(yīng)啊
回復(fù)

使用道具 舉報(bào)

6#
ID:489509 發(fā)表于 2019-3-26 19:33 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

7#
ID:278679 發(fā)表于 2019-11-7 14:17 | 只看該作者
謝謝分享!!!
回復(fù)

使用道具 舉報(bào)

8#
ID:630916 發(fā)表于 2019-11-29 12:33 | 只看該作者
不錯(cuò)  學(xué)習(xí)下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本不卡在线视频 | 日本久久久久久 | 久艹网站 | 国产精品99久久久久久久久久久久 | 超碰婷婷| 少妇性l交大片免费一 | 粉嫩一区二区三区四区公司1 | 中文字幕中文字幕 | 精品福利一区 | 中文字幕在线一区 | 亚洲国产精品一区二区久久 | 亚洲电影免费 | 久久极品| 一区二区三区视频在线免费观看 | 午夜影院在线观看免费 | 国产精品视频一区二区三区不卡 | 国产香蕉视频 | 亚洲一区二区在线免费观看 | 一区在线视频 | 日韩国产欧美一区 | 国产成人a亚洲精品 | 久久精品亚洲 | 中文字幕亚洲精品 | 久久精品视频网站 | 日韩成人在线网站 | 精品久草 | 亚洲欧洲精品成人久久奇米网 | 国精日本亚洲欧州国产中文久久 | 国产片网站 | 精品国产乱码久久久久久88av | 亚洲视频中文字幕 | 自拍偷拍亚洲一区 | 欧美日韩精品中文字幕 | 亚洲成人精选 | 中文字幕亚洲精品 | 国产成人在线视频 | 自拍第1页| 欧美一区二| 黑人巨大精品欧美一区二区免费 | 亚洲一页 | 久久久久免费观看 |