C51单片机的习题,无法达到题目要求,要怎么样才能满足题目的要求,内详

来源:百度知道 编辑:UC知道 时间:2024/09/24 04:48:49
题目是:用动态扫描方法和定时器T1在数码管的前三位显示出秒表,精确到1%秒,即后两位显示1%秒,一直循环下去。
我是无法达题目要求了,因为时T1 定时器的定时,时间再短一些,反而越慢了,现在是最快的了,这种方法再慢没有办法让板子验测到。
还要就是我这种写法是否合适呢?请前辈给一点意思也行啊.
#include<reg52.h>
#define UI unsigned int//宏定义
#define UC unsigned char
sbit dula=P2^6;//位声明锁存器控制引脚
sbit wela=P2^7;
UC tt;
UC code sumadu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//数码管段数组
void chushi();//声明初始化子程序
void xinshi();//声明显示子程序
void yanshi(UI p,UI z);//声明延时子程序
void main()
{
chushi();//调用初始子函数
xinshi();//调用显示子程序

}
void xinshi()//显示循环子函数
{
UI temp,bai;
UC shi,ge;
temp=0;
dula=0;//初始化,关闭段选
wela=0;
while(1)//死循环
{

if(tt==1)
{
tt=0;//aa清零很重要,是中断次数,也就是次数*时间=总时间
temp++;//temp自加一,作为总累加数
if(temp==1000)//根据定义的变量类型,在范围内限制,总加数。
temp=0;

初步看了一下,首先你的晶振是多少,我假设是12M,然后发现你每50MS产生一次中断,然后temp+1,到temp的值到1000时,实际的时间为50*1000MS就是50S,你自己看看时间是否正确。