单片机秒表计时器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+源码)

51单片机的4位数码管做简易秒表C语言程序

用定时器实现10s秒表的计时功能,精确到小数点后一位,即能够有0.1s显示,有开始,暂停,清零的功能(C语

单片机定时器秒表不跳

单片机C语言定时器如何调用