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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2339|回復: 7
收起左側

單片機時鐘程序,分鐘總是到60,求幫助

[復制鏈接]
匿名
匿名  發(fā)表于 2020-6-27 12:18 |閱讀模式
50黑幣
S(`O$BA597D6BEBEA5NOH5S.png _3_$_NOIITT%OR%6L5QKCVR.png
但是到01之后又是正常顯示01 了,秒和小時是正常的
還有整點報時那里也不太清楚怎么修改,新人求解答
代碼如下
  1. #include <reg51.h>

  2. sbit key1 = P1^0;
  3. sbit beep = P1^0;
  4. bit flag1s = 0;
  5. bit KeySta = 1;
  6. unsigned char hour = 12;
  7. unsigned char minute =59;
  8. unsigned char second =50;
  9. unsigned char mode = 0;
  10. void FreshTime();
  11. void TimeInit();
  12. void IntInit();
  13. void InitLedBuff();
  14. void keyscan();
  15. void zhengdian();  
  16. unsigned char code LedChar[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  17. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x00};//共陰數(shù)碼管顯示字符轉換表
  18. unsigned char LedBuff[6] = {0xff,0xff,0xff,0xff,0xff,0xff};//數(shù)碼管顯示緩沖區(qū)

  19. void main()
  20. {
  21.   TimeInit();
  22.   IntInit();
  23.   InitLedBuff();
  24.   while(1)//顯示內容處理
  25.   {
  26.     if(flag1s&&!mode) //時間顯示模式
  27.     {
  28.       flag1s = 0;
  29.       FreshTime();
  30.     }
  31.     else if(mode == 1)  //校準分鐘
  32.     {
  33.       LedBuff[0] = 17;
  34.       LedBuff[1] = 17;
  35.       LedBuff[4] = 17;
  36.       LedBuff[5] = 17;//不顯示
  37.       LedBuff[2] = minute/10;
  38.       LedBuff[3] = minute%10;
  39.     }
  40.     else if(mode == 2)  //校準小時
  41.     {
  42.       LedBuff[2] = 17;
  43.       LedBuff[3] = 17;
  44.       LedBuff[4] = 17;
  45.       LedBuff[5] = 17;//不顯示
  46.       LedBuff[0] = hour/10;
  47.       LedBuff[1] = hour%10;
  48.     }
  49.     else if(mode == 3)  //校準完成重新顯示
  50.     {
  51.       InitLedBuff();
  52.       mode = 0;
  53.     }
  54.     keyscan();
  55.   }
  56. }

  57. void InitLedBuff()//初始化時間到顯示緩沖區(qū)
  58. {
  59.   LedBuff[0] = hour/10;
  60.   LedBuff[1] = hour%10;
  61.   LedBuff[2] = minute/10;
  62.   LedBuff[3] = minute%10;
  63.   LedBuff[4] = second/10;
  64.   LedBuff[5] = second%10;
  65. }
  66. void FreshTime()//刷新時間到顯示緩沖區(qū)
  67. {
  68.   second++;
  69.   if(second == 60)//進位
  70.   {
  71.     second = 0;
  72.     minute++;
  73.     LedBuff[2] = minute/10;
  74.     LedBuff[3] = minute%10;
  75.     if(minute ==60)//進位

  76.       minute = 00;
  77.       hour++;
  78.       if(hour == 24)
  79.         hour = 0;
  80.       LedBuff[0] = hour/10;
  81.       LedBuff[1] = hour%10;

  82.   }
  83.   LedBuff[4] = second/10;
  84.   LedBuff[5] = second%10;
  85. }

  86. void TimeInit()//定時器初始化
  87. {
  88.   TMOD = 0X11;    //設置定時器為模式1
  89.   TL0 = 0xB0;
  90.   TH0 = 0x3C;     //定時初值 50ms
  91.   TL1 = 0x18;                //
  92.         TH1 = 0xFC;                //定時初值 1ms
  93.   TR0 = 1;    //定時器0開始計時
  94.   TR1 = 1;    //定時器1開始計時
  95.   ET1 = 1;    //使能定時器1
  96.   ET0 = 1;    //使能定時器0
  97.   PT0 = 1;    //提高計時準確性,提高定時器0中斷優(yōu)先級
  98.   EA = 1;     //打開總中斷
  99. }
  100. void IntInit()//外部中斷初始化
  101. {
  102.   IT0 = 1;     //下降沿觸發(fā)
  103.   EX0 = 1;    //使能外部中斷0
  104. }

  105. void keyscan() //按鍵掃描及處理
  106. {
  107.   static bit backup = 1;
  108.   if (KeySta != backup)  //當前值與前次值不相等說明此時按鍵有動作
  109.   {
  110.     if (backup == 0)   //如果前次值為0,則說明當前是彈起動作
  111.     {
  112.       if(mode == 1)
  113.       {
  114.         minute++;
  115.         if(minute==60)
  116.           minute = 0;
  117.       }
  118.       else if(mode == 2)  
  119.       {
  120.         hour++;
  121.         if(hour==24)
  122.           hour = 0;
  123.       }
  124.     }
  125.     backup = KeySta;   //更新備份為當前值,以備進行下次比較
  126.   }
  127. }
  128. void Int0() interrupt 0
  129. {
  130.   mode++;
  131.   if(mode == 4)
  132.   {
  133.     mode = 0;
  134.   }
  135. }
  136. void Ledfresh() //數(shù)碼管顯示刷新
  137. {
  138.   static unsigned char i = 0;
  139.   switch(i)
  140.   {
  141.     case 0 : P2 = ~(0x01<<i);P0 = LedChar[LedBuff[i]];i++;break;
  142.     case 1 : P2 = ~(0x01<<i);P0 = LedChar[LedBuff[i]];i++;break;
  143.     case 2 : P2 = ~(0x01<<i);P0 = LedChar[LedBuff[i]];i++;break;
  144.     case 3 : P2 = ~(0x01<<i);P0 = LedChar[LedBuff[i]];i++;break;
  145.     case 4 : P2 = ~(0x01<<i);P0 = LedChar[LedBuff[i]];i++;break;
  146.     case 5 : P2 = ~(0x01<<i);P0 = LedChar[LedBuff[i]];i=0;break;
  147.   }
  148. }
  149. void Time0() interrupt 1 //12MHz 50ms
  150. {
  151.   static unsigned char n = 0;
  152.   TL0 = 0xB0;
  153.   TH0 = 0x3C;
  154.   n++;
  155.   if(n==20)
  156.   {
  157.     n=0;
  158.     flag1s = 1;//1s標志位
  159.   }
  160. }
  161. void zhengdian()                 //整點報時
  162. {
  163.         if((second==0)&&((minute==0)&&(hour>=0)))
  164.         {
  165.                 beep=1;
  166.                
  167.                 beep=0;
  168.                
  169.         }
  170. }

  171. void Time1() interrupt 3  //12MHz 1ms
  172. {
  173.   static unsigned char keybuff = 0xff;
  174.   TL1 = 0x18;        
  175.         TH1 = 0xFC;        
  176.   Ledfresh();
  177.   keybuff = (keybuff<<1)|key1;
  178.   if (keybuff == 0x00)
  179.   {
  180.       KeySta = 0;
  181.   }
  182.   else if (keybuff == 0xFF)
  183.   {  
  184.       KeySta = 1;
  185.   }
  186.   else
  187.   {}
  188. }
復制代碼


回復

使用道具 舉報

ID:565961 發(fā)表于 2020-6-27 13:39 | 顯示全部樓層
分鐘問題已解決,想插入一個整點報時的功能,請問怎么改呀
回復

使用道具 舉報

ID:213173 發(fā)表于 2020-6-28 08:55 | 顯示全部樓層
651991190 發(fā)表于 2020-6-27 13:39
分鐘問題已解決,想插入一個整點報時的功能,請問怎么改呀

void zhengdian() //整點報時響1秒
{
        if(second<1 && minute==0)
                beep=1;
        else        
                beep=0;
}
回復

使用道具 舉報

ID:565961 發(fā)表于 2020-6-28 13:53 | 顯示全部樓層
wulin 發(fā)表于 2020-6-28 08:55
void zhengdian() //整點報時響1秒
{
        if(second

直接加進去就行了嗎,是我電路原因還是什么原因,,就是不響呀,我試了很多次了
回復

使用道具 舉報

ID:213173 發(fā)表于 2020-6-28 15:07 | 顯示全部樓層
651991190 發(fā)表于 2020-6-28 13:53
直接加進去就行了嗎,是我電路原因還是什么原因,,就是不響呀,我試了很多次了

zhengdian();放在主循環(huán)中keyscan();下面。這是有源蜂鳴器的驅動,是高電平有效還是低電平有效取決于你的硬件電路結構。響多長時間調整 if(second<x && minute==0)
回復

使用道具 舉報

ID:565961 發(fā)表于 2020-6-28 22:28 | 顯示全部樓層
wulin 發(fā)表于 2020-6-28 15:07
zhengdian();放在主循環(huán)中keyscan();下面。這是有源蜂鳴器的驅動,是高電平有效還是低電平有效取決于你 ...

您說的這個我注意到的,試過還是不響,,哭了
回復

使用道具 舉報

ID:213173 發(fā)表于 2020-6-29 07:09 | 顯示全部樓層
651991190 發(fā)表于 2020-6-28 22:28
您說的這個我注意到的,試過還是不響,,哭了

仿真.zip (141.65 KB, 下載次數(shù): 4)
回復

使用道具 舉報

ID:565961 發(fā)表于 2020-6-29 12:09 | 顯示全部樓層
wulin 發(fā)表于 2020-6-28 15:07
zhengdian();放在主循環(huán)中keyscan();下面。這是有源蜂鳴器的驅動,是高電平有效還是低電平有效取決于你 ...

應該是我的電路問題,我調節(jié)了蜂鳴器的電壓值和電阻阻值就響了,但是還是謝謝您了
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久av | 午夜网| 天天操天天射天天 | 国产精品国产a级 | 99综合网 | 成人毛片一区二区三区 | 成人精品一区二区三区 | 国产一区二区三区免费观看在线 | 色又黄又爽网站www久久 | 黄色在线免费看 | 99在线观看视频 | 丝袜一区二区三区 | 久久精品影视 | 亚洲午夜三级 | 日韩视频 中文字幕 | 国产一在线观看 | 青春草在线| 日本午夜免费福利视频 | 黄网址在线观看 | 亚洲一区不卡在线 | 亚洲狠狠 | 日韩精品免费一区二区在线观看 | 久久999 | 黄色片免费看 | 日韩精品在线一区 | 91精品国产欧美一区二区成人 | 久久免费精品 | 古装人性做爰av网站 | 黄色一级免费 | 午夜影院在线观看视频 | 国产精品久久久久久网站 | 国产a视频| 国产精品日韩欧美一区二区三区 | 久久国产香蕉 | 亚洲国产精品自拍 | 日韩激情在线 | 欧美日韩最新 | 精品欧美一区二区三区久久久小说 | 欧美一区二区三区的 | 毛片区| 日韩高清国产一区在线 |