
1,需建立一个1毫秒的中断定时器如timer0()。
2,需建立一个全局变量毫秒变量,在中断里面累计计数,1毫秒加1一次。
3,需建立三个全局变量秒变量,分变量,时变量。
4,需做显示模块的处理。·
秒表开始工作时,毫秒变量在中断里面一直累计,在主循环里面做毫秒变量判断是否大于999 。如果大于999,秒变量加1,毫秒变量清零;如果秒变量大于59,分变量加1,秒变量清零;如果分变量大于59时,时变量加1,分变量清零。如果时变量大于23,时变量清零。秒表停止时,毫秒、秒、时、分变量不在累计。同时将这些变量送到数码管上显示。
#include<reg51h>
#define uchar unsigned char
#define uint unsigned int
uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
uchar scanled;
uchar disdat[4];
uint ss,time;
sbit led=P1^0;
void dischg()
{
disdat[3]=ss%10;
disdat[2]=(ss/10)%10;
disdat[1]=(ss/100)%10;
disdat[0]=(ss/1000)%10;
}
void t0isr() interrupt 1
{
ss++;
dischg();
}
void t1isr() interrupt 3 //显示
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
P2=1<<scanled;
P0=~ledtab[disdat[scanled]];
scanled++;
scanled%=4;
time++;
if(time>100){time=0;led=~led;}
}
main()
{
TMOD=0x16;
TH0=0xff;
TL0=0xff;
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
led=0;
scanled=0;
ss=0;
dischg();
while(1);
}
#include <reg51h>
#define uchar unsigend uchar
#define uint unsigned int
unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};//数码管段码
void main()
{
uint k;
TMOD=0X50;//设置模式为1,计数模式
TH1=0X00;
TL1=0X00;//初始值设定
IE=0X00;//关全局中断
TR1=1;//开定时计数器1运行
while(1)
{
if(TL1==16)//进行判断,为16时,计数值归零
TL1=0X00;
k=TL1;
P0=LED7Code[k];//数码管进行显示
}
}
此程序目的见>
以上就是关于正计时秒表显示学号的程序全部的内容,包括:正计时秒表显示学号的程序、基于51单片机的简易计数器设计c程序、用C语言如何开51单片机的计数器,最好编个实例程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)