您的位置:首页 > 其它

7段数码管显示动态字符

2012-09-02 15:23 246 查看


74HC573直通方式做驱动,接共阳数码管



数码管结构原理,共阴和共阳



共阴,共阳段码16进制代码

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

*实验:7段数码管显示动态数据
*参考知识:http://en.wikipedia.org/wiki/Seven-segment_display
*单片机: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(...)

{...}

显示效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: