秒表计时器

更新时间:2024-07-12 13:01:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

/*1.按下启动键,秒表计时;按下停止键,秒表暂停计时; 2.再按启动键,秒表接着计时;再按下停止键,秒表暂停计时; 3.再按下停止键,秒表清零;

4.清零后能够回显两次记录的秒数; 5.完成整体设计,交出完整的课设报告。 */

#include

#include #include #include

#define uchar unsigned char #define uint unsigned int

#define shuju P0 //LCD1602 P0输出显示数据 sbit wela=P2^7; //数码管位选锁存端 sbit dula=P2^6; //数码管段选锁存端 sbit key1 =P3^2; //启动命令 sbit key2 =P3^3; //停止命令 sbit key3 =P3^4; //清除键 sbit key4 =P3^5; // 空车

//********定义变量***************************** uchar flag; //标志位 uchar flag1; //标志位 uchar flag2; //标志位

uchar table2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; uchar table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位码 uchar tt; // 计时标量每50ms加1 uchar a; // 秒个位 uchar b; // 秒十位 uchar c; // 分个位 uchar d; // 分十位 uchar num1; uchar num2; uchar num3; uchar num4; uchar num5; uchar num6; uchar num7; uchar num8;

//**********延时函数*************** void delayus(uchar t) {

while(--t); }

//**********延时函数***************

//码表 void delay(uchar t) //大致延时1mS { while(t--) {

delayus(235); delayus(235); } }

//*******秒表计时******* void miaobiao(void) { if(tt==2) // 10ms到 { tt=0; // 清零 a++; if(a==10) { a=0; b++; if(b==10) { b=0; c++; if(c==10) { c=0; d++; } } } } }

void display(void) { if(flag1==1) { //flag1=0; wela=1; shuju=table1[0]; wela=0; dula=1; shuju=table2[num1]; dula=0; delayus(200);

wela=1;

shuju=table1[1]; wela=0; dula=1;

shuju=table2[num2]; dula=0;

delayus(200); wela=1;

shuju=table1[2]; wela=0; dula=1; shuju=0x40; dula=0;

delayus(200); wela=1;

shuju=table1[3]; wela=0; dula=1;

shuju=table2[num3]; dula=0;

delayus(200); wela=1;

shuju=table1[4]; wela=0; dula=1;

shuju=table2[num4]; dula=0;

delayus(200); }

else if(flag1==2) {

//flag2=0; wela=1; shuju=table1[0]; wela=0; dula=1;

shuju=table2[num5]; dula=0;

delayus(200);

wela=1;

shuju=table1[1]; wela=0; dula=1;

shuju=table2[num6]; dula=0;

delayus(200); wela=1;

shuju=table1[2]; wela=0; dula=1; shuju=0x40; dula=0;

delayus(200); wela=1;

shuju=table1[3]; wela=0; dula=1;

shuju=table2[num7]; dula=0;

delayus(200); wela=1;

shuju=table1[4]; wela=0; dula=1;

shuju=table2[num8]; dula=0;

delayus(200); } else { wela=1; shuju=table1[0]; wela=0; dula=1; shuju=table2[a]; dula=0; delayus(200); wela=1; shuju=table1[1];

wela=0; dula=1; shuju=table2[b]; dula=0; delayus(200); wela=1; shuju=table1[2]; wela=0; dula=1; shuju=0x40; dula=0; delayus(200); wela=1; shuju=table1[3]; wela=0; dula=1; shuju=table2[c]; dula=0; delayus(200); wela=1; shuju=table1[4]; wela=0; dula=1; shuju=table2[d]; dula=0; delayus(200); } }

//*******定时器初始化******* void Init_Timer0(void) {

TMOD |= 0x01; //使用模式1,16位定时器, TH0=(65535-5000)/256; TL0=(65535-5000)%6; EA=1; //总中断打开 ET0=1; //定时器中断打开 //TR0=1; //定时器开关打开 }

//*******独立按键检测********************** void key(void) {

if(key1==0) {

delay(15);

if(key1==0) //按键消抖 { TR0=1; //打开定时器 //flag=0; //标志位设置 while(key1==0); } } if(key2==0) {

delay(15);

if(key2==0) //按键消抖 { TR0=0; //打开定时器 flag++; //flag=0; //标志位设置 while(key2==0); if(flag==1) { num1=a; num2=b; num3=c; num4=d; } if(flag==2) { num5=a; num6=b; num7=c; num8=d; } if(flag>=3) { flag=0; a=0; b=0; c=0; d=0; } } }

if(key3==0)

{

delay(15);

if(key3==0) //按键消抖 { TR0=0; //打开定时器 flag1=1; //display1(); //flag=0; //标志位设置 while(key3==0); } } if(key4==0) {

delay(15);

if(key4==0) //按键消抖 { TR0=0; //打开定时器 flag1=2; while(key4==0); } } }

//*************主程序************************** void main() { a=0; //各参数初始化 b=0; c=0; d=0; flag=0; flag1=0; flag2=0; dula=0; wela=0; Init_Timer0(); while(1) { key(); miaobiao(); display();

} }

//******************定时器中断**************** void time0() interrupt 1 {

TH0=(65535-5000)/256; TL0=(65535-5000)%6; tt++; }

本文来源:https://www.bwwdw.com/article/iyb.html

Top