栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

基于单片机的简易秒表(C语言程序独立按键检测示例)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于单片机的简易秒表(C语言程序独立按键检测示例)

今天为大家带来一个基于单片机的简易秒表,该秒表拥有两个功能键,一个是控制秒表启动计时和暂停功效的(开始/暂停)键,1.当第一次按下该键,秒表开始计时。2.当第二次按下功能键时,秒表暂停工作。第二个按键是(清除)键,用来清除之前的计时数据,使秒表计数器归零。该秒表的精确度是0.1秒。

#include
#define uint unsigned int
#define uchar unsigned char
sbit le1=P2^0;//用来控制第一个锁存器
sbit le2=P2^4;//用来控制第二个锁存器
sbit we3=P2^5;//用来控制第三个数码管的公共端
sbit we1=P2^6;//用来控制第一个数码管的公共端
sbit we2=P2^7;//用来控制第二个数码管的公共端
sbit key1=P3^0;//用来检测 开始/暂停 按键
sbit key2=P3^1;//用来检测 清楚 按键
uint num,num1,shi,ge,xiao;
uchar code tabl[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//延时函数
void delayms(uint xms){
uint i,j;
	for(i=xms;i>0;i--)
		for(j=110;j>0;j--)
			;
			}
			
	//按键扫描函数		
void keyscan(){

	if(key1==0){  //开始/暂停键扫描
		delayms(10);
		if(key1==0){
			TR0=~TR0;
			while(!key1);
			}
		}
		if(key2==0){  //清除键扫描
delayms(10);
	if(key2==0){
		num=0;
		TR0=0;
		while(!key2);
		}
	}
}
void display(uint  num2){	//显示函数
shi=num2/100;//获取秒表十位显示数字
ge=num2%100/10;//获取秒表各位显示数字
xiao=num2%100%10;//获取秒表十分位的数字。

we1=0;//把第一个数码管公共端接低电平 (打开)
le1=1;//打开第一个锁存器
P0=tabl[shi];//向第一个锁存器发送秒表要显示的十位数字
delayms(2);//延时2ms
le1=0;//关闭锁存器
P0=0xff;//消影
we1=1;//把把第一个数码管公共端接高电平(关闭)

we2=0;
le1=1;
P0=tabl[ge];
delayms(2);
le1=0;
P0=0xff;
we2=1;

we3=0;
le2=1;
P0=tabl[xiao];
delayms(2);
le2=0;
P0=0xff;
we3=1;
		}
		
void main(){
	TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
while(1){
 keyscan();
 if(num==600)num=0;//当num 计数满600,表示时间增加六十秒
 display(num);
 }
 }
 void T0_time()interrupt 1//中断函数(用来产生时间)
 {
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 num1++;
 if(num1==2){//当num1计数满2,表示时间增加0.1秒
	 num1=0;
	 num++;
		}
	}

Protues仿真演示截图

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/443711.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号