本帖最后由 菜鸟来也 于 2011-8-28 14:23 编辑
//用动态扫描方法和定时器1在数码管的前三位显示出秒表,精确到1%秒,即后两位显示1%秒,一直循环下去。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint num ;
uchar bai, shi, ge ;
/********************************************************************
1ms延时程序
*********************************************************************/
void delay(unsigned int a) // 1ms延时程序
{
unsigned int i;
while(a--)
{
for(i = 0; i < 110; i++);//STC单片机在外部晶振为12MHz时i值上限为600
} //AT89C51单片机在外部晶振为12MHz时i值上限为125
}
/*******************************************************************
共阳数码管
********************************************************************/
uchar code table[]={0xc0, 0xf9, 0xa4, 0xb0,0x99, //01234
0x92, 0x82,0xf8,0x80,0x90, //56789
0xa0, 0x83, 0xa7, 0xa1, 0x84 //字母a-e
0x8e, 0xbf, 0x7f, }; //F,符号(-),小数点
/********************************************************************/
void display(uchar bai, uchar shi, uchar ge)
{
P2=0x7f;
P0=table[bai];
delay(1);
P2=0xbf;
P0=table[shi] ;
delay(1);
P2=0xdf;
P0=table[ge];
delay(1);
}
void main()
{
TMOD=1;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
display(bai, shi, ge);
}
}
void time0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
num++;
bai=num/100;
shi=(num%100) / 10;
ge=num%10;
if(num==999)
{
num=0;
}
}
出现错误:
LESSON4_2.C(36): error C279: 'P0': multiple initialization
LESSON4_2.C(36): error C231: 'P0': redefinition
LESSON4_2.C(36): error C231: 'P0': redefinition
LESSON4_2.C(37): error C141: syntax error near '1'
LESSON4_2.C(38): error C141: syntax error near '}' |