问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

基于51单片机的电子秒表设计

发布网友 发布时间:2022-05-01 05:47

我来回答

2个回答

热心网友 时间:2022-06-25 04:57

这个是 数码管显示计数器程序。稍加更改 既满足要求

要精确定时,必须使用自装载方式。这里我们使用T2定时器,让它工作在16bit自动装载方式,这时,有另一个位置专门装着16位预装载值,T2溢出时,预装载值立即被置入。这就保证了精确定时。
但是,即使是16位定时器,最长的溢出时间也就几十毫秒,要定时一秒,就需要一个变量来保存溢出的次数,积累到了多少次之后,才执行一次操作。这样就可以累加到1秒或者更长的时间才做一次操作了。
T2定时器有个特殊的地方,它进入中断后,需要自己清除溢出标记,而51的其他定时器是自动清除的。请参考51单片机相关书籍。
如果使用T2定时器实现1秒精确定时
下面我们就来计算:
仿真器的晶振是22118400HZ,每秒钟可以执行1843200个机器周期。而T2每次溢出最多65536个机器周期。我们尽量应该让溢出中断的次数最少,这样对主程序的干扰也就最小。
选择每秒中断24次,每次溢出1843200/24=76800个机器周期,超出65536,无效。
选择每秒中断30次,每次溢出1843200/30=61440个机器周期
选择每秒中断32次,每次溢出1843200/32=57600个机器周期
选择每秒中断36次,每次溢出1843200/36=51200个机器周期
选择每秒中断40次,每次溢出1843200/40=46080个机器周期
从上面可以看到我们可以选择方式有很多,但是最佳的是每秒中断30次,每次溢出61440个机器周期。也就是赋定时器T2初值65536-61440=4096,换成十六进制就是0x1000。
从上面的计算也可以看出晶振2118400Hz的好处,它可以整除的倍数多,要准确定时非常方便。更常见的应用是在串口波特率上,使用22118400HZ可以输出最多准确的标准波特率。

如果是其他频率的晶振 按照上面的方法计算即可

******************************************************************/

#include <reg52.h> //包括一个52标准内核的头文件
#include<intrins.h>
/****************************声明函数*****************************/

void x8led(unsigned long ddd);
void delay882us(void);

/*****************************定义IO******************************/

sbit P20=P2^0;
sbit P21=P2^1;
sbit S16=P3^0;
sbit S15=P3^1;
sbit S14=P3^2;
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
bit f=0;//位变量

/***************************定时器2中断**************************/

timer2() interrupt 5
{
static unsigned char t;
TF2=0;
t++;
if(t==30) //T2的预置值0x1000,溢出30次就是1秒钟,晶振22118400HZ 这里晶振频率不同则会有所不同
{
t=0;
f=1;//每次长时间的溢出,就置一个标记,以便主程序处理
}
}

/*****************************数码管扫描**************************/

void x8led(unsigned long ddd)
{
unsigned char q,r=0;
unsigned char l[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};
//0-9的字段码
unsigned char xx[8]={0,0,0,0,0,0,0,0};
unsigned char y[8]={0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x1};
xx[0]=ddd%10;
xx[2]=ddd/10%10;
xx[1]=ddd/100%10;
xx[3]=ddd/1000%10;
xx[4]=ddd/10000%10;
xx[6]=ddd/100000%10;
xx[5]=ddd/1000000%10;
xx[7]=ddd/10000000; //求出八位数,分别放在八个变量中

for(q=0;q<8;) //循环扫描
{
q++;
r++;
if(r==8)r=0;
P1=y[r];
P21=1;
delay882us();
P21=0;

P20=1;
P1=l[xx[r]];
delay882us();
P1=0xff;
P20=0;
}

}

/*******************************延时882us*************************/

void delay882us(void)
{
unsigned char i;
for(i=0;i<255;i++)
{
_nop_();
}
}

/*****************************主程序******************************/

void main(void)
{

unsigned long a=0;
RCAP2H =0x10; //赋T2的预置值0x1000,溢出30次就是1秒钟
RCAP2L =0x00;
TR2=1; //启动定时器
ET2=1; //打开定时器2中断
EA=1; //打开总中断

while(1)
{

if(f)//发现标记进入处理
{
f=0;//清除标记
a++;
if(a>99999999)a=0;
}
x8led(a);//将a的值送到数码管显示
}

}

/*****************************************************************/

热心网友 时间:2022-06-25 04:58

汇编不会,C语言还行
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
网络宣传文案心碎,句句获赞! 关于朋友圈上万人点赞转发的说说 人生看的很透彻的经典句子 超现实超扎心的说说大全2019最新 心脏血管堵塞吃什么食物 投资理财有什么前景 pp理财什么情况 P2P理财行业的前景如何? 中国目前的财富管理现状是什么情况? 呼吸皮沙发寿命多久 “皮沙发的呼吸寿命” 呼吸皮沙发寿命多久 糖耐量异常如何治疗_糖耐量异常 我去医院检查是糖耐量异常,现在一直坚持锻炼,饮食控制,现在餐后正常,可是空腹一直都是6.5~6.8,怎么办 我是大二自动化学生,目前只自学了51单片机,想参加电子设计大赛,不知道先要从哪些方面开始入手准备 C51单片机电子时钟设计思路 大学生电子设计大赛 设计的作品都能用 51单片机来做么? 基于51单片机的电子设计 小卡宴什么时候上市 包你火背包在美国上市了吗? 途睿欧国六车准备就绪,即将惊艳上市 股票可以 只卖 几十股 吗? 王思聪公司上市了吗? 中驰车福是在哪个版块上市的? 国泰君安为什么不上市? 听说国泰君安怎么上市了?是不是啊?怎么购买啊? 闪对上市了吗? 公司要上市准备中,跟员工要房产证或购房合同是咋回事?对个人有没有影响。 “聪明”,“热闹”,“宽敞”,“简单”的反义词分别是什么? 简单的反义词是什么 标准答? 富裕和简单的反义词是什么 简单的反义词是什么不是 51单片机设计电子时钟。 MCS51单片机数字电子钟设计 51单片机设计电子时钟的思路 金和铜分辨 如何利用51单片机设计一个电子密码锁系统 今天做糖耐空腹没通过,好烦躁的,心情不好,怎么办 51单片机电子时钟设计怎么更改led灯闪烁频率用汇编语言 孕妇28周糖耐一小时10.33两小时8.9怎么办?控制饮食能下来吗?28周后复查... 基于51单片机的电子密码锁设计 铜和金怎么区分 描写晚秋的诗词 钢筋绑扎对扎丝的根数有无要求? 做洗车行业的具体规划和注意事项有什么? 描写晚秋景色的诗句 洗车店闲时可以做些什么 为什么绑轧物件一般用铁丝(镀锌低碳钢丝),而起重机吊重物却用钢丝绳 我梦见我跟我老公离婚,我老公要和我分财产。这是什么兆头? 钢筋用点焊与用铁丝绑扎有什么区别? 买的盆景用铁丝造型的 多久拆掉? 梦见和老公闹离婚分了好多红色的百元大钞?