求一个51单片机秒表设计原理图和程序(C语言),要求能够显示0~59.9秒,能暂停。

有的发我邮箱530239689@qq.com谢谢啦!
要求用c语言编程,proteus仿真。。。。

第1个回答  2011-07-05
找以前的学长要吧,这里很难搞到。给你个思路程序设计主要涉及两部分,计时和显示。计时程序主要看你最小系统的晶振频,来设计计时。显示的话有三位显示,用扫描显示。暂停用中断来实现。出这个题的老师还是比较花功夫的。
第2个回答  2011-07-05

数码管数共阳极的,其他图我就给你弄在一张图上了,至于51的图最小系统之类的,你看着办,树上都有!希望对你有帮助!

以下是程序:

/*上电后数码管显示:00.0,按下S18 后暂停*/

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit start=P2^3;

uchar msecond=0;   //记录中断次数

uchar second_0=0,second=0,wei=0,num=0;      //second_0为0.1s的计时,wei为数码管的选择

uchar code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, //共阳极数码管查表数据

                 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

uchar code tab1[]={0x7F,0xBF,0xDF,0xEF}; //1110,1101,1011,0111

void delay(uchar z);

main()

{

TMOD=0x21;                          //定时器T1工作在方式2,8位重装定时器,定时器T0工作在方式1,16为定时器

TL1=0x06;   //定时0.25ms自动重装2^8用于动态显示

TH0=0x3C;   //定时50ms

TL0=0xB0;

EA=1,ET0=1,ET1=1;

TR1=1;

TR0=1;

while(1)

{

if(!start) //有按键按下

{

delay(5);        //消抖

if(!start)

{

while(!start);      //松手检测

num++;

}

}

if(num==1)TR0=0;

if(num==2)TR0=1,num=0;

}

}

void delay(uchar z)

{ uint x,y;

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

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

}

time1() interrupt 3

{

if(wei==0)

{

P1=tab1[0];

P0=tab[second_0%10];

}

if(wei++==10)   //0.25ms移位一次,实现动态扫描

{

P1=tab1[1];

P0=tab[second%10]&0x7f; //小数点

 }

if(wei==20)

{

P1=tab1[2];

P0=tab[second/10];

}

if(wei==30)wei=0;

}

time0() interrupt 1 

{

TH0=0x3C;   //定时50ms

TL0=0xB0;

msecond++;

if(msecond==2)    //定时时间到了0.1s

{

msecond=0;

second_0++;

if(second_0==10) //定时时间到了1s

{

second++;

second_0=0;

if(second==60)second=0;

}

}

}

追问

有没有用proteus仿真的?

追答

这个没有,我有实验板,直接用的,这是效果,我不太会用那个软件,电路图画出来了但是仿真不出来,不好意思。

单片机秒表课程设计,急求!!!
MOV LED_BUF+1,A JMP key_SCAN_END key_start:SETB KEYSTART JBKEYSTART,key_SCAN_END ;DELAY NOP NOP NOP JB KEYSTART,key_SCAN_END JNB KEYSTART,SETB TR0 key_SCAN_END:JMP loop ;=== InitTimer0:;10ms一次中断 MOV TMOD,#01H MOV TH0,#0D8H MOV TL0,#0F0H SETB EA SETB ET...

4. 可任意启动\/停止的电子秒表设计
你好像是个学生,这应该是个课程设计的题目,你应该自己练习做~~这个实现起来很简单,用晶振,C51芯片,七段数码管,5VDC电源,一个按键,导线,好像还要用译码器等~~你还是自己动脑思考一下吧!~

利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开...
其硬件框图如图2.2所示,原理图见附录图6.1。图2.2 数字钟硬件框图2.4 电路组成及工作原理本文数字时钟设计原理主要利用AT89S52单片机,由单片机的P0口控制数码管的位显示,P2口控制数码管的段显示,P1口与按键相接用于时间的校正。在设计中引入220V交流电经过整流、滤波后产生+5V电压,用于给单片机及显示电路提供工作电压。整...

7种常见的51单片机时钟电路图
在MCS-51单片机内部,有一个高增益的反相放大器,其输入端为XTAL1,输出端为XTAL2。此放大器构成了单片机的时钟方式和振荡电路。单片机的时钟连接方式有两种,即内部时钟方式与外部时钟方式。在内部时钟方式中,需在XTAL1和XTAL2两端跨接石英晶体振荡器和微调电容。C1和C2的容量通常为30pF,振荡频率范围...

基于51单片机,lcd1602怎么显示倒计时秒表? - 知乎
基于单片机的数字秒表设计,核心使用51系列的STC89C52单片机,结合LCD12864显示模块、语音播报模块及输入模块,实现功能如下:系统中控部分由STC89C52单片机负责,它接收输入信息并处理,控制输出。输入模块包括三个部分:DS1302时钟模块,用于获取时间、实现计时与倒计时;四个独立按键,用于设置时间、倒计时时间、...

采用AT89C51单片机设计一只电子秒表,倒计时(60~1每间隔1秒倒数)?
硬件电路 有2位数码管可以显示秒表的时间 0~10秒 有3个按键 K1为开始计时 K2为停止计时 K3为清零 软件设计:K1按下则启动定时器定时 每到1秒 显示器缓冲单元内容加1 K2按下则停止定时器定时 K3按下则将显示器缓冲单元内容清零。

单片机 按键秒表
LJMP GN2;数码管显示秒表时间的程序 GN1: ;先初始化 S1:MOV A,#0 MOV TEMP,A GOON1: MOV R2,#2 JS1: MOV R3,#250 TIME1: MOV A,TEMP ;将TEMP中的十六进制数转换成10进制 MOV B,#10 ;10进制\/10=10进制 DIV AB MOV B_BIT,A ;十位在A MOV A_BIT,B ;个位在B ...

利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开...
共阳数码管中断程序:include<reg52.h> define uint unsigned int define uchar unsigned char uchar code table[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uint num,a;uchar bai,shi,ge;void init();void delay(uint);void ...

秒表原理图怎么设计啊?
这个东西最省的方法就是买个很便宜的单片机,八个脚的就够了。两片74HC595驱动数码管。。单片机内部有定时器。。程序一写,就完事了。

用单片机设计一个时钟,可显示时和分,可以调时间,也要有闹钟功能,要有设...
for(z=0;z<100;z++){ tmp=0x01;P2=tab[h\/10];小时显示 disp();P2=tab[h%10];disp();P2=tab[m\/10];分钟显示 disp();P2=tab[m%10];disp();P2=tab[s\/10];秒显示 disp();P2=tab[s%10];disp();} s++;while(s==60)秒进一位,到60清0 { m++;s=00;} while(m==60...

相似回答