资源描述:
《bascom-8051 动态数码管显示及矩阵键盘处理程序例子》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、‘动态数码管显示与矩阵键盘处理程序例子‘编译器:BASCOM-8051‘动态数码管段接P0口‘静态数码管段接P1口‘矩阵键盘接P3口‘3线-8线译码器:A=P2.2,B=P2.3,C=P2.4‘程序运行时,按5号键开始计数,其他键停止DimHAsInteger‘矩阵键盘行值DimLAsInteger‘矩阵键盘列值DimKAsInteger‘矩阵键盘键值DimIAsInteger‘循环变量DimA(8)AsInteger‘8位数码存放数组DimXAsInteger‘进位和消隐标记DimWAsInteger
2、‘位码值K=0‘初始无按键值X=0‘初始无进位ForI=1To8A(i)=0'各位数赋初值NextDoA1:‘***累加及处理*************IfK=4Then'如果按了第5个键,进行累加运算A(1)=A(1)+1‘个位加1IfA(1)=10Then‘是否等于10A(1)=0‘等于10,个位置0X=1‘产生进位ElseX=0‘不等于10,无进位EndIfEndIf‘***进位处理*************IfX=1Then‘如果有进位,则进行进位处理ForI=2To8‘从十位开始进位处理A(i
3、)=A(i)+X‘该位数加进位IfA(i)=10Then‘是否等于10A(i)=0‘等于10,个位置0X=1‘产生进位ElseX=0‘不等于10,无进位ExitFor‘退出进位处理EndIfNextEndIf‘***动态显示数值*********‘A=P2.2‘B=P2.3‘C=P2.4‘位位值二进制值‘0000000000‘1400000100‘2800001000‘31200001100‘41600010000‘52000010100‘62400011000‘72800011100‘位值=位×4X=
4、0‘消隐无效0标记ForI=8To1Step-1‘从高位依次取各位数值IfA(i)=0Then‘如果该位数等于0IfX=1Then‘如果消隐标记不等于0,显示该位数W=I-1‘计算显示位的位选值W=W*4‘计算显示位的位选值W=NotW‘转换为负逻辑值X=1‘置消隐标记为1P0=Lookup(a(i),Seg_datb)‘输出该位数对应的段码P2=W‘输出显示的位码EndIfElse‘不为0,显示该位数Ww=I-1‘计算显示位的位选值Ww=Ww*4‘计算显示位的位选值Ww=NotWw‘转换为负逻辑值X=
5、1‘置消隐标记为1P0=Lookup(a(i),Seg_datb)‘输出该位数对应的段码P2=Ww‘输出显示的位码EndIfWaitms1NextX=0‘Waitms1‘***键盘查询************P3=&B00001111‘置列高平L=9IfP3.0=0ThenL=3‘第四列有键按下IfP3.1=0ThenL=2‘第三列有键按下IfP3.2=0ThenL=1‘第二列有键按下IfP3.3=0ThenL=0‘第一列有键按下IfL=9ThenGotoA1‘未按健或有抖动,不计算键值返回P3=&B1
6、1110000‘置行高平H=9IfP3.4=0ThenH=3‘第四行有键按下IfP3.5=0ThenH=2‘第三行有键按下IfP3.6=0ThenH=1‘第二行有键按下IfP3.7=0ThenH=0‘第一行有键按下IfH=9ThenGotoA1‘未按健或有抖动,不计算键值返回‘***计算键值*****K=H*4‘4×4键盘K=K+L‘BASCOM-8051不能在同一行上多项计算,所以分行计算‘***静态数码管显示键值***P1=Lookup(k,Seg_data)LoopEndSeg_data:‘负逻辑
7、的段码表Data&B11000000,&B11111001,&B10100100,&B10110000,&B10011001,&B10010010,&B10000010,&B11111000Data&B10000000,&B10010000,&B10001000,&B10000011,&B11000110,&B10100001,&B10000110,&B10001110Seg_datb:‘正逻辑的段码表Data&B00111111,&B00000110,&B01011011,&B01001111,&B0
8、1100110,&B01101101,&B01111101,&B00000111,&B01111111,&B01101111,&B01000000