#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
sbit seg_=P1^7; //位选
sbit bit_=P1^6; //段选
sbit sh=P1^2; //位移时钟八个时钟移入一个字节
sbit st=P1^1; //锁存时钟一个上升沿锁存一次数据
sbit da=P1^0; //数据输入脚
void Timer0Init(void)
{
TMOD=0x01; //设置定时器
TL0=0x00; //设置初值,
TH0=0xb8; //二十毫秒
EA=1; //开总中断
ET0=1; //开定时器中断
TR0=1; //启动定时器
}
void timer(void)
{
TMOD=0x01; //将定时器0设置为方式以1
TH0=(65536-9216)/256; //设初值
TL0=(65536-9216)%256; //设初值
TR0=1; //定时器0运行
}
//void DelayMs(uchar ms)
//{
// int i,j;
// for(i=0;i<ms;i++)
// for(j=0;j<50;j++);
//}
//
//void shuaxing(int shuru)
//{
// int i;
// sh=1;
// for(i=0;i<8;i++)
// {
// if(shuru&0x80)
// {
// da=1;
// }
// else
// {
// da=0;
// }
// DelayMs(2);
// sh=0;
// shuru=shuru<<1;
// DelayMs(2);
// sh=1;
// }
// st=0;
// DelayMs(2);
// st=1;
//}
//
void main(void)
{
Timer0Init();
while(1);
int i;
P2=0xff;
timer();
while(1)
{
if(1==TF0) //已经溢出,10ms到了
{
TF0=0;
TH0=(65536-9216)/256; //设初值
TL0=(65536-9216)%256; //设初值
i++;
}
if(100==i) //到了一秒
{
i=0;
P2=~P2;
}
}
int i;
uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar duan[]={0x5b,0x3f,0x06,0x6f,0x3f,0x6d,0x5b,0x3f};
uchar zong[]={0x00,0x7C,0x54,0x54,0xFF,0x55,0x55,0x7D};
while(1)
{
for(i=0;i<8;i++)
{
seg_=1;
P0=0x00;
seg_=0;
bit_=1;
P0=wei[i];
bit_=0;
P0=0x00;
seg_=1;
P0=duan[i];
seg_=0;
P0=0xff;
DelayMs(1);
}
seg_=1;
P0=0x00;
seg_=0;
bit_=0;
shuaxing(0x00);
P0=0xfe;
for(i=0;i<8;i++)
{
shuaxing(zong[i]);
P0=P0<<1;
DelayMs(1);
}
P0=0x00;
}
}
void Timer0_ISR(void) interrupt 1
{
unsigned char i;
TL0=0x00; //重设置初值,
TH0=0xb8; //二十毫秒
i++;
if(50==i) //定时一秒
{
i=0;
P2=~P2;
}
}
|