怎样用单片机定时器设计0到9秒的循环程序

如题所述

#define uint unsigned int
#define uchar unsigned char
#include <reg52.h>
uint i;
uchar code TAB[]=[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main(void)
{
TMOD=0x22; /*定时器0设置为工作方式2,基准定时(256-6)/1M=0.25ms*/
TH0 =6; //赋T0的预置值6,溢出4000次就是1秒钟
TL0 =6;
ET0=1; //打开定时器0中断
EA=1; //打开总中断
TR0=1; //启动定时器
while(1) //程序循环
{
P3=TAB[(i)];//p3送数
}
}
//定时器0中断
void timer0(void) interrupt 1 using 1
{
static uint t; //注意t的范围,这里涉及到C51变量取值范围这个知识点
t++;
if(t==4000) //T0的预置值6,溢出4000次就是1秒钟,晶振12MHz
{
t=0;
i++;
i=i%10;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-01-30
自己动手做啦,我给你思路。
(如果你是为了应付课程设计,那么希望你醒醒吧,也许这些东西在你工作以后用不到,但是它何尝不是你解开自然奥秘的过程呢?)

把7段码的原理搞清楚,P3.0的每一口对应的一个7段码中的一小截灯亮,让不同的灯亮就可以组合成0-9的任意一个数字,所以,你根据你的硬件把0-9的真值表列出来。

然后按下面这个思路写程序,显示0,也就是让P3输出0的真值----(定时器)1S后-----显示1-----1秒后----显示2 等等等等。他们包含在while(1)里,就可以循环了。

我知道你可能不采纳我的答案,但是,我真的希望你能好好的把单片机学学,这对你以后很重要的。也许你琢磨了你所问的这个问题,你就对电控制有那么一点点感情了。加油吧。