这是四位数码管从右从左流动显示,像滚动字幕一样的。用不着矩阵按键哪。
其实程序很简单,没那么复杂。程序如下
#include
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//共阴段码码,0x00为灭
void delay()//延时子程序
{
uint y;
for(y=400;y>0;y--);
}
void main()
{
uchar n,x;
while(1)
{
n++;
if(n>50)//n为显示一屏显示次数,n大小可调节流动速度
{
n=0;
x++;//从下一个位置开始显示
if(x>8)x=0;
}
}
}
仿真结果
#include
#define uchar unsigned char
#define uint unsigned int
uchar data ds[4];
uchar code table[]={
//共阴极字型码
0x3f, //--0
0x06, //--1
0x5b, //--2
0x4f, //--3
0x66, //--4
0x6d, //--5
0x7d, //--6
0x07, //--7
0x7f, //--8
0x6f, //--9
0x00, //--NULL
0x40, //-
};
//位码
code uchar wei[]={0xfe,0xfd,0xfb,0xf7};
//code uchar wei[]={0x01,0x02,0x04,0x08};
void display() //显示子程序
{
static uchar a;
if(++a>3)a=0;
P2|=0x0f;
P0=table[ds[a]];
P2&=wei[a];
}
#define LENG 6//长度
uchar hc[LENG]={1,1,7,3,3,1,};//显示的嫩荣
uint jsbz=0;
uchar xsbz=0;
void xs(){
char i,i1;
for(i=3,i1=xsbz;i>=0;i--,i1--){
if((i1<0)||(i1>=LENG))ds[i]=10;
else ds[i]=hc[i1];
}
}
//主程序
void main()
{
TMOD=0X01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
xs();
;
}
}
void time0(void) interrupt 1 using 1 //定时中断子程序
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
display();
if(++jsbz>=1000){
jsbz=0;
if(++xsbz>=(LENG+3))xsbz=0;
}
}