用简单函数实现普中51单片机秒表

该秒表使用最简单的while、for、switch、if等函数的简单组合和38译码器来实现秒表的计时、暂停、存读数据功能(即回看)。该秒表精确到毫秒级,最高纪录时间16min59s999sec,共用到4个外部中断,回看次数可以自行调整

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k1=P3^1; //外部中断
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
uchar DisplayData[8];
uchar a=0;
uchar b=0;
uchar ssec,sec,se,min;
uchar ssec0,sec0,se0,min0;
uchar ssec1,sec1,se1,min1;
uchar ssec2,sec2,se2,min2;
uchar ssec3,sec3,se3,min3;
uchar ssec4,sec4,se4,min4;
uchar ssec5,sec5,se5,min5;
uchar ssec6,sec6,se6,min6;
uchar ssec7,sec7,se7,min7;
uchar ssec8,sec8,se8,min8;
uchar ssec9,sec9,se9,min9;
uchar ssec10,sec10,se10,min10;
uchar ssec11,sec11,se11,min11;
uchar ssec12,sec12,se12,min12;//定义这么多变量是为了存储数据使用
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint z)//延时函数
{while(z--);
}
void display()//数码管函数
{char i;
for(i=0;i<8;i++){switch(i)    {case(0):LSA=1;LSB=1;LSC=1; break;case(1):LSA=0;LSB=1;LSC=1; break;case(2):LSA=1;LSB=0;LSC=1; break;case(3):LSA=0;LSB=0;LSC=1; break;case(4):LSA=1;LSB=1;LSC=0; break;case(5):LSA=0;LSB=1;LSC=0; break; case(6):LSA=1;LSB=0;LSC=0; break; case(7):LSA=0;LSB=0;LSC=0; break; }P0=DisplayData[i];delay(100);     P0=0x00;}
}
void Timer0Init()
{TMOD=0X01;//设置定时器0为工作方式1TH0=0xfc;TL0=0x18;EA=0;//开总中断ET0=1;//开定时器0中断 TR0=1;//启动定时器0
}void fuzhi(uchar min,sec,ssec,se)//给数码管赋值函数
{DisplayData[0]=table[min%10];DisplayData[1]=0x40;DisplayData[2]=table[sec/10];  DisplayData[3]=table[sec%10];DisplayData[4]=0x40;DisplayData[5]=table[ssec/10];DisplayData[6]=table[ssec%10];DisplayData[7]=table[se%10];if(a<=12)//外部中断{if(k3==0)//存储按下K3时的时间{  delay(50000);//消抖,时长自定义,下同(消抖时间过短会重复存储)a++;switch(a)  {case(1):ssec1=ssec;sec1=sec;se1=se;min1=min;break;case(2):ssec2=ssec;sec2=sec;se2=se;min2=min; break;case(3):ssec3=ssec;sec3=sec;se3=se;min3=min; break;case(4):ssec4=ssec;sec4=sec;se4=se;min4=min;break;case(5):ssec5=ssec;sec5=sec;se5=se;min5=min; break;case(6):ssec6=ssec;sec6=sec;se6=se;min6=min; break;           case(7):ssec7=ssec;sec7=sec;se7=se;min7=min;break;case(8):ssec8=ssec;sec8=sec;se8=se;min8=min; break;case(9):ssec9=ssec;sec9=sec;se9=se;min9=min; break;            case(10):ssec10=ssec;sec10=sec;se10=se;min10=min;break;case(11):ssec1=ssec;sec1=sec;se1=se;min1=min; break;case(12):ssec12=ssec;sec12=sec;se12=se;min12=min; break;}        }}else{a=0;}
}
void write()
{if(k4==0)//读取之前存储的数据{    delay(1000);while(1){if(k4==0){delay(50000);b++;    switch(b)   {case(1):ssec0=ssec1;sec0=sec1;se0=se1;min0=min1;P0=0x00;break;case(2):ssec0=ssec2;sec0=sec2;se0=se2;min0=min2;P0=0x00;break;case(3):ssec0=ssec3;sec0=sec3;se0=se3;min0=min3;P0=0x00;break; case(4):ssec0=ssec4;sec0=sec4;se0=se4;min0=min4;P0=0x00;break;case(5):ssec0=ssec5;sec0=sec5;se0=se5;min0=min5;P0=0x00;break; case(6):ssec0=ssec6;sec0=sec6;se0=se6;min0=min6;P0=0x00; break;      case(7):ssec0=ssec7;sec0=sec7;se0=se7;min0=min7; P0=0x00;break;case(8):ssec0=ssec8;sec0=sec8;se0=se8;min0=min8;P0=0x00; break;case(9):ssec0=ssec9;sec0=sec9;se0=se9;min0=min9;P0=0x00; break;case(10):ssec0=ssec10;sec0=sec10;se0=se10;min0=min10;P0=0x00;  break;case(11):ssec0=ssec11;sec0=sec11;se0=se11;min0=min11;P0=0x00; break;case(12):ssec0=ssec12;sec0=sec12;se0=se12;min0=min12;P0=0x00; break;}       }fuzhi(min0,sec0,ssec0,se0);display();      if(b>12){break;b=0;}}       }
}
void kaiguan()
{if(k1==0)//启动与暂停{delay(100);EA=~EA;}if(k2==0)//归零{ssec=0;sec=0;se=0;min=0;    }
}
void dingshi()//读秒函数
{if(se>=10){se=0;ssec++;if(ssec>=100)  {ssec=0;sec++;if(sec>=60){sec=0;min++;if(min>=16){min=0;}} }}
}
void exter0()  interrupt 1
{TH0=0xfc;TL0=0x18;se++;dingshi();
}
void main()//主函数
{   Timer0Init();while(1){fuzhi(min,sec,ssec,se);display();kaiguan();write();}
}

第一次投稿,若有错误,恳请指正。
若有帮助,给个关注。
其他需求,敬请留言。

普中51秒表简单易懂相关推荐

  1. 普中51—单核—A2学习第一天

    普中51-单核-A2学习第一天 于2020年2月12日星期三17:16记,学习第一天的起因是学校即将开始网课,我和舍友也参加了全国大学生电子科技竞赛.学长给我们安排了任务学习模电和单片机,因为刚开始放 ...

  2. 打地鼠java代码流程图_51单片机 普中51 打地鼠游戏 仿真 程序 流程图

    51单片机 普中51 打地鼠游戏 仿真 程序 流程图 51单片机 普中51 打地鼠游戏 仿真 程序 流程图 普中51-单核-A3&A4开发板原理图 用到数码管.LED.矩阵按键 描述: (1) ...

  3. 基于普中51单片机开发板的温控风扇

    自学单片机也不算很久,刚好遇上了这一门的课程设计,查找了好多的资料发现都不算合适,合适的又要收费,那么最后呢才找到了一个有关我使用的开发板的温控风扇程序,也就是普中单片机开发板,该程序来自--黑51论 ...

  4. 普中51仿真器怎么下载操作

    普中51仿真器下载操作说明 大家好,我是爱吃饼干的小白鼠 首先安装普中51仿真器的驱动:(安装时,用管理员身份运行,最好要把 360 等杀毒软件先关掉 成功后再打开) 如果使用的是A2/A3/A4开发 ...

  5. 普中51单片机-步进电机启停、变速控制级速度显示

    实验工具: ①普中51单片机-单核-A3,某宝买的:②28BYJ-48型号步进电机:③液晶数码管. 实现功能 实验一: ①按下独立按键K1,步进电机启动: ②按下K2,实现变速(由Delay(50)变 ...

  6. 普中51单片机学习日记-点亮LED

    普中51单片机中LED小灯所用端口为P2端口,从P2^0到P2^7分别为从左到右八个小灯. 可以使用sbit关键字定义变量led,以此简化端口的输入,并且使程序的可读性增强. 当变量的值设置为0,即端 ...

  7. 普中51仿真器提示错误(连接异常,进入参数设置,检测下设备连接))

    普中51仿真器提示错误(连接异常,进入参数设置,检测下设备连接) 这里提供我遇到普中51仿真器提示错误(连接异常,进入参数设置,检测下设备连接)问题解决法子,如果你也有这个问题,也可以试下. 这里提供 ...

  8. 工业顺序控制--基于普中51单片机模拟

    1.实验目的 掌握工业顺序控制的硬件设计.软件设计.软件编程和调试. 2.实验内容 利用单片机实验箱实现注塑机的顺序控制. 3.实验要求 单片机P1口控制注塑机的6道工序,利用6只发光管的亮与否来模拟 ...

  9. 学习历程--普中51单片机A2--蜂鸣器实验

    今天学习了普中的蜂鸣器部分,将自己的一些学习内容记录一下. 蜂鸣器有无源蜂鸣器和有源蜂鸣器,需要注意的是"源"的意思是"震荡源".是指震荡源.也就是说,有源蜂鸣 ...

最新文章

  1. [笔记]C#基础入门(五)——算法:交换
  2. [SQL] 查找数据库中含有某字段的所有表
  3. 翻译的一篇关于学习编程语言的小文章
  4. 未来已来!医院数字化转型为“看病难”画上“休止符”
  5. 如何安装python3.8.1_如何用源代码安装Python 3.8.1
  6. Kotlin学习笔记 第四章注解
  7. java中通过反射得到StatusBarManager
  8. 使用自制ADempiere 3.6.0 LTS安装软件进行安装(基于Ubuntu Desktop 12.04 LTS)
  9. uniappd的web-view组件无法动态加载本地html文件的解决办法
  10. 详解GBase 8c数据库安全之数据透明加密
  11. 微信小程序扫描二维码或者条码
  12. 正则表达式:邮箱匹配
  13. 智慧农业SaaS系统
  14. 高通8155 GPS HAL层代码移植
  15. 2018CCPC吉林赛区 hdu6555~hdu6566
  16. String和对象的转换
  17. 计算:[(1*2*4+2*4*8+...+n*2n*4n)/(1*3*9+2*6*18+...+n*3n*9n)]^2的值
  18. 1626:Hankson 的趣味题
  19. 让Eclipse可以自动排版
  20. N+1道Vue面试题,快来康康

热门文章

  1. SpringBoot事务配置管理
  2. 服务产品化,或许是中国软件的出路
  3. 解决32位Eclipse和64位Eclipse在64位win7系统上运行问题
  4. JavaScript中查找指定字符串的几种方式
  5. 使用luckysheet实现excel导入导出
  6. 我决定开始一段非凡事业--IOS开发
  7. 内网安全-域横向CobaltStrikeSPNRDP
  8. 171023 逆向-BDCTF(Re)
  9. php 蛋糕一刀均分试题,5个小朋友分一个蛋糕,只准切三刀,该怎样才能平分
  10. python网络编程——套接字名与DNS