单片机秒表计时器c语言程序图 需要图和程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机秒表计时器c语言程序图 需要图和程序相关的知识,希望对你有一定的参考价值。
#include<reg51.h> // 时钟与秒表
#define uchar unsigned char
#define uint unsigned int
sbit qingling=P1^0; //清零
sbit tiaofen=P1^1; //调分
sbit tiaoshi=P1^2; //调时
sbit sounder=P1^7; //naozhong
uint a,b;
uchar hour,minu,sec, //时钟
hour0,minu0,sec0, //秒表
hour1,minu1,sec1;
h1,h2,m1,m2,s1,s2, //显示位
k,s; //状态转换标志
uchar code select[]=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;
uchar code table[]=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;
/*****************函数声明***********************/
void keyscan();
void init();
void delay(uchar z);
void display(uchar,uchar,uchar);
void sounde();
/*****************主函数*************************/
void main()
init();
while(1)
while(TR1)
keyscan(); // 扫描函数
while(s==1) // s是状态标志,当s=0时,闹钟取消。s=1时,设定闹钟时间
//(也是通过调时,调分函数);
//s=2时,闹钟工作,时间与设定时刻一致时,闹钟响
// (一分钟后自动关闭,可手动关闭)。再次切换,s=0.
keyscan(); //s状态切换(0-》1-》2-》0)通过外部中断1实现。
display(hour1,minu1,sec1); //闹钟时刻显示
display(hour0,minu0,sec0);//时钟表显示
while(k) /*k是秒表状态(0-》1-》2-》0)通过外部中断0实现。
0秒表关;1秒表从零计时;2秒表停,显示计时时间*/
display(hour,minu,sec); //秒表显示
/*****************初始化函数***********************/
void init()
a=0;
b=0;
k=0;
s=0;
hour0=0;
minu0=0;
sec0=0;
hour=0;
minu=0;
sec=0;
hour1=0;
minu1=0;
sec1=0;
TMOD=0x11; //定时器0,1工作于方式1;赋初值
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
EX0=1; //秒表中断
EX1=1; //闹钟设定中断
ET0=1;
ET1=1;
IT0=1; //边沿触发方式
IT1=1;
PX0=1;
PX1=1;
TR0=0; //初始,秒表不工作
TR1=1; //时钟一开始工作
/*****************定时器0中断*************/
void timer0_int() interrupt 1 //秒表
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
a++;
if(a==2)
a=0;
sec++;
if(sec==100)
sec=0; //毫秒级
minu++;
if(minu==60)
minu=0; //秒
hour++;
if(hour==60) //分
hour=0;
/*************外部中断0中断函数************/
void ex0_int() interrupt 0
k++;
if(k==3)
k=0;
if(k==1)
TR0=~TR0;
if(TR0==1)
hour=0;
minu=0;
sec=0;
if(k==2)
TR0=~TR0;
/*************外部中断1中断函数************/
void ex1_int() interrupt 2
s++;
if(s==3)
s=0;
/*************定时器1中断****************/
void timer1_int() interrupt 3 //控制时钟工作
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(s==2)
if(hour1==hour0 && minu0==minu1)
sounde();
b++;
if(b==20)
b=0;
sec0++;
if(sec0==60)
sec0=0;
minu0++;
if(minu0==60)
minu0=0;
hour0++;
if(hour0==24)
hour0=0;
/*************键盘扫描****************/
void keyscan()
if(s==1)
if(qingling==0)
delay(10);
if(qingling==0)
sec1=0;
minu1=0;
hour1=0;
if(tiaofen==0)
delay(10);
if(tiaofen==0)
minu1++;
if(minu1==60)
minu1=0;
while(!tiaofen);
if(tiaoshi==0)
hour1++;
if(hour1==24)
hour1=0;
while(!tiaoshi);
else //调整时钟时间
if(qingling==0)
delay(10);
if(qingling==0)
sec0=0;
minu0=0;
hour0=0;
if(tiaofen==0)
delay(10);
if(tiaofen==0)
minu0++;
if(minu0==60)
minu0=0;
while(!tiaofen);
if(tiaoshi==0)
hour0++;
if(hour0==24)
hour0=0;
while(!tiaoshi);
/*************显示函数****************/
void display(uchar hour,uchar minu,uchar sec)
h1=hour/10;
h2=hour%10;
m1=minu/10;
m2=minu%10;
s1=sec/10;
s2=sec%10;
P0=0xff;
P2=table[h1];
P0=select[7];
delay(5);
P0=0xff;
P2=table[h2];
P0=select[6];
delay(5);
P0=0xff;
P2=0x40;;
P0=select[5];
delay(5);
P0=0xff;
P2=table[m1];
P0=select[4];
delay(5);
P0=0xff;
P2=table[m2];
P0=select[3];
delay(5);
P0=0xff;
P2=0x40;
P0=select[2];
delay(5);
P0=0xff;
P2=table[s1];
P0=select[1];
delay(5);
P0=0xff;
P2=table[s2];
P0=select[0];
delay(5);
/*************闹钟函数****************/
void sounde()
sounder=~sounder;
/*************延时函数****************/
void delay(uchar z)
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
参考技术A 能不能讲解一下实现过程及功能基于51单片机的反向计时秒表protues仿真设计(源码+仿真+论文)
程序源码参考设计 +QQ214268650
本设计
仿真图proteus 7.8/protues 8.6
程序编译器:keil 4/keil 5
编程语言:C语言
编号S10108_3
功能说明:
该设计为99-0秒反向计时的秒表,能够通过数码管或液晶显示读秒,该系统主要包括单片机最小系统、显示单元、定时计数器设计。
系统要求启动秒表后,从99开始计时,计到0秒停止,中途可以通过按键控制暂停/继续读秒,复位后能够重新从99开始读秒。
以上是关于单片机秒表计时器c语言程序图 需要图和程序的主要内容,如果未能解决你的问题,请参考以下文章
基于51单片机的反向计时秒表protues仿真设计(源码+仿真+论文)
51单片机的精度0.01的秒表protues仿真设计_定时器(仿真+电路图+pcb+源码)