|
今天刚刚完成了一个新的单片机实验,犯了一个小小的错误,导致不能够倒计时,弄了几个小时, 结果发现是变量的取值范围出错了
任何一个实验都应该自己动手去实践,没有实践是不知道自己少了什么的。只有实践才能够获得更多的调试经验!
程序虽小,但只要实际去做了,就能获得不少的经验! 这就是做复杂程序的基础!
共享自己写的程序,毕竟是自己劳动了几个小时的结果!与大家分享!
程序太小了,就没有多少注释了
/******************************************************
项目名称:99秒倒计时
时间:2015-7-9
目的:使用51单片机的定时器1实现99秒倒计时
单片机平台:KST51单片机开发平台-金沙滩单片机
注意:unsigned char 的取值范围为0-255
unsigned char 的取值范围为0-65535
要结合单片机的硬件来看程序
**********************************************************/
#include<reg52.h>
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
unsigned char sec = 99;
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
};
void LedScan() //´Ëº¯ÊýʵÏÖLedµÄ¶¯Ì¬É¨Ãè
{
static unsigned char i = 0;
P0 = 0xFF;
P1 = (P1 & 0xF8)| i;
P0 = LedBuff[i];
if(i < 2)
i++;
else
i = 0;
}
void main()
{
ENLED = 0;
ADDR3 = 1;
//¶¨Ê±Æ÷¼Ä´æÆ÷³õʼ»¯
TMOD = 0X01;
TH0 = 0xFC; //1 ms¶¨Ê±
TL0 = 0x67;
EA = 1;
ET0 = 1;
TR0 = 1;
while(1)
{
LedBuff[0] = LedChar[sec % 10];
LedBuff[1] = LedChar[sec/10 %10];
}
}
//ÖжϷþÎñº¯Êý
void InterruptTimer0() interrupt 1
{
static unsigned int cnt = 0;
//Range of "unsigned char" is 0 to 255
//Range of "unsigned int" is 0 to 65535
TH0 = 0xFC;
TL0 = 0x67;
cnt++;
LedScan();
if(cnt >= 1000)
{
cnt = 0;
sec--;
if(sec < 0)
{
sec = 99;
}
}
}
|
评分
-
查看全部评分
|