数码管动态显示
数码管动态显示
1、Keil程序
(1)共阳极数码管
#include <reg51.h>
#include <intrins.h> //包含循环移位函数的头文件
#define uchar unsigned char
#define uint unsigned int
//共阳极数码管段码表
uchar code dis_code[]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0xc0};
//延时函数,控制每位显示时间
void delay(uint t)
{
uchar i;
while(t--)
for(i=0;i<100;i++);
//减小i和delay函数参数,利用人眼余辉,可使各端口数字看起来一起显示“稳定显示”
}
void main()
{
//j的初值为1000 0000
uchar i,j=0x80;
while(1)
{
for(i=0;i<8;i++)
{
//循环移位函数_crol_(j,1)将j循环左移1位
//先把j左移一位,变为0000 0001,即对应P2.0端口
j=_crol_(j,1);
//P0口输出段码,即要显示的数字
P0=dis_code[i];
//P2口输出位控码,即哪一个端口来亮
P2=j;
delay(200);
}
}
}
(2)共阴极数码管
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dis_code[]={0x06,0x5b,0x4f,0x66};
//共阴极段码,分别对应1,2,3,4,参考数码管外形及引脚图
//dp,g,f,e d,c,b,a
//例0,0,0,0 0,1,1,0 代表1
//延时函数
void delay(uint t)
{
uchar i;
while(t--)
for(i=0;i<200;i++);
}
void main()
{
while(1)
{
//i控制循环,j的初值为1000 0000,共阴极是高电平亮,所以对应P2,7端口
uchar i,j=0x80;
for(i=0;i<4;i++)
{
/*j与0000 1000相或,P2.3端口始终为1,因为开发板P2.3端口对于蜂鸣器,且低电平有效,所以不 能让这一位为0,否则触发蜂鸣器,一直响*/
j=j|0x08;
//P2口输出段码,即决定哪一位亮
P2=j;
//P0口输出位控码,即决定显示什么数字
P0=dis_code[i];
delay(200);
/*所用开发板数码管只有四位,且是高四位,所以从P2.7端口循环右移
i循环四次,j从1000 0000
->0100 0000
->0010 0000
->0001 0000,然后循环结束,j重新赋初值*/
j=_cror_(j,1);
}
}
}
附:外形及引脚图