用单片机设计秒表,需要的程序是什么?
秒表
单片机也有中断功能,它也会中断单片机主程序正常运行。今天设计的秒表是利用单片机内部资源——定时/计数器中断,前面讲过延时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,需要在中断函数中重新装入初值。
精确到0001秒的秒表,单片机程序设计控制实现
下面介绍如何在52单片机下做一个定时器控制秒表。
电子秒表
首先了解一下硬件部分。秒表硬件主要的器件有:52单片机;8位数码管显示分别显示时、分、秒、毫秒;有三个按钮分别为清零、开始/停止、计数按钮。
电器连接图
秒表基本功能
可以在手机上了解一下秒表,当按下开始/停止按钮时,秒表开始计时,再按下此按钮时,秒表停止计时。
当秒表开始计时,按下清零按钮,计时不清零,按下计数按钮,计数器累加1。
当秒表停止计时,按下清零按钮,计时被清零,按下计数按钮,则为无效。
手机秒表
秒表单片机程序设计
1,需建立一个1毫秒的中断定时器如timer0()。
2,需建立一个全局变量毫秒变量,在中断里面累计计数,1毫秒加1一次。
3,需建立三个全局变量秒变量,分变量,时变量。
4,需做显示模块的处理。·
秒表开始工作时,毫秒变量在中断里面一直累计,在主循环里面做毫秒变量判断是否大于999 。如果大于999,秒变量加1,毫秒变量清零;如果秒变量大于59,分变量加1,秒变量清零;如果分变量大于59时,时变量加1,分变量清零。如果时变量大于23,时变量清零。秒表停止时,毫秒、秒、时、分变量不在累计。同时将这些变量送到数码管上显示。
相关问答
单片机秒表 实验原理?利用单片机的定时器/计数器定时和记的原理,结合显示电路、LED数码管以及按键来设计计时器,具有00-99分钟计时及显示功能;具有开始、停止和复位功能,并由按键...
51 单片机秒表 程序[回答]这个程序写的太乱了执行的顺序是先定义秒等一些寄存器,然后清零,并定义定时初值,开显示。再打开定时器中断,定时到,中断秒寄存器加1,加到10时清...
利用 单片机 设计一个 秒表 详细要求: (1)用数码管显示秒与毫秒...可以设计并在protues下仿真的啊可以交流的啊
单片机秒表 程序 80C51-ZOL问答单片机里面有程序存储器,还有数据存储器,数据存储器是用来存放大量数据的。。。程序存储器则是用来放程序的,都是可擦除的,至于执行的话,里面有相应的运算单...
数字式电子 秒表 设计程序(max7219与 单片机 连接8位数码管显示)?你好!7219驱动两位数码管完成99秒计时,通过按键控制开始和复位你好!7219驱动两位数码管完成99秒计时,通过按键控制开始和复位
设计电子时钟 要用AT89S51 单片机 的定时器实现,用4位数码管...53历日期显示功能(年、月、日),年号只显示最后两位;(4)随时可以调校年、月、日;(5)允许通过转换功能键转换显示时间或日期。(6)所有按键需...(6)所...
我想做一个高精度电子 秒表 ,请问用那种时钟芯片比较好?精度的高低取决于晶振,跟时钟芯片无关。采用高精度的晶振,用单片机就能做高精度的秒表了。精度的高低取决于晶振,跟时钟芯片无关。采用高精度的晶振,用单片...
我想知道: 单片机 ( 秒表 制作)?,制作 单片机 排名好吗?[回答]建议联系,他们是专业承接电路板设计开发的公司,做产品非常的负责靠谱,可以去咨询咨询还不错的,他们专业承接单片机解决方案,以前朋友在那做了,还批...
怎么用51 单片机 设计一个0-9.9秒的定时器?朋友们好,我是电子及工控技术,我来回答这个问题。用单片机实现一个定时器只要对单片机里的特殊寄存器进行设置就可以实现了,下面我与朋友们说说这个0到9.9秒定...
哪位老司机!能否告诉我, 单片机 ( 秒表 制作)?,制作 单片机 什么...[回答]还不错的,他们专业承接设计电路板,以前朋友在那做了,还批量生产了。还不错的,他们专业承接单片机解决方案,以前朋友在那做了,还批量生产了我们是在...