电路很简单,我就不画图了,四位数码管 通过2个74hc595连起来,1个595负责段选,1个595负责位选,利用单片机的定时器中断实现0-100数字的循环显示.程序已经通过本人测试通过
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit rck=P0^0;
sbit sck=P0^1;
sbit si=P0^2;
uchar num[]={0x80,0xed,0x42,0x48,0x2c,0x18,0x10,0xcc,0x00,0x08};
uint b=0,i=0,j=0,k;
void write_595(uchar x)//对595芯片进行设初始化
{
for(k=0;k<8;k++) //移位寄存器
{
x>>=1;
sck=0;
si=CY;
sck=1;
}
}
void date_danpianji()//对单片机计时器进行初始化
{
EA=1;//总中断开启
ET1=1;//定时器开启
TMOD=0X10;//选择定时器工作模式
TH1=(65536-33333)/256;//除整赋给高八位
TL1=(65536-33333)%256;//除余赋给第八位
TR1=1; //启动定时器
}
void main()//主函数
{
date_danpianji();//调用定时器中断
while(1)//循环
{
if(b==20)//检测中断函数是否满足b==20,如果满足则执行
{
b=0;
i++;
if(i==10)
{
i=0;
j++;
if(j==10)j=0;
}
}
write_595(num[j]);
write_595(num[i]);
rck=0;
rck=1;
}
}
void ext() interrupt 3 using 1 //定时器中断
{
TH1=(65536-33333)/256;
TL1=(65536-33333)%256;
b++;
}
