用C51做这题目

来源:百度知道 编辑:UC知道 时间:2024/06/07 05:39:39
用动态扫描方法和定时器1在数码管的前三位显示出秒表,精确到1%秒,即后两位显示1%秒,一直循环下去。
我做的是
#include<reg52.h>
sbit dula=P3^0;
sbit wela=P3^1;
#define uchar unsigned char
#define uint unsigned int
uchar aa,miao,shi,ge,temp;
uchar code table[]={
0x3F,0x06,0x5B,0x4F,0x66,
0X6D,0x7D,0x07,0x7F,0x6F};
void unit();
void display();
void delay(uchar);
void main()
{
unit();
while(1)
{
if(aa==10)
{
aa=0;
shi=temp%100/10;
ge=temp%10;
if(temp==100)
{
miao++;
if(miao==10)
{
miao=0;
}
temp=0;
}
}
display();
}
}

void unit()
{
miao=0;
shi=0;
ge=0;
temp=0;
TMOD=0x10;
TH1=(65536-1)/256;
TH0=(65536-1)%256;
EA=1;
ET1=1;
TR1=1;
}

void time1() interrupt 3
{

你的程序错的地方好像很多嘛!
1、计时器的寄存器应为TH1和TL1。
2、你的初值给的是65535,也就是一个脉冲就中断一次?不可能做到吧。而且也不对。
3、你那个miao(秒)不对吧。在12MHZ晶振下1000个脉冲是1毫秒。6MHZ晶振也才2毫秒。
4、你的temp不可能到100的,永远是0。
另外你的显示用的锁存器共用P2,没看到电路就不敢乱说了。