技术文档

单片机 数字秒表 用单片机设计秒表,需要的程序是什么?

小编 2024-10-12 技术文档 23 0

用单片机设计秒表,需要的程序是什么?

秒表

单片机也有中断功能,它也会中断单片机主程序正常运行。今天设计的秒表是利用单片机内部资源——定时/计数器中断,前面讲过延时1秒(s),是让单片机空耗一段时间,并且延时时间不是精确的,但是定时器中断获得时间单位就比较精确,精确程度与单片机外接晶振质量有关。

常见的单片机单片机一共有5个中断,即外部中断0、外部中断1、定时/计数中断0、定时/计数中断1、串口中断。

一、制作一个秒表

.程序设计

#include<reg52.h>//头文件

#define uchar unsigned char//宏定义

#define uint unsigned int

uchar table []={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴数码管数组

uchar num,num1,shi,ge;//定义变量

void delay(uchar a)//延时函数

{

uint i,j;

for(j=a;j>0;j--)

for(i=110;i>0;i--);

}

void display(uchar shi,uchar ge)//显示函数

{

P0=table[shi];

P1=0XFE;//1111 1110选中数码管第一位

delay(5);

P0=table[ge];

P1=0XFd;//1111 1101选中数码管第二位

delay(5);

}

void t0init()//初始化

{

TMOD=0X01;//0000 0001//定时器0工作方式1

TH0=0X3C;//装入初值,50毫秒

TL0=0XB0;//装入初值

EA=1;//打开总中断开关

ET0=1;//打开定时器0中断开关

TR0=1;//启动定时器0

}

void main()//主函数

{

t0init();

while(1)//无限循环

{

display(shi,ge);

}

}

void timer0()interrupt 1 //中断函数

{

TH0=0X3C;//装入初值

TL0=0XB0;//装入初值

num++;//变量累加

if(num==20)//1秒

{

num=0;

num1++;

shi=num1/10;//取十位

ge=num1%10;//取个位

if(num1==60)

{

num1=0;

}

}

}

3.程序解释

(1)采用定时器中断必要的语句。

TMOD=0X01;

TMOD是选择定时器工作方式。0X01是定时/计数中断0工作方式1,如果是0X10是定时/计数1工作方式1。

TH0=0X3C;//装入初值

TL0=0XB0;//装入初值

如果单片机外接晶振是12M,它的时钟周期是1/12μs(微妙),12个时钟周期是一个机器周期即1μs,定时/计数0工作方式1,最大值能定时65536μs(2的16次方),约等于65ms。如果需要定时50ms,也就是计数不是从0开始,而是从15536(65536-50000)开始,15536(十进制)换算为16进制为3CB0,即“TH0=0X3C;TL0=0XB0;”,需要计时1s,只需程序中断20次。

EA=1;//打开总中断开关

EA是总开关,好比总电闸。

ET0=1;//打开定时器0中断开关。它是定时器0的开关,好比客厅总电源开关。

TR0=1;//启动定时器0。启动定时器0好比客厅的吊灯开关。

以上语句需要写在主函数中,或者作为函数,在主函数中调用。

(2)void display(uchar shi,uchar ge)//显示函数显示部分用函数形式体现,在主函数循环调用。

(3)中断函数

既然中断产生了,那么中断以后做什么?

void timer0()interrupt 1 //中断函数

{

做什么工作;

}

“timer0”自己起的名字,代表定时/计数0中断,“interrupt”不能写错,关键是它后面的数字千万也不能搞错。中断源与序号如表3-14-1。需要注意,采用工作方式1,需要在中断函数中重新装入初值。

单片机的功能确实多,做一个秒表应该怎么写程序呢?

单片机也有中断功能,它也会中断单片机主程序正常运行。今天设计的秒表是利用单片机内部资源——定时/计数器中断,前面讲过延时1秒(s),是让单片机空耗一段时间,并且延时时间不是精确的,但是定时器中断获得时间单位就比较精确,精确程度与单片机外接晶振质量有关。

常见的单片机单片机一共有5个中断,即外部中断0、外部中断1、定时/计数中断0、定时/计数中断1、串口中断。

一、制作一个秒表

1.电路

2.程序设计

#include<reg52.h>//头文件

#define uchar unsigned char//宏定义

#define uint unsigned int

uchar table []={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴数码管数组

uchar num,num1,shi,ge;//定义变量

void delay(uchar a)//延时函数

{

uint i,j;

for(j=a;j>0;j--)

for(i=110;i>0;i--);

}

void display(uchar shi,uchar ge)//显示函数

{

P0=table[shi];

P1=0XFE;//1111 1110选中数码管第一位

delay(5);

P0=table[ge];

P1=0XFd;//1111 1101选中数码管第二位

delay(5);

}

void t0init()//初始化

{

TMOD=0X01;//0000 0001//定时器0工作方式1

TH0=0X3C;//装入初值,50毫秒

TL0=0XB0;//装入初值

EA=1;//打开总中断开关

ET0=1;//打开定时器0中断开关

TR0=1;//启动定时器0

}

void main()//主函数

{

t0init();

while(1)//无限循环

{

display(shi,ge);

}

}

void timer0()interrupt 1 //中断函数

{

TH0=0X3C;//装入初值

TL0=0XB0;//装入初值

num++;//变量累加

if(num==20)//1秒

{

num=0;

num1++;

shi=num1/10;//取十位

ge=num1%10;//取个位

if(num1==60)

{

num1=0;

}

}

}

3.程序解释

(1)采用定时器中断必要的语句。

TMOD=0X01;

TMOD是选择定时器工作方式。0X01是定时/计数中断0工作方式1,如果是0X10是定时/计数1工作方式1。

TH0=0X3C;//装入初值

TL0=0XB0;//装入初值

如果单片机外接晶振是12M,它的时钟周期是1/12μs(微妙),12个时钟周期是一个机器周期即1μs,定时/计数0工作方式1,最大值能定时65536μs(2的16次方),约等于65ms。如果需要定时50ms,也就是计数不是从0开始,而是从15536(65536-50000)开始,15536(十进制)换算为16进制为3CB0,即“TH0=0X3C;TL0=0XB0;”,需要计时1s,只需程序中断20次。

EA=1;//打开总中断开关

EA是总开关,好比总电闸。

ET0=1;//打开定时器0中断开关。它是定时器0的开关,好比客厅总电源开关。

TR0=1;//启动定时器0。启动定时器0好比客厅的吊灯开关。

以上语句需要写在主函数中,或者作为函数,在主函数中调用。

(2)void display(uchar shi,uchar ge)//显示函数显示部分用函数形式体现,在主函数循环调用。

(3)中断函数

既然中断产生了,那么中断以后做什么?

void timer0()interrupt 1 //中断函数

{

做什么工作;

}

“timer0”自己起的名字,代表定时/计数0中断,“interrupt”不能写错,关键是它后面的数字千万也不能搞错。需要注意,采用工作方式1,需要在中断函数中重新装入初值。

中断源与序号

相关问答

单片机秒表 怎么找?

用定时器加数码管做就可以了吧用定时器加数码管做就可以了吧

51 单片机秒表 每个位置代表什么字母?

数字,而不是一个字母。秒表通常有六个数字位置,分别代表小时、分钟、秒钟以及毫秒。其中小时位置通常只有两个数字,而其他位置都...51单片机秒表每个位置代表...

单片机秒表 实验原理?

利用单片机的定时器/计数器定时和记的原理,结合显示电路、LED数码管以及按键来设计计时器,具有00-99分钟计时及显示功能;具有开始、停止和复位功能,并由按键...

51 单片机 秒表 设计 怎么用按钮控制开始 停止和清零?-ZOL问答

4条回答:【推荐答案】//定义IO和变量sbitstart=P1^1;sbitstop=P1^2;sbitreset=P1^3;bitflag_start;//计数标志位uintsec;//秒/

单片机 ( 秒表 制作)?,制作 单片机 有专业度吗??

[回答]旺扬单片机开发很早就听说过了,现在还有在做,公司实力不错的,推荐。服务热情,公司环境设备先进,价格合理品控做的不错,据说他们生意做的也很好。建...

关于 单片机 做的 秒表 的问题 时间不准是为什么 我用PROTEUS模...

定时不准,用单片机没法做到很准确的中断函数执行太长,占用时间5条回答:【推荐答案】cc=0;bai=dd%10;dd++;——qian,bai,shi,ge,放到++的后面来。进入下一级...

老司机们能告诉我: 单片机 ( 秒表 制作)?,制作 单片机 xxx如何??

[回答]有了解过一点,上次跟朋友一起吃饭的时候提到过,正好我们也需要他们的产品。单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能...

数字 式电子 秒表 设计程序(max7219与 单片机 连接8位数码管显示)?

你好!7219驱动两位数码管完成99秒计时,通过按键控制开始和复位你好!7219驱动两位数码管完成99秒计时,通过按键控制开始和复位

用C语言写51 单片机 闹钟程序 - 156****1626 的回答 - 懂得

汇编做的可以不.有秒表.有闹钟.//*********************************************************//实现2113功能:本程序实现在P1口模拟一个...

设计电子时钟 要用AT89S51 单片机 的定时器实现,用4位数码管...

(1)显示准确2113的北京时间(时、分、秒),5261可用24小时4102制式;(2)随时可以调校时间。(3)增加公1653历日期显示功能(年、月、日),年号只...(3)增...

猜你喜欢