}
cnt++;
if(cnt>= 50) {
cnt = 0;
P0 = ledchar[sec]; sec++; if(sec>= 16) { }
sec = 0;
}
}
}
作业:
1、 熟练掌握单片机定时器的原理和应用方法
2、 通过研究定时器模式1的示意图,自己打开STC89C52RC手册的定时器部分,独立研究模式0,模式1,模式2,
和模式3的示意图,锻炼研究示意图的能力。 3、 使用定时器实现延时,完成左右移动的流水灯程序。 4、 了解数码管的原理,掌握数码管的真值表计算方法。 5、 编程实现数码管静态显示秒表的倒计时。
Lesson 6 中断与数码管动态显示 1、 if语句的用法
(1) if (条件表达式)
{
语句1;
} 只判断一次,只执行一次,然后执行下面的程序。
(2) if (条件表达式)
{ } else { }
(3) if(表达式1) {语句1;} elseif(表达式1) {语句1;}
elseif(表达式1) {语句1;}
else {语句n} 一旦有一个为真,执行完相应语句后,跳出if语句。
2、 switch语句的用法
法一: Switch(表达式) { }
Case 常量表达式n:语句n; Default: 语句n+1;
Case 常量表达式1:语句1; Case 常量表达式2:语句2;
语句2; 语句1;
法二:
Switch(表达式) { }
Case 常量表达式n:语句n;break; Default: 语句n+1;
break;
Case 常量表达式1:语句1; break; Case 常量表达式2:语句2; break;
3、动态显示 利用人肉眼的视觉暂留现象(余晖效应) 10ms以内必须重新刷新同一个数码管。
ENLED ADDR3 选中 ADDR2 ADDR1 ADDR0 切换 4、6位显示的秒表程序(if语句)
#include
sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4;
unsigned char code ledchar[] = {0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e};
unsigned char ledbuff[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; //初始值 0XFF
void main() { unsigned int cnt = 0; unsigned long sec = 0; unsigned char i = 0; ENLED = 0; ADDR3 = 1; TMOD = 0X01; TH0 = 0XFC; TL0 = 0X67; TR0 = 1; while(1)
{ if(TF0 == 1) { }
}
}
TF0 = 0; TH0 = 0XFC; TL0 = 0X67; cnt++; if(cnt>=1000) { cnt = 0; sec++; ledbuff[0] = ledchar[sec]; ledbuff[1] = ledchar[sec/10]; ledbuff[2] = ledchar[sec/100]; ledbuff[3] = ledchar[sec/1000]; ledbuff[4] = ledchar[sec/10000]; ledbuff[5] = ledchar[sec/100000]; // } if(i == 0) { ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; i++; P0 = ledbuff[0]; }
else if (i == 1) { ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; i++; P0 = ledbuff[1]; }
else if (i == 2) { ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; i++; P0 = ledbuff[2]; }
else if (i == 3) { ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; i++; P0 = ledbuff[3]; }
else if (i == 4) { ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; i++; P0 = ledbuff[4]; }
else if (i == 5) { ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; i = 0; P0 = ledbuff[5]; }
5、6位显示的秒表程序(switch语句) #include
sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4;
unsigned char code ledchar[] = {0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e};
unsigned char ledbuff[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; //初始值 0XFF
void main() { unsigned int cnt = 0; unsigned long sec = 0; unsigned char i = 0; ENLED = 0; ADDR3 = 1; TMOD = 0X01; TH0 = 0XFC; TL0 = 0X67; TR0 = 1; while(1) { if(TF0 == 1) { TF0 = 0; TH0 = 0XFC; TL0 = 0X67; cnt++; if(cnt>=1000) { cnt = 0; sec++; ledbuff[0] = ledchar[sec]; ledbuff[1] = ledchar[sec/10]; ledbuff[2] = ledchar[sec/100]; ledbuff[3] = ledchar[sec/1000]; ledbuff[4] = ledchar[sec/10000]; ledbuff[5] = ledchar[sec/100000]; //