|
//4位数码管逐一加到F就出问题了
include<reg52.h>
//宏定义
typedef unsigned char uint8 ;
typedef unsigned int uint16;
#define HIGNT (65536-5000)/256 //定时器0计数寄存器高8位 50毫秒
#define LOW (65536-5000)%256 //定时器0计数寄存器低8位 50毫秒
//位定义
sbit d0=P2^0;
sbit d1=P2^1;
sbit d2=P2^2;
sbit d3=P2^3;
//定义编码表
uint8 code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//定义全局变量
uint8 num,aa;
//启动数码管声明
void start_Nixie_tube();
//定时器0初始化声明
void timer0_init();
//延时函数声明
void delay(uint16 z);
//主函数
void main()
{
timer0_init();
start_Nixie_tube();
}
//定时器0初始化函数
void timer0_init()
{
TMOD=0x01; //定时器0方式1
TH0 =HIGNT;
TL0 =LOW;
EA =1; //开总中断
ET0 =1; //开定时器0中断
TR0 =1; //启动定时器0
P0=0xc0;
}
//启动数码管函数
void start_Nixie_tube()
{
while(1)
{
if(aa==20)
{
aa=0;
for(num=0;num<16;num++)
{
d0=0;
P0=table[num++];
delay(1000);
d0=1;
d1=0;
P0=table[num++];
delay(1000);
d1=1;
d2=0;
P0=table[num++];
delay(1000);
d2=1;
d3=0;
P0=table[num];
delay(1000);
d3=1;
if(num>15)
num=1;
}
}
}
}
//延时函数
void delay(uint16 z)
{
uint16 x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//定时器0中断函数
void timer0() interrupt 1
{
TH0=HIGNT;
TL0=LOW;
aa++;
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|