利用数码管动态显示字符。间隔之间需要有短暂延时。数码管为共阴极,所以位选送0即可选中。段选即可送1选中需要显示的段a/b/c/d/e/f/g/dp。
程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint i;
sbit duan=P2^6;
sbit wei=P2^7;
void delay(uchar xms)
{
uchar i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
while(1)
{
wei=1;
P0=0x3e;//第一个0011 1110
wei=0;
duan=1;
P0=0x65;// 0110 0101
duan=0;
delay(5);
wei=1;
P0=0x3d;//第二个0011 1101
wei=0;
duan=1;
P0=0x3e;//0011 1110
duan=0;
delay(5);
wei=1;
P0=0x3b;//第三个0011 1011
wei=0;
duan=1;
P0=0x3f;//0011 1111
duan=0;
delay(5);
wei=1;
P0=0x37;//第四个0011 0111
wei=0;
duan=1;
P0=0x71;//0111 0001
duan=0;
delay(5);
wei=1;
P0=0x2f;//第五个0010 1111
wei=0;
duan=1;
P0=0x79;//0111 1001
duan=0;
delay(5);
wei=1;
P0=0x1f;//第六个0001 1111
wei=0;
duan=1;
P0=0x54;//0101 0100 N
duan=0;
delay(5);
wei=1;
P0=0x3f;//第七个0011 1111
wei=0;
duan=1;
P0=0x65;// 0110 0101 G
duan=0;
delay(5);
}
}
数码管动态显示861017
/********************************************/
/**********六个数码管动态显示123456***********/
/***************************2010年2月4日20时*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//uint keynum;
uchar num;
sbit duan=P2^6;
sbit wei=P2^7;
//sbit key=P3^4;
//uchar code wei[]={0x3e,0x3d,0x3b,0x37,0x2f,0x1f}; //数码管对应的位选,选中第一个数码管为0011 1110 0x3e
//uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39 ,0x5e,0x79,0x71};
uchar code table[]={0x3e,0x3d,0x3b,0x37,0x2f,0x1f,0x7f,0x7d,0x06,0x3f,0x06,0x07};//前六个数为位选后六个为数字861017
/******延时XMS************/
void delay(uchar xms)
{
uchar i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
/******初始化************/
void init()
{
// keynum=0;
wei=1;
duan=1;
P0=0;
}
void display()
{
for(num=0;num<6;num++)
{
P0=0xff;//消隐
wei=1;
P0=table[num];
wei=0;
duan=1;
P0=table[num+6];
duan=0;
delay(1);//时间足够短让人分辨不出来闪烁的效果
}
}
void main()
{
init();
while(1)
{
display();
}
}