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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

數碼管同時閃爍的單片機程序問題,請教大家,謝謝

[復制鏈接]
跳轉到指定樓層
樓主
用定時器實現兩個數碼管同時點亮的程序:


if(smgtime==10)  
      {
          smg_show(10);
        WE_1=1;
        WE_2=0;
        smg_show(data/10);
      }
      if(smgtime==20)
      {   smg_show(10);
        WE_1=0;
        WE_2=1;
        smg_show(data%10);
        smgtime=0;

      }


現在想讓數碼管實現閃爍的功能,兩個數碼管按照一定的頻率閃爍,在同時點亮的基礎上加了一個關閉數碼管的功能,我是這樣編寫的,
if(smgtime==10)  
      {
          smg_show(10);
        WE_1=1;
        WE_2=0;
        smg_show(data/10);
      }
      if(smgtime==20)
      {   smg_show(10);
        WE_1=0;
        WE_2=1;
        smg_show(data%10);

      }
      if(smgtime==30)
      {
          smg_show(10);
          smgtime=0;
      }


出現的問題是,第二個數碼管的亮度比第一個數碼管亮度明顯,第一個數碼管出現明顯的閃爍,第二個數碼管閃爍不明顯。硬件電路是這樣設計的,
74HC573驅動段選,數碼管是共陰極的,單片機通過三極管來控制公共端。
現在問題不知道出現在哪里,請大家幫我分析一下,謝謝。

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

使用道具 舉報

沙發
ID:470332 發表于 2019-12-16 10:25 | 只看該作者
延時太多了
回復

使用道具 舉報

板凳
ID:213173 發表于 2019-12-16 15:28 | 只看該作者
多位數碼管顯示電路分靜態顯示和動態顯示,要實現單個閃爍或多個同時閃爍并不難。只要在正常顯示的基礎上按閃爍頻率的1/2時間給段碼驅動端送消隱碼即可。共陰數碼管送0x00,共陽數碼管送0xff。數碼管亮度不均勻或閃爍有差異是因為顯示電路或顯示代碼本身不正常造成的。給你一個示例,用簡單的4位時鐘改成閃爍顯示以便于理解。注釋掉的部分是原來正常顯示的部分。


  1. #include <AT89X52.H>

  2. #define uint unsigned int               
  3. #define uchar unsigned char   

  4. sbit key1 =P3^4;
  5. sbit key2 =P3^5;

  6. //順序共陰極數碼管段碼表,段碼a-h順序接PX0-PX7
  7. unsigned char code table[]={//共陰數碼管段碼"0~f-."
  8.                 0x3f,0x06,0x5b,0x4f,
  9.                 0x66,0x6d,0x7d,0x07,
  10.                 0x7f,0x6f,0x77,0x7c,
  11.                 0x39,0x5e,0x79,0x71,0x40,0x80};
  12. uchar hour=12,min=0,sec=0;
  13. uchar tcnt;
  14. bit flag;

  15. void delayms(uint k)//1T
  16. {
  17.     uint i,j;            
  18.     for(i=k;i>0;i--)   
  19.         for(j=125;j>0;j--);
  20. }

  21. void InitTimer0()//50毫秒@12.000MHz
  22. {

  23.         TMOD= 0x01;                //設置定時器模式
  24.         TL0 = 0xB0;                //設置定時初值
  25.         TH0 = 0x3C;                //設置定時初值
  26.         TF0 = 0;                        //清除TF0標志
  27.         TR0 = 1;                        //定時器0開始計時
  28.         EA  = 1;
  29.         ET0 = 1;
  30. }

  31. void keyscan()       
  32. {
  33.         static uchar count1,count2;
  34.         if(!key1)
  35.         {
  36.                 if(++count1>=100)
  37.                 {
  38.                         count1=0;
  39.                         hour++;
  40.                         if(hour>=24)
  41.                                 hour=0;
  42.                 }
  43.         }
  44.         else count1=0;

  45.         if(!key2)
  46.         {
  47.                 if(++count2>=100)
  48.                 {
  49.                         count2=0;
  50.                         min++;
  51.                         tcnt=0;
  52.                         sec=0;
  53.                         if(min>=60)
  54.                                 min=0;
  55.                 }
  56.         }
  57.         else count2=0;
  58. }


  59. void display()
  60. {
  61.         static uchar i=0;
  62.         P0=0x00;//消隱
  63.         P3&=0xf0;//清P3低4位
  64. /*        switch(i)
  65.         {
  66.                 case 0: P3|=0x0e;P0=table[hour/10];break;
  67.                 case 1: P3|=0x0d;if(flag==1)P0=table[hour%10]|0x80;//加點
  68.                                                  else P0=table[hour%10];break;//不加點                               
  69.                 case 2: P3|=0x0b;P0=table[min/10] ;break;
  70.                 case 3: P3|=0x07;P0=table[min%10] ;break;
  71.         }*/
  72.         switch(i)
  73.         {
  74.                 case 0: P3|=0x0e;if(flag==1)P0=table[hour/10];
  75.                                                           else P0=0x00;break;
  76.                 case 1: P3|=0x0d;if(flag==1)P0=table[hour%10]|0x80;//加點
  77.                                                      else P0=0x00;break;
  78.                 case 2: P3|=0x0b;if(flag==1)P0=table[min/10];
  79.                                                      else P0=0x00;break;
  80.                 case 3: P3|=0x07;if(flag==1)P0=table[min%10];
  81.                                                      else P0=0x00;break;
  82.         }
  83.         delayms(2);
  84.         i++;
  85.         i%=4;
  86. }

  87. void main(void)
  88. {
  89.         InitTimer0();
  90.         while (1)
  91.         {
  92.                 keyscan();
  93.                 display();
  94.         }
  95. }

  96. void Timer0Interrupt(void) interrupt 1
  97. {
  98.         tcnt++;
  99.         if(tcnt<10)
  100.                 flag=1;
  101.         else flag=0;
  102.         if(tcnt>=20)
  103.         {
  104.                 tcnt=0;
  105.                 sec++;
  106.                 if(sec>=60)
  107.                 {
  108.                         sec=0;
  109.                         min++;
  110.                         if(min>=60)
  111.                         {
  112.                                 min=0;
  113.                                 hour++;
  114.                                 if(hour>=24)
  115.                                         hour=0;
  116.                         }
  117.                 }
  118.         }
  119. }
復制代碼



回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线视频一区 | 成人午夜影院 | 国产精品久久久久久52avav | 日本午夜网站 | 亚洲69p| 国产精品99久久久久久久久 | 欧美黑人一区 | 亚洲欧美激情视频 | 亚洲bt 欧美bt 日本bt | 国产激情一区二区三区 | 在线观看亚洲专区 | 亚洲综合无码一区二区 | 亚洲视频一区二区三区 | 高清国产一区二区 | 国产欧美日韩精品一区 | 密室大逃脱第六季大神版在线观看 | 国产精品不卡一区二区三区 | 国产欧美一区二区三区在线看 | 久久久久久久久久影视 | 亚洲精品一区二区三区蜜桃久 | 国产日韩久久 | 日韩成人在线观看 | 国产精品久久久久久久久久免费看 | 日韩视频1| 婷婷中文在线 | 精品无码久久久久久国产 | 黑人巨大精品 | 久久国产精品99久久久久久丝袜 | 亚洲一区 中文字幕 | 亚洲三级av | 日韩高清国产一区在线 | 91视频免费视频 | 免费一区 | 91精品国产综合久久久久久丝袜 | 成人免费一区二区三区视频网站 | 精品一区二区三区在线观看 | 欧美无乱码久久久免费午夜一区 | 韩国av电影网 | 中文字幕在线播放第一页 | 久久久久亚洲精品 | 国产精品久久久久久久午夜片 |