#include<reg52.h>//定义51寄存器头文件
#define uint unsigned int//定义无符号双字节数据类型 值域:0--65535
#define uchar unsigned char//定义无符号单字节数据类型 值域:0--255
#define SEG P0//定义数码管段选IO口
#define WE P2//定义数码管位选IO口
uchar code scandata[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x3f};//语法错误加;
// 定义 7段共阴数码管段码--数组
uchar data[]={0,0,0,0,0};
uchar i=0;// 给i赋值0,初值。
void timer_init();//定义定时器函数
void delay_cycles(uint t)
{
uint m,n;
for (m=0; m<t; m++)
for (n=0; n<1000; n++);
}
void LED_display(void)
{
static uchar i,temp=0x10;
for (i=0; i<5; i++)
{
SEG=scandata[Data[i]];
WE=~temp;
temp=temp>>1;
delay_cycles(10);
}
}
void main()// 主函数,程序从这里开始执行。
{
timer_init();//程序初始化。
SEG=0x00;
while(1)
{
LED_display();
}//循环
}
void timer_init()//定时器主程序
{
EA=1;//开总中断开关
ET1=1;//开定时器1中断开关
TR1=1;//启动定时器1
TMOD=0X10;//设置定时器1工作在模式3下工作
TH1=(65536-10000)/256;//给定时器1高8位装载定时初始值(10000us=10ms)
TL1=(65536-10000)%256;//给定时器1低8位装载定时初始值(10000us=10ms)
}
void timer1() interrupt 4 // 定时器1重装初始值(10000us=10ms)
{
TH1=(65536-10000)/256;//给定时器1高8位装载定时初始值(10000us=10ms)
TL1=(65536-10000)%256;//给定时器1低8位装载定时初始值(10000us=10ms)
i++;//i变量自动加1,每执行一次。
//你可以在这里做个秒表, 然后分离data[i];
//WE|=0x1e;// 位选扫描“|”按位或指令运算
//SEG=scandata[i] ;//送段码到scandata储存单元寄存器进行显示
//WE&=~(0x01<<i);//送位选码扫描左移进行位选显示
//if(i==4) i=0;//判定位选左移次数是否达到4次,达到了,返回初始值,清零重新开始左移扫描。
} //程序结束 |