7段數碼管顯示動態字符


74HC573直通方式做驅動,接共陽數碼管

數碼管結構原理,共陰和共陽

共陰,共陽段碼16進制代碼

/*************************

*實驗:7段數碼管顯示動態數據
*單片機:STC89C52
*編譯環境:Keil2
*作者:fslJlang
*改進:可以增加顯示的數值和字符,增加動態顯示的方式,並輪流播放,優化延時時間使視覺效果最佳等。
*************************/
#include<reg52.h> //頭文件
 
#define dataPort P0 //P0接8位數據端口
#define ctrlPort P1 //P1接8位控制端口
typedef unsigned char uchar;
typedef unsigned int uint;
 
#define NUM_A        400
#define NUM_B        450
#define NUM_C          9
#define bit_NUM        8
 
uchar code charArray[] = {0xc0,0xf9,0xa4,0xb0, 
                           0x99,0x92,0x82,0xf8, 
                           0x80,0x90,0x88,0x83,
                  0xa7,0xa1,0x86,0x8e}; // 段碼值0,1,2...,E,F選擇
uchar code bitArray[]   = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //共陽common位選擇
 
void delay(uint t); //delay函數聲明
 
/*---------main入口-------*/

main()
{
  uchar char_i,dynamic_num;
  uint time_j;
  char_i = dynamic_num = 0;
  while(1)
  {
    dataPort = charArray[char_i]; //取位碼
    ctrlPort = bitArray[dynamic_num + char_i]; //取段碼,顯示字符值

    delay(NUM_A); //掃描間隙,利用人眼暫留原理,動態點亮各數碼管
    char_i++;
    time_j++;
    if(bit_NUM == char_i) //8個數碼管是否完成掃描?如完成,則重新選擇第一個數碼管
    {
      char_i = 0;
    }
    if(NUM_B == time_j) //保持當前字符(數值)顯示一段時間后,更新字符,則下一次各數碼管的顯示值比前一次+1,

                //給人感覺好像數值是從左往右在動態流動一樣

    {
      time_j = 0;
      dynamic_num++;
      if(NUM_C == dynamic_num)
      {
        dynamic_num = 0;
      }
    }
  }
}

delay(...)

{...}

顯示效果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM