单片机原理实验,查询式键盘,c语言源程序

 我来答
若以下回答无法解决问题,邀请你更新回答
天天上课觉觉AN
2016-11-01 · TA获得超过232个赞
知道小有建树答主
回答量:553
采纳率:0%
帮助的人:218万
展开全部
这个可以吗?肯定要改下/*****************************************************///实验六 数码管电子钟//by阿朱893437703@qq.com转载请注明来源//通电后,数码管电子钟一直处于秒表状态,蜂鸣5秒响一次,要求使用T0,T1中断//与一般的应用不同,本实验者悔在数码管前面未使用译码器//思路:定时器中断的使用://1、初始化//注意:P0口的P0.4接蜂鸣/*****************************************************//*****************************************************///数码管数据p2口,高电平有效//大嫌游数码管控制p0.0~P0.3,低电平有效//P0.4输出,接蜂鸣器//P1输入,接矩阵键盘矩阵键盘定义:P1.0-P1.3为列线,P1.4-P1.7为行线/*****************************************************//*****************************************************///本节知识要点://中断/*****************************************************/#include//宏定义#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlongint/******************************************************************************TH0和TL0是计数器0的高8位和低8位计数器,计算法:TL0=(65536-C)%256;**TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器**工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时**间为1ms*65536=65.536ms*******************************************************************************/#defineV_TMOD0x01//工作方式1#defineV_TH00x3C//50ms延时常数C=50000//0XDC#defineV_TL00xB0//50ms延时常数C=50000/0X58//#defineV_TH10xFF//5ms延时常数C=5000//0XDC//#defineV_TL10xFB//5ms延时常数C=5000/0X58#defineV_TH10xDC//1ms延时常数C=1000//0XDC#defineV_TL10x58//1ms延时常数C=1000/0X58#defineMAXFUN6//功能切换,表示最多的功能状态,sbitk10=P1^0;//sbitBEEP=P3^7;//蜂鸣器驱动线----------------请修改为sbitBEEP=P0^4;ucharbee;//蜂鸣器01开关ucharkey;//键顺序吗ucharfun=10;//功能状态,0){refresh++;bee=!bee;if(refresh>=30)refresh=0;}}/*****************************************************///文滚销字输出/*****************************************************/voidtextout(){//P0=0xff;//先关闭所有数码管P2=dis_buf[text_index];//传入数字的码bee=bee=4)text_index=0;}/*****************************************************///键扫描子程序/*****************************************************/voidkeyscan(void){uchartemp;key=-1;//不按键P1=0x0F;//低四位输入delay0(12);temp=P1;//读P1口temp=temp&0x0F;temp=~(temp|0xF0);if(temp==1)key=0;elseif(temp==2)key=1;elseif(temp==4)key=2;elseif(temp==8)key=3;elsekey=16;P1=0xF0;//高四位输入delay0(12);temp=P1;//读P1口temp=temp&0xF0;temp=~((temp>>4)|0xF0);if(temp==1)key=key+0;elseif(temp==2)key=key+4;elseif(temp==4)key=key+8;elseif(temp==8)key=key+12;elsekey=16;if(key!=-1)fun=key;//key=0;//dis_buf=text_code[key];//查表得键值}/*****************************************************///判断键是否按下/*****************************************************/intkeydown(void){P1=0xF0;if(P1!=0xF0){keyscan();//delay0(250);return1;////beep();//while(P1!=0xF0);//等待键释放}return0;}/*****************************************************///设置显示缓存/*****************************************************/voidsettext(uchartext0,uchartext1,uchartext2,uchartext3){dis_buf[0]=text_code[text0];dis_buf[1]=text_code[text1];dis_buf[2]=text_code[text2];dis_buf[3]=text_code[text3];}/*****************************************************///fun10//秒表mm:ss/*****************************************************/voidfun10(){it0++;if(it0==20)//1s{it0=0;sec++;if(sec==60){sec=0;min++;if(min==60){min=0;}}refresh=1;dis_buf[1]=text_code[min%10];dis_buf[0]=text_code[min/10];dis_buf[3]=text_code[sec%10];dis_buf[2]=text_code[sec/10];}}/*****************************************************///fun11//时钟hh:mm/*****************************************************/voidfun11(){it0++;if(it0==20)//1s{it0=0;sec++;if(sec==60){sec=0;min++;if(min==60){min=0;hour++;if(hour==12){hour=0;}//dis_buf[1]=text_code[hour%10];//dis_buf[0]=text_code[hour/10];}refresh=1;}dis_buf[1]=text_code[hour%10];dis_buf[0]=text_code[hour/10];dis_buf[3]=text_code[min%10];dis_buf[2]=text_code[min/10];}}/*****************************************************///fun12//倒计时/*****************************************************/voidfun12(){it0++;if(it0==20)//0.1s{it0=0;sec--;//secmust>=1if(sec==0){sec=60;min--;//dis_buf[1]=text_code[min%10];//dis_buf[0]=text_code[min/10];if(min==0){min=60;}}refresh=1;dis_buf[1]=text_code[min%10];dis_buf[0]=text_code[min/10];dis_buf[3]=text_code[sec%10];dis_buf[2]=text_code[sec/10];}}/*****************************************************///fun13//设置时间:hh:mm/*****************************************************/voidfun13(){onsetup=1;sec=0;min=0;hour=0;dis_buf[1]=text_code[min%10];dis_buf[0]=text_code[min/10];dis_buf[3]=text_code[sec%10];dis_buf[2]=text_code[sec/10];}/*****************************************************///fun3//设置时间:hh:mm/*****************************************************/voidfun130(){if(keydown1!=keydown0){keydown0=keydown1;if(keydown1==0)return;//按键弹起if(onsetup==1)hour=key*10;elseif(onsetup==2)hour+=key;elseif(onsetup==3)min=key*10;elseif(onsetup==4)min+=key;onsetup++;dis_buf[1]=text_code[hour%10];dis_buf[0]=text_code[hour/10];dis_buf[3]=text_code[min%10];dis_buf[2]=text_code[min/10];}}/*****************************************************///fun14//设置/*****************************************************/voidfun14(){sec=0;min=0;hour=0;}/*****************************************************///定时器0中断服务程序,用于数码管的动态扫描//T0定时器,50ms激发一次,间隔1秒执行一次输出(需要20次)/*****************************************************/voidtimer0()interrupt1{//TR1=0;TH0=V_TH0;//1ms延时常数TL0=V_TL0;//频率调节//TH1=PWM;//TR1=1;keydown1=keydown();//if(keydown1!=keydown0){if(fun7;j--){delay0(j);BEEP=!BEEP;//BEEP取反}}BEEP=1;//关闭蜂鸣器}*/
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式