导航:首页 > 操作系统 > 基于单片机的数字秒表

基于单片机的数字秒表

发布时间:2022-06-13 14:54:13

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

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

要精确定时,必须使用自装载方式。这里我们使用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的值送到数码管显示
}

}

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

② 怎么用单片机实现数字秒表的功能。

做这个做了一个月。你先网络下“秒表”,很多程序都是微软的中断定时的,不用我们另外设置什么。其他的年月日时分秒的计算代码一模一样。当你电脑上做完,任务也基本完成。你只要定义你单片机的接口,及单片机的中断代码,差不多就OK了。
其实我完全可以复制黏贴代码给你,不过没有必要。过程或许更加有意义。

③ 利用51单片机设计一个秒表 (一定要按要求做到0.01秒)

最低位,是0.01s 变化一次,一秒钟,变化 100 次。

这么快,人的眼睛,分辨不出来。

只能看到一个 8。


停止时,才能看到稳定的数字。

程序如下:

#include<reg52.h>

sbit P3_5 =P3^5;

unsigned char counet, m[4] = {0,0,0,0};

void display()

{

unsigned char code Tab[] = {

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsigned char code Bit[] = {8, 4, 2, 1};

unsigned char i, j;

for (i = 0; i < 4; i++) {

P0 = Tab[m[i]]; if (i == 2) P0 &= 127;

P2 = Bit[i]; for(; j > 0; j++); P2 = 0;

}

}

void wait_key()

{

while( P3_5) display();

while(!P3_5) display();

}

main()

{

TMOD = 0x02;

IE = 0x82;

while(1) {

wait_key(); TR0 = 1; TH0 = TL0 = 6;

wait_key(); TR0 = 0;

wait_key(); m[0] = m[1] = m[2] = m[3] = 0;

}

}

void time0() interrupt 1

{

counet++;

counet %= 40;

if(!counet) {

m[0]++; m[0] %= 10;

if(!m[0]) {

m[1]++; m[1] %= 10;

if(!m[1]) {

m[2]++; m[2] %= 10;

if(!m[2]) {

m[3]++; m[3] %= 10;

}}}}

}

④ 单片机 秒表

下面是我写的时钟程序,你看看,再修改修改就可以了,希望对你有所帮助!
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit la=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar num,num1,num2,num3,bq,bb,qian,,shi,ge;

void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}

void display() //显示六个数码管,每两个分别表示时,分,秒。
{

bq=num3/10;
bb=num3%10;
qian=num2/10;
=num2%10;
shi=num1/10;
ge=num1%10;
la=1;
P0=table[bq];
la=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(1);

la=1;
P0=table[bb];
la=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(1);

la=1;
P0=0x80;
la=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(1);

la=1;
P0=table[qian];
la=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delayms(1);

la=1;
P0=table[];
la=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delayms(1);

la=1;
P0=0x80;
la=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delayms(1);

la=1;
P0=table[shi];
la=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delayms(1);

la=1;
P0=table[ge];
la=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delayms(1);
}

void keyscan() //四个独立建盘控制调时
{
if(key1==0)
{
delayms(10);
num3++;
if(num3==24)
num3=0;
while(!key1) ;

}
if(key2==0)
{
delayms(10);
num2++;
if(num2==60)
num2=0;
while(!key2);
}
if(key3==0)
{
delayms(10);
if(num2==0)
num2=60;
num2--;
while(!key3);
}
if(key4==0)
{
delayms(10);
num1=0;num2=0;num3=0;
while(!key4);
}
}
void main()
{
TMOD=0X01;
EA=1;
ET0=1;
TR0=1;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
while(1)
{ keyscan();
display();
}
}

void T0_time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
if(num==20)
{
num=0;
num1++;
if(num1==60)
{
num1=0;
num2++;
if(num2==60)
{
num2=0;
num3++;
if(num3==24)
num3=0;

}

}

}
}

⑤ 关于51单片机实现数字秒表程序算法的问题

确实错了,数据换算正确的是:
buf[0]=IntegerPart%10;
buf[1]=IntegerPart%100/10;
buf[2]=IntegerPart%1000/100;
buf[3]=IntegerPart%10000/1000;

⑥ 设计基于单片机的电子秒表设计,具体要求如下: (1)利用定时器中断进行计时; (2)秒表范围:0-

VC编程

⑦ 基于单片机的秒表设计需要什么模块

主要包括三个模块:
第一:需要一个控制模块,即单片机最小系统,包括单片机的复位和外接晶振电路(也可以用内部晶振,但精度要差很多,);单片机内部需要集成有RAM和FLASH,否则的话需要外扩。

第二:输出显示模块,是用数码管显示,还是用液晶屏显示,或者其它。

第三:输入模块,是用独立键盘还是用矩阵键盘,这个由秒表的功能的复杂程度决定。一般是三个独立按键,启动/停止,暂停和复位。

⑧ 关于51单片机 的秒表/时钟计时器设计摘要

本设计以AT89S51单片机为核心芯片,与型号为1602的液晶显示器构成数字电子时钟电路。AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4K Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及AT89C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案.液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。

⑨ 51单片机数字秒表设计用4位数码管分别显示十秒,秒,百毫秒,十毫秒计时范围为10ms到99s

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

#include <reg51.h>

sbit Axs=P1^3; sbit Bxs=P1^2; sbit Cxs=P1^1; sbit Dxs=P1^0;//数码管位选端口

char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码

void YS(char hs); void XS(int xm,int xs); void Time1(void);int n,i,m,s;

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

void main(void){Time1();while(1){XS(m,s);}}//主函数

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

void int1() interrupt 1 //定时器中断

{

TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;

if(n>1000){n=0;s++; if(s>59){s=0;m++;if(m>59){m=0;}}}

}

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

void Time1(void)//定时器初始化

{

TH0=(65536-921)/256; TL0=(65536-921)%256;

TMOD=0x01; EA=1; ET0=1; TR0=1;

}

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

void XS(int xm,int xs) //数码管显示

{

char d1,d2,d3,d4;

d1=(xs/1)%10; d2=(xs/10)%10; d3=(xm/1)%10; d4=(xm/10)%10;

P0=table[d1]; Axs=0; YS(10); Axs=1;//个位显示

P0=table[d2]; Bxs=0; YS(10); Bxs=1;//十位显示

P0=table[d3]; Cxs=0; YS(10); Cxs=1;//百位显示

P0=table[d4]; Dxs=0; YS(10); Dxs=1;//千位显示

}

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

void YS(char hs){char hk;for(;hs>0;hs--){for(hk=200;hk>0;hk--);}}//延时函数

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

数码管的端口用的可能不一样,自己改下

⑩ 基于51单片机设置一个体育用的数字秒表!程序已有,有些想法没办法实现,求帮助!

可以用1个按钮来记录当前时间,同时应定义一个数组来保存这组数据

阅读全文

与基于单片机的数字秒表相关的资料

热点内容
龙贝格算法c语言实现 浏览:839
程序员模式计算器安卓 浏览:96
在云平台搭建服务器 浏览:329
程序员开头 浏览:773
西夏pdf 浏览:223
coloros备份后的文件夹 浏览:128
linux源码pdf 浏览:793
什么app在微信小程序里看电视电影 浏览:114
服务器dns地址fec0 浏览:331
化州用什么app交社保 浏览:494
linuxvi怎么打开 浏览:245
程序员的电视剧完整版资源 浏览:921
运行时间轴的脚本命令是哪个 浏览:620
怎么部署rtx服务器 浏览:899
手机qq怎么压缩视频文件 浏览:531
魔兽钓鱼起钩算法 浏览:474
安卓手机怎么知道苹果手机在哪里 浏览:830
华为云服务器企业试用 浏览:109
CRYPTO加密是什么 浏览:50
平安三号压缩包 浏览:330