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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5115|回復: 31
打印 上一主題 下一主題
收起左側

4四位數碼管帶時鐘冒號,冒號閃爍問題

  [復制鏈接]
跳轉到指定樓層
樓主


我思考了半天,打出了冒號閃爍代碼,測試發現每分鐘只閃57下。
一開始直接用延時500毫秒循環閃,發現搶了數碼管的動態掃描時間,造成數碼管閃爍。
這里是插入在動態掃描里的,顯示效果都還算理想,只是少了幾次閃爍。
自學的,不怎么會跳延時和keil看單步時間……
想問問黑友盡善的閃爍辦法。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:161164 發表于 2022-8-10 17:00 | 只看該作者
冒號是哪根腳/段位?
假設是W3的dp段

  1. P1=0xFF;w3=1;P1=smgduan[shi%16];
  2. if(ss>=500)
  3. {
  4.         ss==0;
  5.         if(flash)
  6.         {
  7.                 P1 &= 0x7F;
  8.         }
  9.         flash = !flash;
  10. }else{
  11.         ss+=ms*4;
  12. }
  13. delay(ms);w3=0;//....
復制代碼



回復

使用道具 舉報

板凳
ID:1023753 發表于 2022-8-10 17:06 | 只看該作者
定時器不是好一點,不占用時間
回復

使用道具 舉報

地板
ID:139866 發表于 2022-8-10 17:35 | 只看該作者
要想準確就用定時器
回復

使用道具 舉報

5#
ID:57657 發表于 2022-8-10 18:00 | 只看該作者
你要用定時器中斷進行動態掃描和計時。
回復

使用道具 舉報

6#
ID:624769 發表于 2022-8-10 18:06 | 只看該作者
這要具體情況具體分析,不能任死理的。
一般如果時鐘點 是獨立引腳的話,我比較習慣用 DS1307 的 SQW 引腳輸出 1秒 的脈沖 來驅動。
而如果時鐘點 是和其他段是公用引腳,比如,在位2的 小數點。 那么會 利用定時器  每 500ms 翻轉一次 Flag_TimePiont 標志, 在數碼管 動態掃描 顯示  位2 數字的時候:
if(Flag_TimePiont)   Disp[2] |= 0x80;
else Disp[2] &= 0x7f;
這樣的方法。
回復

使用道具 舉報

7#
ID:213173 發表于 2022-8-10 20:54 | 只看該作者
這個程序里有關于數碼管閃點的代碼,可以借鑒用于冒號閃爍。
4位數碼管時鐘溫度表仿真.rar (175.43 KB, 下載次數: 28)

回復

使用道具 舉報

8#
ID:367840 發表于 2022-8-11 09:08 | 只看該作者
可以用定時器延伸出來做一個軟定時器,然后置標志位進行準確定時
回復

使用道具 舉報

9#
ID:16255 發表于 2022-8-11 10:35 | 只看該作者
這種閃爍我會用定時器中斷,不占用系統延時。他在閃爍的話給我的信息就是系統在運行。至于一分鐘閃多少下,是57下還是63下,其實并不是那么重要的了。
回復

使用道具 舉報

10#
ID:584814 發表于 2022-8-11 12:05 | 只看該作者
用個定時器之類的,約500ms滅,然后時鐘變秒時亮就可以。
回復

使用道具 舉報

11#
ID:796012 發表于 2022-8-11 12:17 | 只看該作者
lkc8210 發表于 2022-8-10 17:00
冒號是哪根腳/段位?
假設是W3的dp段

感謝黒友回復。。mh
回復

使用道具 舉報

12#
ID:796012 發表于 2022-8-11 12:18 | 只看該作者
haiyang201 發表于 2022-8-10 17:06
定時器不是好一點,不占用時間

感謝黒友回復。。自學的技術不是很會
回復

使用道具 舉報

13#
ID:796012 發表于 2022-8-11 12:18 | 只看該作者
天ノ憶 發表于 2022-8-10 17:35
要想準確就用定時器

感謝黒友回復。
回復

使用道具 舉報

14#
ID:796012 發表于 2022-8-11 12:19 | 只看該作者
npn 發表于 2022-8-10 18:00
你要用定時器中斷進行動態掃描和計時。

感謝黒友回復。。自學的技術,還不是很熟悉
回復

使用道具 舉報

15#
ID:796012 發表于 2022-8-11 12:20 | 只看該作者
188610329 發表于 2022-8-10 18:06
這要具體情況具體分析,不能任死理的。
一般如果時鐘點 是獨立引腳的話,我比較習慣用 DS1307 的 SQW 引腳 ...

感謝黒友回復。。那個是SQW引腳
回復

使用道具 舉報

16#
ID:796012 發表于 2022-8-11 12:20 | 只看該作者
wulin 發表于 2022-8-10 20:54
這個程序里有關于數碼管閃點的代碼,可以借鑒用于冒號閃爍。

感謝黒友回復。
回復

使用道具 舉報

17#
ID:796012 發表于 2022-8-11 12:20 | 只看該作者
董云交 發表于 2022-8-11 09:08
可以用定時器延伸出來做一個軟定時器,然后置標志位進行準確定時

感謝黒友回復。
回復

使用道具 舉報

18#
ID:796012 發表于 2022-8-11 12:21 | 只看該作者
mengsiu 發表于 2022-8-11 10:35
這種閃爍我會用定時器中斷,不占用系統延時。他在閃爍的話給我的信息就是系統在運行。至于一分鐘閃多少下, ...

感謝黒友回復。。要精確閃爍哦
回復

使用道具 舉報

19#
ID:796012 發表于 2022-8-11 12:23 | 只看該作者
lkc8210 發表于 2022-8-10 17:00
冒號是哪根腳/段位?
假設是W3的dp段

冒號是哪根腳/段位?
假設是W3的dp段

P1=0xFF;w3=1;P1=smgduan[shi%16];
if(ss>=500)
{
        ss==0;
        if(flash)
        {
                P1 &= 0x7F;
        }
        flash = !flash;
}else{
        ss+=ms*4;
}
delay(ms);w3=0;//....



用的是單獨帶冒號的數碼管,不是小數點分出的;其實小數點分出可以節省硬件連接
回復

使用道具 舉報

20#
ID:401564 發表于 2022-8-11 13:36 | 只看該作者
Miao在定時器中斷中改變,1秒鐘取反一次
OUT=..........;                   //顯示,冒號不亮
if(Miao)OUT&=.....;//冒號亮燈
如果你不會寫一個一秒鐘的定時器,那.............

回復

使用道具 舉報

21#
ID:624769 發表于 2022-8-11 14:54 來自觸屏版 | 只看該作者
玉萌業余發展 發表于 2022-8-11 12:20
感謝黒友回復。。那個是SQW引腳

時鐘點是獨立引腳控制的話,建議用ds1307替代ds1302,因為ds1307有sqw引腳,可直接控制時鐘點,給07地址分別寫入0x00,0x80,0x10可控制時鐘點亮,滅,閃。
回復

使用道具 舉報

22#
ID:796012 發表于 2022-8-11 17:59 | 只看該作者
wulin 發表于 2022-8-10 20:54
這個程序里有關于數碼管閃點的代碼,可以借鑒用于冒號閃爍。


看,按你的程序修改了單按鍵調時。就是單片機延時得調精準些
回復

使用道具 舉報

23#
ID:796012 發表于 2022-8-11 18:00 | 只看該作者
188610329 發表于 2022-8-11 14:54
時鐘點是獨立引腳控制的話,建議用ds1307替代ds1302,因為ds1307有sqw引腳,可直接控制時鐘點,給07地址 ...

好,有錢再買回來研究
回復

使用道具 舉報

24#
ID:796012 發表于 2022-8-11 18:01 | 只看該作者
Y_G_G 發表于 2022-8-11 13:36
Miao在定時器中斷中改變,1秒鐘取反一次
OUT=..........;                   //顯示,冒號不亮
if(Miao)OUT&=.....;//冒 ...

修改了一個。本來就學著玩得
回復

使用道具 舉報

25#
ID:401564 發表于 2022-8-12 07:24 | 只看該作者
玉萌業余發展 發表于 2022-8-11 17:59
看,按你的程序修改了單按鍵調時。就是單片機延時得調精準些

你這個代碼,寫得讓人耳目一新啊,有黑客帝國風范
回復

使用道具 舉報

26#
ID:796012 發表于 2022-8-13 10:28 | 只看該作者
Y_G_G 發表于 2022-8-12 07:24
你這個代碼,寫得讓人耳目一新啊,有黑客帝國風范

其實我什么都不懂
回復

使用道具 舉報

27#
ID:401564 發表于 2022-8-13 14:50 | 只看該作者

話不是這么說的
你多少是會點的
雖說不是一定要像人家科班出身那樣,寫出嚴謹的規范的C語言代碼出來
但至少,一個語句占一行,這一點是要的
因為大家都是這樣的,如果你要貼代碼出來,多少是要考慮一下別人能不能看得明白你的代碼
像你這種代碼,很多時候,過一段時間,只怕是你自己都不知道自己代碼是什么意思了
回復

使用道具 舉報

28#
ID:213173 發表于 2022-8-14 07:21 | 只看該作者
玉萌業余發展 發表于 2022-8-11 17:59
看,按你的程序修改了單按鍵調時。就是單片機延時得調精準些

單鍵調時,適用帶冒號時鐘專用數碼管。


  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define key_S 3                                        //宏定義短按(約15ms)
  5. #define key_L key_S*40                        //宏定義長按(約600ms)
  6. #define key_I key_S*20                        //宏定義長按連+間隔(約300ms)

  7. sbit K1=P2^4;//連接按鍵
  8. sbit DP=P0^7;//連接冒號

  9. uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽LED段碼表
  10. uchar displayData[4];//顯示數據緩存
  11. char shi=12,fen=0,sec=0;//時,分,秒
  12. uchar Cnt5ms;//5ms時基
  13. uchar KeySec;//鍵值
  14. uint num=0;//計數
  15. bit flashing=0;//閃爍標志

  16. //定時器初始化程序
  17. void Timer0Init()//5毫秒@12.000MHz
  18. {
  19.         TMOD=0x01;//定時器T0方式1
  20.         TH0=(65536-5000)/256;
  21.         TL0=(65536-5000)%256;
  22.         TF0=0;//中斷請求清0
  23.         TR0=1;//啟動T0
  24. }

  25. void keyscan()
  26. {
  27.         static unsigned int time=0;//計數變量
  28.         if(!K1)//按鍵按下
  29.         {
  30.                 time++;
  31.                 if(time>=key_L)//長按
  32.                 {
  33.                         switch(KeySec)
  34.                         {
  35.                                 case 1: shi++;if(shi>23)shi=0; break;
  36.                                 case 2: fen++;if(fen>59)fen=0; break;
  37.                         }
  38.                         time=key_I;//連+間隔
  39.                         num=1000;//自復位變量賦值(5秒)
  40.                 }
  41.         }
  42.         else                                //松手
  43.         {
  44.                 if(time>key_S && time<key_I)//短按
  45.                 {
  46.                         KeySec++;
  47.                         if(KeySec>2)
  48.                         {
  49.                                 KeySec=0;
  50.                                 Cnt5ms=0;
  51.                                 sec=0;
  52.                         }
  53.                         num=1000;//自復位變量賦值(5秒)
  54.                 }
  55.                 time=0;

  56.         }
  57. }

  58. void display()//顯示
  59. {
  60.         static uchar i=0;
  61.         displayData[0] = tab[shi/10%10];
  62.         displayData[1] = tab[shi%10];
  63.         displayData[2] = tab[fen/10%10];
  64.         displayData[3] = tab[fen%10];

  65.         P2&=0xf0;//消隱
  66.         if(KeySec==0)
  67.                 P0=displayData[i];

  68.         if(KeySec==1)
  69.         {
  70.                 if(flashing && (i==0||i==1) && K1)
  71.                         P0=0xff;//時調整閃爍
  72.                 else P0=displayData[i];
  73.         }

  74.         if(KeySec==2)
  75.         {
  76.                 if(flashing && (i==2||i==3) && K1)
  77.                         P0=0xff;//分調整閃爍
  78.                 else P0=displayData[i];
  79.         }
  80.         P2|=0x01<<i;
  81.         i=++i%4;
  82. }


  83. void main()//主函數
  84. {
  85.         Timer0Init();//初始化定時器
  86.         while(1)
  87.         {
  88.                 if(TF0)//查詢定時器中斷請求位
  89.                 {
  90.                         TF0=0;
  91.                         TH0=(65536-5000)/256;//5ms
  92.                         TL0=(65536-5000)%256;

  93.                         Cnt5ms++;
  94.                         if(KeySec!=0)
  95.                         {
  96.                                 num--;
  97.                                 if(num==0)//按鍵停止操作5秒自動恢復正常顯示
  98.                                 {
  99.                                         KeySec=0;
  100.                                         Cnt5ms=0;
  101.                                         sec=0;
  102.                                 }
  103.                                 if(Cnt5ms%50==0)   //0.25s 快閃
  104.                                         flashing=~flashing;
  105.                         }
  106.                         else if(Cnt5ms%100==0)//0.5s  慢閃
  107.                                         flashing=~flashing;

  108.                         if(Cnt5ms==200)//1s
  109.                         {
  110.                                 Cnt5ms=0;
  111.                                 sec++;
  112.                                 if(sec>=60)
  113.                                 {
  114.                                         sec=0;
  115.                                         fen++;
  116.                                         if(fen>=60)
  117.                                         {
  118.                                                 fen=0;
  119.                                                 shi++;
  120.                                                 if(shi>23)
  121.                                                         shi=0;
  122.                                         }
  123.                                 }
  124.                         }
  125.                         keyscan();                        //按鍵掃描
  126.                         display();                        //數碼管顯示
  127.                         if(KeySec==0)
  128.                                 DP=flashing;        //閃冒號 表示走時
  129.                         else DP=0;
  130.                 }
  131.         }
  132. }
復制代碼
4位數碼管時鐘仿真.rar (125.11 KB, 下載次數: 15)


回復

使用道具 舉報

29#
ID:1042050 發表于 2022-8-14 10:14 | 只看該作者
調整延時時間
回復

使用道具 舉報

30#
ID:796012 發表于 2022-8-14 13:10 | 只看該作者
Y_G_G 發表于 2022-8-13 14:50
話不是這么說的
你多少是會點的
雖說不是一定要像人家科班出身那樣,寫出嚴謹的規范的C語言代碼出來

復制修改的,改好的就湊一起了
回復

使用道具 舉報

31#
ID:796012 發表于 2022-8-14 13:11 | 只看該作者
wulin 發表于 2022-8-14 07:21
單鍵調時,適用帶冒號時鐘專用數碼管。

下載了,慢慢玩
回復

使用道具 舉報

32#
ID:796012 發表于 2022-8-14 13:13 | 只看該作者

if(sec &1)ss=1;else ss=0;/*1s一翻*/
這個一秒一翻轉還實在,直接關系1302
編譯不了0.5要不然就按秒亮滅了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美涩涩网 | 色网站视频 | 亚洲精品一区二区三区 | 超碰在线免费公开 | 一区二区三区免费观看 | 国产视频1区| 成人精品视频在线 | 午夜视频免费在线观看 | 福利久久| 天天射色综合 | 日韩一区二区三区在线看 | 欧美国产精品 | 国产成都精品91一区二区三 | 国产成人亚洲精品自产在线 | 日韩1区 | 久久不射网 | 少妇一级淫片免费放播放 | 国产在线97| 丝袜天堂 | 美女亚洲一区 | 婷婷99| 亚洲国产欧美一区 | 国产精品一区二 | 一区二区三区国产 | 久久久久久久久久久蜜桃 | 免费在线观看黄色av | 久久99国产精品 | 国产精品免费大片 | 五月天综合影院 | 精品久久久久一区二区国产 | 精品无码久久久久久国产 | 男女羞羞视频大全 | 一级毛片成人免费看a | 男女羞羞视频在线看 | 国产成人亚洲精品 | 91在线看| 91久久久久久 | 国产精品一码二码三码在线 | 蜜臀久久99精品久久久久久宅男 | 日韩理论电影在线观看 | 久草福利|