|
我自己写了个程序,实在是找不出错误,麻烦哪位高手帮忙解答下!
要实现的功能是:用定时器0的方式1实现第一个发光管以200ms间隔闪烁,用定时器1的方式1实现数码管前两位59s循环计时。用的芯片是STC89C58RD+,晶振是11.0592MHz,程序代码如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit wei=P2^7;
sbit duan=P2^6;
sbit led1=P0^0;
uchar n1=0,n2=0,n=0;
uchar shi=0,ge=0;
uchar code atm[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f
};
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--)
;
}
void smg(uchar shi,uchar ge)
{
duan=1;
P0=atm[shi];
duan=0;
P0=0xff;
wei=1;
P0=0x7f;
wei=0;
delay(5); // 延时?
P0=0xff;
duan=1;
P0=atm[ge];
duan=0;
P0=0xbf;
wei=1;
P0=0xbf;
wei=0;
delay(5);
}
void main()
{
TMOD=0x11;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1)
{
smg(shi,ge);
}
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
n1++;
if(n1==4)
{
n1=0;
led1=~led1;
}
}
void T1_time() interrupt 3
{
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
n2++;
if(n2==20)
{
n=0;
n++;
if(n==60)
{
n=0;
shi=n/10;
ge=n%10;
}
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|