微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机键盘输入编程

单片机键盘输入编程

时间:09-29 来源:互联网 点击:

:{y[left]=up;if(P1_3==0)o_f1=!o_f1;}break;

35:case 3:{z[left]=up;if(P1_3==0)o_f2=!o_f2;}break;

36:default:break;

37:} }

38:else {

39:switch(set)

40:{case 0:break;

41:case 1:up=x[left];break;

42:case 2:{up=y[left];if(P1_3==0)o_f1=!o_f1;}break;

43:case 3:{up=z[left];if(P1_3==0)o_f2=!o_f2;}break;

44:default:break;}

45 :}}

46:}}

47:P1=i;P3=j;

48:}

序号1(程序解释,以下同):声明定时1中断函数。

序号2:定时1中断函数开始。

序号3:定义i、j为无符号字符型局部变量。将当时的P1口、P3口状态送i、j暂存。

序号4、5:定时器T1重新载入10mS初值。

序号6:如变量m等于1,则变量n递增。说明:m、n为整个程序开始时定义的无符号字符型全局变量。

序号7:如变量n大于等于30,则m、n清零。

序号8:P3.7置0,准备读取按键输入。

序号9:P1口置全1,准备读取按键输入。

序号10:如果P1口不等于全1,说明4个按键中有键按下。

序号11:进入if(P1!=0xff)语句范围。

序号12:如果n等于0,进入if(n==0)语句,m置1。

序号13:如果n等于1,进入if(n==1)语句,同时进行下面的具体判断按键语句。作用效果为:开始时m、n均赋0,一旦有键按下,第一次中断产生时m赋1;第二次中断产生时n递增。当n等于1时(第二次中断产生)进入下面的具体判断按键语句。若持续按下键,则第三次中断产生~第三十一次中断产生时,程序不进入具体的判断按键语句过程(因这时n不等于1)。由于中断每10mS产生一次,这样可实现每0.31秒(31x10=0.31秒)进行一次加法或移位的操作,与人眼的视觉特性相吻合。

序号14:进入具体判断按键语句范围。

序号15:如果P1.0等于0(即电路中的set键按下),变量set递增,变量left清0。说明:set、left是为了判断模式设定及左移而在整个程序开始时定义的无符号字符型全局变量。

序号16:如果set大于等于4,则set清0。说明:set值只能在0~3间变化,只有4种工作模式(走时及输出控制模式、走时调整模式、定时1调整模式、定时2调整模式)。

序号17:在set等于1时,向RAM区标志变量flag写入55H。说明:flag是在整个程序开始时定义的无符号字符型全局变量,用作判断RAM区是否受干扰的依据。

序号18:如果P1.1等于0(即电路中的left键按下),变量left递增。

序号19:如果left大于等于4,则left清0。说明:left值只能在0~3间变化,LED数码管只有4位显示。

序号20:如果P1.2等于0(即电路中的up键按下),进入if(P1_2==0)语句,变量up递增。说明:up是为了判断数值增量而在整个程序开始时定义的无符号字符型全局变量。

序号21:随即进入switch(left)开关语句。

序号22:switch(left)开关语句开始。

序号23:left值为0时,如果up大于等于10,则up清0。随即退出。说明:电子钟的个位可在0~9之间调整。

序号24:left值为1时,如果up大于等于6,则up清0。随即退出。说明:电子钟的十位可在0~5之间调整。

序号25:left值为2时,如果up大于等于10,则up清0。随即退出。说明:电子钟的百位可在0~9之间调整。

序号26:left值为3时,如果up大于等于3,则up清0。随即退出。说明:电子钟的千位可在0~2之间调整。

序号27:若left为其它值,也退出。

序号28:switch(left)开关语句结束。

序号29:if(P1_2==0)语句结束。

序号30:如果P1.2等于0(即电路中的up键按下时),进入if(P1_2==0)语句,同时进入switch(set)开关语句。

序号31:switch(set)开关语句开始。

序号32:set值为0时,退出。

序号33:set值为1时,将此时up值送入X数组的第left位。随即退出。说明:X数组是显示走时缓存区。

序号34:set值为2时,将此时up值送入Y数组的第left位。若此时P1.3等于0(即电路中的on/off键按下),则定时1启停标志位o_f1取反(启动/关闭)。随即退出。说明:Y数组是定时1记忆缓存区。o_f1是为了判断定时1启动/关闭而在整个程序开始时定义的位标志。

序号35:set值为3时,将此时up值送入Z数组的第left位。若此时P1.3等于0(即电路中的on/off键按下),则定时2启停标志位o_f2取反(启动/关闭)。随即退出。说明:Z数组是定时2记忆缓存区。o_f2是为了判断定时2启动/关闭而在整个程序开始时定义的位标志。

序号36:若set为其它值,也退出。

序号37:switch(set)开关语句结束。if(P1_2==0)语句结束。

序号38:else语句开始。

序号39:又进入switch(set)开关语句。说明:上一个switch(set)开关语句是将按键产生的up值送入X、Y、Z数组存放

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top