数码管的移位显示可以使用少数的数码管显示更多的信息,也可以给人们带来动感的感觉。
程序比较简单,利用查表法显示0~F这16个数字,利用改变查表的起始值来实现移动。表格里有一些空白的代码是用来填充数字出现前和数字结束后的空格。
硬件电路相关文章:[自制多功能数码管显示实验板]
下面是演示视频:
C语言源程序如下:
/*************************************************
程序名称:8位数码管移位显示0-F
简要说明:使用共阳型数码管
P0口输出数码管段码,P2口输出数码管位码
编 写:JiangX.net
时 间:2008-8-21
*************************************************/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define duan P0 //定义段码输出
#define wei P2 //定义位码输出
uchar a=0,b=0; //全局变量。a:定时器循环次数;b:移位量
uchar code TAB[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,//空白
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//数字0-9
0x88,0x83,0xC6,0xa1,0x86,0x8e,//字母A-F
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff//空白
};
/*****************延时子程序*****************/
void delay(n)
{
while(n--){
uint j;
for (j=0;j<125;j++);
}
}
/*****************程序初始化*****************/
void init()
{
TMOD=0x1; //定时方式1
TH0=0xb8;
TL0=0x63; //设置计时时间为50ms
wei=~0; //设置位扫描初值
}
/*****************定时器中断0****************/
void timer0(void) interrupt 1
{
TH0=0xb8;
TL0=0x63;
a++; //移位变量累加
if (a==20){
a=0;
b++;
}
if (b==24){
b=0;
}
}
/******************显示子程序****************/
void display()
{
uchar i;
uchar k;
for (i=0;i<8;i++)
{
k=1<<i;
wei=~k; //位扫描
duan=TAB[i+b];//输出段码
delay(1);
}
}
/******************主函数******************/
void main ()
{
init();
TR0=1;
ET0=1;
EA=1;
while(1)
display();
}
原创作品如转载,请注明:转载自萬用電路板 [ http://www.jiangx.net/ ]