×
单片机 > 单片机程序设计 > 详情

51单片机做一个计时器

发布时间:2024-05-18 发布时间:
|

同样我们使用的仍然是STC的8051单片机,这段代码是用来做一个计时器,通过数码管实时显示出来,因为板子上数码管有6个,所以可以设置小时,分钟,秒三个单位,在Proteus上也是可以模拟的,计时结束可以用蜂鸣器,或者继电器接口连接


一个闹铃,闹铃用电磁式的就可以,当然简单来说蜂鸣器就是一个不错的选择。


程序中没有设置小时单位,想要加上的小伙伴可以用显示分钟,秒的方法同样显示出来,但添加后要注意延时的时间,时间设置不当可能会出现显示不清楚,数字抖动,或者未选中的数码管也隐隐发光(“鬼影”)。具体大小可以自己调试着来,也是很简单的。下边是源代码:


#include

#define uint unsigned int

#define uchar unsigned char

sbit we=P2^7;

sbit du=P2^6;

uchar code table[]={0x3f,0x06,0x5B,0x4F,0x66,

0x6D,0x7D,0x07,0x7F,0x6F,

0x77,0x7C,0x39,0x5E,0x79,

0x71,0x76,0x38,0x37,0x3E,

0x73,0x5C,0x40,0x00,};

uchar num=0,aa,s,g,m,f,h;

void delay(uchar x);

void main()

{

TMOD=0x01; //设置内部中断0,1的工作方式为方式1

EA=1; //开总中断

ET0=1; //允许中断

TR0=1; //开中断0

TH0=0x4c;

TL0=0x00;

while(1)

{

du = 1;

P0 = 0;

du = 0;


we = 1;

P0 = 0x3e;

we = 0;

du = 1;

P0 = table[s]; //十位

du = 0;

delay(10);


du = 1;

P0 = 0;

du = 0;


we = 1;

P0 = 0x3d;

we = 0;

du = 1;

P0 = table[g]; //个位

du = 0;

delay(10);


du = 1;

P0 = 0;

du = 0;


we = 1;

P0 = 0x1f; //显示分钟

we = 0;

du = 1;

P0 = table[m];

du = 0;

delay(10);


du = 1;

P0 = 0;

du = 0;


we = 1;

P0 = 0x2f;

we = 0;

du = 1;

P0 = table[h];

du = 0;

delay(10);

if(aa == 20)

{

aa = 0;

if(num == 59)

{

num = 0;

f++;

}

else

num++;

s = num/10;

g = num%10;

m = f%10;

h = f/10;

}

if(h == 6)

f = 0;

}

}

void timer0() interrupt 1 //内部中断0

{

TH0=0x4c;

TL0=0x00;

aa++;

}

void delay(uchar x)

{

uchar y,z;

for(y=x;y>0;y--)

for(z=120;z>0;z--);

}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析