普中51秒表简单易懂
用简单函数实现普中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秒表简单易懂相关推荐
- 普中51—单核—A2学习第一天
普中51-单核-A2学习第一天 于2020年2月12日星期三17:16记,学习第一天的起因是学校即将开始网课,我和舍友也参加了全国大学生电子科技竞赛.学长给我们安排了任务学习模电和单片机,因为刚开始放 ...
- 打地鼠java代码流程图_51单片机 普中51 打地鼠游戏 仿真 程序 流程图
51单片机 普中51 打地鼠游戏 仿真 程序 流程图 51单片机 普中51 打地鼠游戏 仿真 程序 流程图 普中51-单核-A3&A4开发板原理图 用到数码管.LED.矩阵按键 描述: (1) ...
- 基于普中51单片机开发板的温控风扇
自学单片机也不算很久,刚好遇上了这一门的课程设计,查找了好多的资料发现都不算合适,合适的又要收费,那么最后呢才找到了一个有关我使用的开发板的温控风扇程序,也就是普中单片机开发板,该程序来自--黑51论 ...
- 普中51仿真器怎么下载操作
普中51仿真器下载操作说明 大家好,我是爱吃饼干的小白鼠 首先安装普中51仿真器的驱动:(安装时,用管理员身份运行,最好要把 360 等杀毒软件先关掉 成功后再打开) 如果使用的是A2/A3/A4开发 ...
- 普中51单片机-步进电机启停、变速控制级速度显示
实验工具: ①普中51单片机-单核-A3,某宝买的:②28BYJ-48型号步进电机:③液晶数码管. 实现功能 实验一: ①按下独立按键K1,步进电机启动: ②按下K2,实现变速(由Delay(50)变 ...
- 普中51单片机学习日记-点亮LED
普中51单片机中LED小灯所用端口为P2端口,从P2^0到P2^7分别为从左到右八个小灯. 可以使用sbit关键字定义变量led,以此简化端口的输入,并且使程序的可读性增强. 当变量的值设置为0,即端 ...
- 普中51仿真器提示错误(连接异常,进入参数设置,检测下设备连接))
普中51仿真器提示错误(连接异常,进入参数设置,检测下设备连接) 这里提供我遇到普中51仿真器提示错误(连接异常,进入参数设置,检测下设备连接)问题解决法子,如果你也有这个问题,也可以试下. 这里提供 ...
- 工业顺序控制--基于普中51单片机模拟
1.实验目的 掌握工业顺序控制的硬件设计.软件设计.软件编程和调试. 2.实验内容 利用单片机实验箱实现注塑机的顺序控制. 3.实验要求 单片机P1口控制注塑机的6道工序,利用6只发光管的亮与否来模拟 ...
- 学习历程--普中51单片机A2--蜂鸣器实验
今天学习了普中的蜂鸣器部分,将自己的一些学习内容记录一下. 蜂鸣器有无源蜂鸣器和有源蜂鸣器,需要注意的是"源"的意思是"震荡源".是指震荡源.也就是说,有源蜂鸣 ...
最新文章
- [笔记]C#基础入门(五)——算法:交换
- [SQL] 查找数据库中含有某字段的所有表
- 翻译的一篇关于学习编程语言的小文章
- 未来已来!医院数字化转型为“看病难”画上“休止符”
- 如何安装python3.8.1_如何用源代码安装Python 3.8.1
- Kotlin学习笔记 第四章注解
- java中通过反射得到StatusBarManager
- 使用自制ADempiere 3.6.0 LTS安装软件进行安装(基于Ubuntu Desktop 12.04 LTS)
- uniappd的web-view组件无法动态加载本地html文件的解决办法
- 详解GBase 8c数据库安全之数据透明加密
- 微信小程序扫描二维码或者条码
- 正则表达式:邮箱匹配
- 智慧农业SaaS系统
- 高通8155 GPS HAL层代码移植
- 2018CCPC吉林赛区 hdu6555~hdu6566
- String和对象的转换
- 计算:[(1*2*4+2*4*8+...+n*2n*4n)/(1*3*9+2*6*18+...+n*3n*9n)]^2的值
- 1626:Hankson 的趣味题
- 让Eclipse可以自动排版
- N+1道Vue面试题,快来康康