键盘控制数码管显示与流水灯

合集下载

键盘控制LED灯数码管

键盘控制LED灯数码管

代码编写
总结词
代码编写是实现键盘控制LED灯数码管功能的核心环节,需要遵循一定的编程规范和逻 辑。
详细描述
在编写代码时,需要遵循良好的编程规范,如变量命名规范、注释清晰等,以提高代码 的可读性和可维护性。同时,需要确保代码逻辑正确,能够实现预期的功能。在键盘控 制LED灯数码管的实现中,需要编写代码以读取键盘输入,并根据输入控制LED灯数码
•·
• 数码管损坏:可能是数 码管本身损坏,需要更 换新的数码管。 • 程序错误:可能是程序 中存在错误,导致数码 管显示异常,需要检查 程序代码并修正错误。
• 连接问题:检查数码管 的连接线是否牢固,确 保连接线没有短路或断 路。
按键无响应
•·
• 按键损坏:可能是按键本身损 坏,需要更换新的按键。
管的显示。
代码测试
总结词
代码测试是确保键盘控制LED灯数码管功能正常的重要步骤,通过测试可以发现和修复潜在的错误。
详细描述
在完成代码编写后,需要进行充分的测试,以验证功能的正确性和稳定性。测试过程中应涵盖各种可 能的输入情况,包括正常输入和异常输入。通过测试可以发现潜在的错误并及时修复,从而提高整个 项目的质量。
输入。
硬件组装
将各元件按照设计好 的电路图进行连接。
将微控制器与电源连 接,为微控制器供电。
检查连接是否正确, 确保没有任何短路或 断路。
03
软件编程
编程语言选择
总结词
编程语言选择是键盘控制LED灯数码管的关键步骤,需要根据项目需求和开发者技能选择合适的编程语言。
详细描述
在实现键盘控制LED灯数码管的功能时,有多种编程语言可供选择,如C、C、Python等。这些语言各有优缺点, 需要根据项目需求和开发者的编程技能进行选择。例如,C语言具有高效、可控性强的优点,适用于对性能要求 较高的场合;Python则易于学习、语法简洁,适合初学者和快速开发。

任务四键控流水灯和数码管显示优秀课件

任务四键控流水灯和数码管显示优秀课件

0,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x8C,0xFF,0x89};//共
阳字型表数组
unsigned r=1; //位输出口初值,选中最左位LED
void delay1 (unsigned int); //延时1ms子函数原ed chaar i=0,a; //定义变量i —显示缓冲区数组元素
main()
{
while (1)
display( );
}
display( ) // LED动态扫描显示子函数
{ r=1; //1位选通,要根据数码管类型和硬件电路决
定,若0选通应该为r=0xfe;
i=0;
while (r!=0x40) // 6个数码管没全扫完,继续扫描
{ P3=r;
//选通某位
a=dt[i]; //显示缓冲区去该位要显示的内容
7 8 9 ABC D EF 0x8C,0x89, 0xFF,0x91 };
(显示: P H 熄灭 Y )
Proteus演示——硬件图
练习: 1、画出单片机控制6共阳LED数码管显示的电 路图1,P0和P3口分别为字型口和位选口。 2、用主子函数结构调试6管LED动态扫描程序 3、在图1的基础上,将其改为6位共阴数码管, P2和P3分别为位选和字型口。编程调试。
P0=TAB_Font[a];//查字型表向字型口输出字型
delay1 (1); //延时1ms
r<<=1; r|=1; //移位选中下一数码管,指针修正
j++;
}
P0=0x00; // 6个数码管没全完,输出熄灭字型。
}
/*延时程序*/ void delay1 (unsigned int ms) {

流水灯、数码管、矩阵键盘

流水灯、数码管、矩阵键盘

练习 数码管动态扫描
矩阵键盘
矩阵键盘程序练习
3.23培训课程
LED流水灯
数码管 矩阵键盘
发光二极管(LED)
发光二级管点亮电流一般在3mA-10mA,
红色发光二级管的导通压降约为1.8V 限流电阻阻值=(5V-1.8V)/3mA≈1kΩ 过高的电流会使LED烧毁,过低则会造成 LED亮度不足 不同颜色的LED导通压降略有不同
实 验 板 流 水 灯 电 路
流水灯程序
方法1
方法2
数码管
数码管显示电路
74HC573 锁存器
•练习 在第一位数码管上显示一节讲述单个数码管显示,实际使用中单个数码
管往往不能满足要求,这就需要多个数码管组合使 用,单个数码管一般用静态显示,占用IO口线较多, 如果使用普通的静态显示,单片机的IO口是不够用 的。所以就需要使用动态扫描。我们已经可以通过 程序让任意一位数码管显示任意一种字符,这样我 们可以以时间为轴,循环显示每个数码管需要的数 值,当循环显示的时间比较小时,眼睛就不能分辨 出闪烁,而是看到一个静态的数值显示,以后学习 的使用数码管显示的部分都是基于动态扫描原理的。

如何实现键盘自由控制二极管流水灯

如何实现键盘自由控制二极管流水灯

如何实现键盘自由控制二极管流水灯#include//流水灯从上到下点亮然后熄灭; 再从下到上点亮然后熄灭sbit Key1=P2;//启动停止定时器T0sbit Key2=P2;//停止定时器T0, 通过键盘实现流水灯从上到下点亮然后熄灭sbit Key3=P2 ; //停止定时器T0, 通过键盘实现流水灯从下到上点亮然后熄灭unsigned char t=0;unsigned char i=0;void Delay(unsigned int i) //延时{ unsigned char j; for( ; i>0; i--) for(j=110; j>0; j--);}void LED_UP() // 二极管向上逐渐点亮{ unsigned char n; P0=0xff; for(n=1; n>1; Delay(1000); } P0=0xff; }void LED_Down()// 二极管向下逐渐点亮{ unsigned char n; P0=0xff; for(n=1; n<=8; n++) { P0=P0<<1; Delay(1000); } P0=0xff; }void Keycan() // 检测键盘是否被按下{ if(Key1==0) //启动停止定时器T0 { Delay(10); if(Key1==0) { TR0=~TR0; } while(!Key1); } if(TR0==0) //定时器T0 停止, Key2, Key3 键被按下才有作用{if(Key2==0) //{ Delay(10); if(Key2==0) { LED_UP(); // 二极管向上逐渐点亮} while(!Key2);}if(Key3==0) // { Delay(10); if(Key3==0) { LED_Down(); // 二极管向下逐渐点亮} while(!Key3);} } //end if(TR0==0)} void main(){ TMOD=0x01; // EA=1; // ET0=1; TR0=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; while(1) { Keycan(); if(t==20) { t=0; LED_UP(); LED_Down(); } }}void TimerLED() interrupt 1 using 1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; t++;}tips:感谢大家的阅读,本文由我司收集整编。

综合实验一——按键控制流水灯实验(查询方式)

综合实验一——按键控制流水灯实验(查询方式)

北京科技大学微型计算机原理实验报告学院:____自动化学院________________专业、年级:_自动化1101_ ______________ 姓名:__廖文骏_ ________________学号:_ 20111002124 ____________ 指导教师:___ _____王粉花____________2013年12 月综合实验一按键控制流水灯实验(查询方式)实验学时:2学时一、实验目的1.掌握ATmega16 I/O口操作相关寄存器2.掌握CodeVision AVR软件的使用3. 复习C语言,总结单片机C语言的特点二、实验内容1. 设计一个简单控制程序,功能是8个LED逐一循环发光0.5s,构成“流水灯”。

2. 用两个按键K1和K2控制流水灯(中断方式):(1)当按下K1时,流水灯从左向右流动;(2)当按下K2时,流水灯从右向左流动。

三、实验所用仪表及设备硬件:PC机一台、AVR_StudyV1.1实验板软件:CodeVision AVR集成开发软件、SLISP下载软件四、实验原理ATmega16芯片有PORTA、PORTB、PORTC、PORTD(简称PA、PB、PC、PD)4组8位,共32路通用I/O接口,分别对应于芯片上32根I/O引脚。

所有这些I/O口都是双(有的为3)功能复用的。

其中第一功能均作为数字通用I/O接口使用,而复用功能则分别用于中断、时钟/计数器、USRAT、I2C和SPI串行通信、模拟比较、捕捉等应用。

这些I/O口同外围电路的有机组合,构成各式各样的单片机嵌入式系统的前向、后向通道接口,人机交互接口和数据通信接口,形成和实现了千变万化的应用。

每组I/O口配备三个8位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x=A\B\C\D)。

I/O口的工作方式和表现特征由这3个I/O口寄存器控制。

AVR通用I/O端口的引脚配置情况:I/O口引脚配置表表中的PUD为寄存器SFIOR中的一位,它的作用相当AVR全部I/O口内部上拉电阻的总开关。

键盘可控流水灯资料

键盘可控流水灯资料

;************************************************** ; 平凡单片机工作室;作者:周坚;功能描述:;P3.2:开始,按此键则灯开始流动(由上而下);P3.3:停止,按此键则停止流动,所有灯为暗;P3.4:上,按此键则灯由上向下流动;P3.5:下,按此键则灯由下向上流动;本例可用TOP51-2005/TOPA V-2008单片机开发平台验证;**************************************************UpDown EQU 00H ;上下行标志StartEnd EQU 01H ;起动及停止标志LAMPCODE EQU 21H ;存放流动的数据代码ORG 0000HAJMP MAINORG 30HMAIN:MOV SP,#5FHMOV P1,#0FFHCLR UpDown ;启动时处于向上的状态CLR StartEnd ;启动时处于停止状态MOV LAMPCODE,#0FEH ;单灯流动的代码LOOP:ACALL KEY ;调用键盘程序JNB F0,LNEXT ;如果无键按下,则继续ACALL KEYPROC ;否则调用键盘处理程序LNEXT:ACALL LAMP ;调用灯显示程序AJMP LOOP ;反复循环,主程序到此结束;---------------------------------------DELAY:MOV R7,#10D1: MOV R6,#100DJNZ R6,$DJNZ R7,D1RET;---------延时程序,键盘处理中调用KEYPROC:MOV A,B ;从B寄存器中获取键值JB ACC.2,KeyStart ;分析键的代码,某位被按下,则该位为1 JB ACC.3,KeyOverJB ACC.4,KeyUpJB ACC.5,KeyDownAJMP KEY_RETKeyStart:SETB StartEnd ;第一个键按下后的处理AJMP KEY_RETKeyOver:CLR StartEnd ;第二个键按下后的处理AJMP KEY_RETKeyUp:SETB UpDown ;第三个键按下后的处理AJMP KEY_RETKeyDown:CLR UpDown ;第四个键按下后的处理KEY_RET:RETKEY:CLR F0 ;清F0,表示无键按下。

按键控制流水灯系统

按键控制流水灯系统

按键控制流水灯系统设计摘要本设计旨在于通过所学知识,设计一个简单的按键控制流水灯系统,满足一些基本控制功能。

本设计选用80C51芯片作为核心硬件,组合74LS138译码芯片,4×4键盘,74LS273锁存芯片以及其他必要元器件实现对8个发光二极管和2个数码管显示屏的功能控制。

控制过程中用到了51单片机的定时/计数器和中断技术。

本次设计旨在于在理论学习单片机的基础上,通过实际系统的搭建,提高对所学知识的实际应用能力。

设计中,我们主要做了方案设计,电路搭建,程序编写,控制仿真,报告撰写等一系列工作。

方案设计说明设计要求:(1)利用按键控制流水灯的显示。

(2)利用3×3或者4×4键盘,控制数码管的显示。

(3)利用到定时/计数器。

(4)利用到中断技术。

设计功能:(1)按键0—7键为普通亮灭控制键,对应8个发光二极管,每个按键按一下,对应的灯亮,再按一次,对应的灯熄灭。

(2)按键8,12,13,14号键为功能控制键。

1)8键:按一下,8个灯逐个点亮,熄灭,循环左移三次。

2)12键:按一下,灯全部点亮,闪烁20次,返回原来状态。

3)13键:按一下,从左至右,每次点亮一个灯并保持,至灯全部点亮,再逐个熄灭。

4)14键:左右两侧灯逐对向中间点亮,熄灭,当灯对相遇后,向相反方向进行,循环两次返回。

(3)数码管显示为两位,一号为按键显示(显示被按下的键号),二号为功能号显示(显示执行的功能,从0—4分别对应1—7号键,8号键,12号键,13号键,14号键的功能)功能实现方案:51单片机的P0口(P0.0—P0.7)为低位地址总线,兼做数据总线,连接74LS273锁存器,输出的数据通过其锁存。

单片机P1口(P1.0—P1.7)用作通用I/O口,与键盘连接,其中,高四位(P1.4—P1.7)接为列控制线,低四位(P1.0—P1.3)接行控制线。

单片机P2口(P2.0—P2.5)为高位地址线,接外部74LS138译码芯片。

流水灯,数码管同时亮,显示HELLO

流水灯,数码管同时亮,显示HELLO
uchar code table1[]={0xe0,0xd0,0xc8,0xc4,0xc2,0xc1};//用于显示位置的
uint DisData,DisData1;//显示的数字
uchar flag,a,b,c,d,f,e;
int liushuideng();
void shumaguan();
return(0);
}
int display (uchar a,uchar b,uchar c,uchar d,uchar e,uchar f )
{
a=DisData1/100;
b=DisData1%100/10;
TR0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
flag=1;
P0=0xff;
display1(10,11,12,12,0);
}
}
return (0);
}
void timer0 () interrupt 1 //定时器0 的中断
delay(1);
wela=1;
P1=0xC8;
wela=0;
dula=1;
P1=table[c];
dula=0;
t0=0;
temp=_cror_(temp,1);
P0=temp;
}
}
else
{
if(t0%2==0)
{
dula=0;
num++;
}
delay(10);
}
int liushuideng()

按键控制数码管和流水灯设计报告实验报告

按键控制数码管和流水灯设计报告实验报告

按键控制数码管和流水灯设计报告实验报告摘要单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们极大的重视和关注。

本设计选用msp430f249芯片作为控制芯片,来实现矩阵键盘对LED数码管显示的控制。

通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的检测识别。

用单片机的P3口连接4×4矩阵键盘,并以单片机的P3.0-P3.3口作键盘输入的列线,以单片机的P3.4-P3.7口作为键盘输入的行线,然后用P0.0-P0.7作输出线,通过上拉电阻在显示器上显示不同的字符“0-F”。

在硬件电路的基础上加上软件程序的控制来实现本设计。

其工作过程为:先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有键按下,则识别是哪一个键按下,最后通过LED数码管显示该按键所对应的序号。

关键字:单片机、流水灯、数码管、控制系统SCM since the nineteen seventies, with its high price, and a convenient compact attention and great concern. Thisdesign uses msp430f249 chip as the control chip, to realize the control of the LED digital tube display matrix keyboard. Through the internal control single chip to realize the hardware design of the circuit, so as to re alize the detection and recognition of 4*4 matrix keyboard. 4 * 4 matrix keyboard connected with the MCU P3 port, and the MCU P3.0 P3.3 port for a keyboard input, MCU P3.4P3.7 port as the lines of keyboard input, and then use theP0.0 P0.7 as the output line, by a pull-up resistor display different characters "0F on display". Control with software programs based on the hardware circuit to realize the design. The working process is: first to determine whether a key is pressed, if no key is pressed, it will continue to test the whole procedure, if a key is pressed, the Keywords: SCM, water lights, digital tubes, control system键盘控制流水灯和数码管实验报告目录一设计的目的 (2)二任务描述及方案设计 (3)1. 任务描述 (3)2. 方案设计 (3)三硬件设计方案 (3)1. Msp430f149单片机的功能说明 (3)2. 显示器功能 (4)3. 复位电路 (4)4. 按键的部分 (4)5. 74HC573的特点 (4)6. 流水灯和数码管电路原理图 (4)7. 元器件清单 (4)四程序设计方案 (5)1. 用IAR Embedded Workbench软件编程序 (5)2. 仿真电路图 (6)五实物实验 (7)1. 实物图 (7)2. 测试结果与分析 (7)六结论 (11)八参考文献 (16)一、设计目的1、进一步巩固和加深学生所学一门或几门相关专业课理论知识,培养学生设计、计算、绘画、计算机应用、文献查阅、报告撰写等基本技能;2、培养学生实践动手能力及独立分析和解决工程实践问题能力;3、培养学生的团队协作精神、创新意思、严肃认真的治学态度和严谨求实的工作作风。

按键控制数码管显示

按键控制数码管显示

按键控制数码管显示试验1:首先打开keil 4软件,如下图新建一个工程
2:输入工程名称后点保存
3:选择你用的单片机型号后点OK
4:我的是89C52所以如下选择后点OK
5:然后新建一个组
6:输入组名称,注意一定和工程名一致,且后缀名为asm
7:然后在将组加进来
8:如下选择刚保存的组然后点加入
9:然后设置频率12M
10:照图上挨个点上勾
11:debug为最后项,照图点上勾,然后OK
12然后编写程序,写好检查后点击运行
机等待烧录软件提示给单片机上电。

14:效果图:
总结:这次试验是按键控制数码管显示数字0~9的增减、以及流水灯的闪烁。

通过大家的努力实现。

感谢本组每位组员的努力。

本组成员【王思琪、熊飞、孔恩、李云彬、王鹏碧】。

单片机并口简单应用(流水灯、数码管)实验报告6-1

单片机并口简单应用(流水灯、数码管)实验报告6-1

实验一单片机并口简单应用(流水灯、数码管)实验目的1、了解简单单片机应用系统的设计方法。

2、了解单片机汇编语言程序的基本结构3、了解单片机汇编语言程序的设计和调试方法4、掌握应用PROTEUS仿真软件的操作方法。

5、掌握应用KEIL软件编辑、编译源汇编程序的操作方法。

6、培养良好的实验习惯。

实验内容1、AT89S51为主控芯片,用PROTEUS仿真设计简单单片机应用系统。

2、编程实现8个发光LED“流水”的现象,用一个按键控制灯的上、下、开花三种状态,先用查询。

3、用四个数码管开始现实185,做二个按键,加5,减4,最多加到210,最多减到150。

发辉部分:修改程序,用中断完成以上功能,用六位数码管显示学号后六位。

实验原理1、流水灯(1)实验原理图(可打印)(2)实验程序(必须手写)流水灯中断ORG 0000HAJMP MAINORG 0003HAJMP KEYMAIN:CALL INITLOOP:CALL MOVECALL DELAYAJMP LOOPINIT:MOV R3,#0FEHMOV R4,#0MOV P2,#0FFHMOV R0,#00HSETB IT0SETB EX0SETB EARETMOVE:CJNE R0,#00H,MOV2 MOV A,R3RL AMOV R3,AMOV P2,R3MOV2:CJNE R0,#01H,MOV3 MOV A,R3RR AMOV R3,AMOV P2,R3MOV3:CJNE R0,#02H,LEND MOV DPTR,#TABMOV R7,#0MOV R6,#4LOP: MOV A,R7MOVC A,@A+DPTRMOV P2,ALCALL DELAYINC R7DJNZ R6,LOP LEND: RETKEY: PUSH PSWPUSH ACCMOV A,R0INC ACJNE A,#03H,HU1MOV A,#00HHU1: MOV R0,APOP ACCPOP PSWRETIDELAY:MOV R2,#150DE1: MOV R5,#200DJNZ R5,$DJNZ R2,DE1RETTAB: DB 0e7H,0dbH,0bdH,07eH END;OK查询ORG 0000HAJMP STARTSTART:MOV R3,#0FEHMOV R4,#0MOV P2,#0FFHMOV R0,#00HMAIN:CALL DETCALL MOVEAJMP MAINDET:JB P3.2,DENDJNB P3.2,$MOV A,R0INC AMOV R0,ACJNE A,#03H,DENDMOV R0,#00HDEND:RETMOVE:CJNE R0,#00H,MOV2MOV A,R3RL AMOV R3,AMOV P2,R3MOV2:CJNE R0,#01H,MOV3MOV A,R3RR AMOV R3,AMOV P2,R3MOV3:CJNE R0,#02H,LENDMOV DPTR,#TABMOV R7,#0MOV R6,#4LOP: MOV A,R7MOVC A,@A+DPTRMOV P2,ALCALL DELAYINC R7DJNZ R6,LOPLEND: RETDELAY: MOV R4,#250DE1: MOV R5,#200DJNZ R5,$DJNZ R4,DE1RETTAB: DB 0e7H,0dbH,0bdH,07eH END;OK2、数码管显示(1)实验原理图(可打印)(2)实验程序(可打印)(3)数码管查询(4) ORG 0000H(5) AJMP MAIN(6)(7) MAIN:(8)MOV R2,#000(9)MOV R3,#185(10)(11)MANAGE:(12)LCALL COMPUTING(13)LCALL BCD(14)LCALL DISPLAY(15)AJMP MANAGE(16)(17)(18)COMPUTING:(19)JB P3.1,SU(20)JNB P3.1,$(21)INC R3(22)INC R3(23)INC R3(24)INC R3(25)INC R3(26)CJNE R3,#210,PD1(27)PD1: JC LEND(28)MOV R3,#210(29)SU: JB P3.2,LEND(30)JNB P3.2,$(31)DEC R3(32)DEC R3(33)DEC R3(34)DEC R3(35)CJNE R3,#150,PD2 (36)PD2: JNC LEND (37)MOV R3,#150 (38)LEND:RET(39)(40)(41)BCD:(42)MOV A,R2(43)MOV B,#100 (44)DIV AB(45)MOV 30H,A(46)MOV A,B(47)MOV B,#10(48)DIV AB(49)MOV 31H,A(50)MOV 32H,B(51)(52)MOV A,R3(53)MOV B,#100 (54)DIV AB(55)MOV 33H,A(56)MOV A,B(57)MOV B,#10(58)DIV AB(59)MOV 34H,A(60)MOV 35H,B(61)(62)DISPLAY:(63)MOV R7,#7(64)MOV R0,#30H (65)MOV DPTR,#TAB (66)MOV R6,#0FEH (67)LOOP:(68)MOV A,@R0(69)MOVC A,@A+DPTR (70)MOV P1,R6(71)MOV P2,A(72)LCALL DELAY (73)MOV A,R6(74)RR A(75)MOV R6,A(76)LCALL DELAY(77)INC R0(78)DJNZ R7,LOOP(79)RET(80)(81)DELAY:(82)MOV R5,#50(83)DE1:MOV R4,#10(84)DJNZ R4,$(85)DJNZ R5,DE1(86)RET(87)(88)(89)TAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H (90)(91)END(92)(93);OK(94)(95)中断(96) ORG 0000H(97) AJMP MAIN(98) ORG 0003H(99) AJMP KEY(100) ORG 0013H(101) AJMP KEY2(102)(103)MAIN:(104)LCALL INIT(105)MOV R2,#000(106)MOV R3,#185(107)(108)MANAGE:(109)LCALL BCD(110)LCALL DISPLAY(111)AJMP MANAGE(112)(113)INIT:(114) SETB IT0(115) SETB IT1(116) SETB EX0(117) SETB EX1(118) SETB EA(119) RET(120)(121)KEY: MOV A,R3 (122)ADD A,#5 (123)MOV R3,A (124)CJNE R3,#210,M1 (125)M1: JC KEND(126)MOV R3,#210 (127)AJMP KEND (128)KEY2: MOV A,R3 (129)SUBB A,#4 (130)MOV R3,A (131)CJNE R3,#150,M2 (132)M2: JNC KEND (133)MOV R3,#150 (134)KEND: RETI(135)(136)(137)BCD:(138)MOV A,R2(139)MOV B,#100(140)DIV AB(141)MOV 30H,A(142)MOV A,B(143)MOV B,#10(144)DIV AB(145)MOV 31H,A(146)MOV 32H,B(147)(148)MOV A,R3(149)MOV B,#100(150)DIV AB(151)MOV 33H,A(152)MOV A,B(153)MOV B,#10(154)DIV AB(155)MOV 34H,A(156)MOV 35H,B(157)(158)DISPLAY:(159)MOV R7,#7(160)MOV R0,#30H (161)MOV DPTR,#TAB (162)MOV R6,#0FEH (163)LOOP:(164)MOV A,@R0(165)MOVC A,@A+DPTR(166)MOV P1,R6(167)MOV P2,A(168)LCALL DELAY(169)MOV A,R6(170)RR A(171)MOV R6,A(172)LCALL DELAY(173)INC R0(174)DJNZ R7,LOOP(175)RET(176)(177)DELAY:(178)MOV R5,#50(179)DE1:MOV R4,#10(180)DJNZ R4,$(181)DJNZ R5,DE1(182)RET(183)(184)(185)TAB: DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H (186)(187)END(188)(189);OK3、显示学号后六位(1)实验原理图(可打印)(2)实验程序(可打印)学号ORG 0000HAJMP MAINMAIN:MOV R2,#071MOV R3,#082MANAGE:LCALL BCDLCALL DISPLAYAJMP MANAGEBCD:MOV A,R2MOV B,#100DIV ABMOV 30H,AMOV A,BMOV B,#10DIV ABMOV 31H,AMOV 32H,BMOV A,R3MOV B,#100DIV ABMOV 33H,AMOV A,BMOV B,#10DIV ABMOV 34H,AMOV 35H,BDISPLAY:MOV R7,#7MOV R0,#30HMOV DPTR,#TABMOV R6,#0FEHLOOP:MOV A,@R0MOVC A,@A+DPTRMOV P1,R6MOV P2,ALCALL DELAYMOV A,R6RR AMOV R6,ALCALL DELAYINC R0DJNZ R7,LOOPRETDELAY:MOV R5,#50DE1:MOV R4,#10DJNZ R4,$DJNZ R5,DE1RETTAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H END实验总结1、实验中出现的问题,如何解决2、心得体会。

数码管加流水灯

数码管加流水灯

实验报告班级学号姓名实验日期实验名称:数码管及流水灯显示一、实验目的了解数码管动态显示原理,学会LPC2103通用I/O口的使用。

二、实验内容1.用LPC2103控制8个LED闪烁形成的流水灯效果;2.用LPC2103控制数码管循环显示的效果三、实验原理1.本实验中共接入了8个共阳八段数码管(数码管阳极连在一起),演示数码管中的某一段点亮只需在对应的位置写入“0”即可。

在这里74HC595实现了数据串并转换的功能,试验中用到的两片74HC595分别用于控制八个数码管的位选和其中每个数码管的段选。

本实验循环显示了十六进制数码“0—9”。

2.为了最大程度的利用芯片的I/O口资源,在硬件设计时显示模块和数入模块都采用了芯片74HC59,74HC59是一种串行输入转并行输出的芯片,与I/O口连接的共有三个引脚:引脚SH_CP为移位暂存器的输入,上升沿时移位暂存器中的数据依次移动一位,下降沿移位寄存器的数据不变;引脚ST_CP为寄存器的时序输入,上升沿时移位暂存器的数据进入存储寄存器,下降沿时存储寄存器的数据保持不变,使用时通常将ST_CP置为低电平,移位结束后再在ST_CP端产生一个正脉冲更新数据,还有一个引脚为数据输入端DS.四、实验步骤1.用protues设计流水灯控制电路;2.在Keilc51中编写流水灯控制程序,编译通过后,与protues联合调试;3.按动k1键,观察是否达到演示效果;4.用中断方式编写程序,功能实现后再改为查询方式,比较二者的区别。

五、实验流程图六、实验源程序#include "config.h"#define SPI_CS 1<<8//P0.8定义为hc595的片选信号线,用于数码管显示数据的输出#define SPI_CS1 1<<11//P0.11定义为hc595的片选信号线,用于数码管的位选#define SPI_DATA 1<<6//P0.6输出数码管要显示的数#define SPI_DATA1 1<<7//P0.7控制那一位数码管亮#define SPI_CLK 1<<4//P0.4时钟控制信号线void DelayNS(uint32 dly){uint32 i;for(;dly>0;dly--)for(i=0;i<5000;i++);}void HC595_SendDat(uint8 dat)//待显示数据的输出{uint8 i;IOCLR = SPI_CS;//SPI_CS=0,选中芯片 for(i=0;i<8;i++)//发送8位数据{IOCLR = SPI_CLK; //SPI_CLK=0,产生输出时钟if((dat&0x80)!=0) IOSET = SPI_DATA;//发送1else IOCLR = SPI_DATA;//发送0dat<<=1;IOSET = SPI_CLK; //SPI_CLK=1,产生输出时钟}IOSET = SPI_CS; //SPI_CS=1,输出显示数据主程序流程图 数码管显示子程序流程图}void HC595_SendDat1(uint8 dat)//要显示数据位的控制{uint8 i;IOCLR = SPI_CS1; //SPI_CS=0for(i=0;i<8;i++) //发送8位数据{IOCLR = SPI_CLK; //SPI_CLK=0if((dat&0x80)!=0) IOSET = SPI_DATA1;else IOCLR = SPI_DATA1;dat<<=1;IOSET = SPI_CLK; //SPI_CLK=1}IOSET = SPI_CS1; //SPI_CS=1,输出显示数据}int Num_show(){const uint8 DISP_TAB[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//数码显示段码表 0 1 2 3 4 5 6 7 8 9 a b c d e fconst uint8 DISP_TAB1[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//数码显示位码表第1位 (8)uint8 i;for(i=0;i<8;i++){HC595_SendDat(DISP_TAB[i]);//与下面一条语句共同控制在第i位显示i(i<8)HC595_SendDat1(DISP_TAB1[i]);DelayNS(100);HC595_SendDat(0xff);//与下面一条语句共同控制关闭第i位数码显示HC595_SendDat1(DISP_TAB1[i]);}for(i=0;i<8;i++){HC595_SendDat(DISP_TAB[i+8]);//与下面一条语句共同控制在第i位显示i(7<i<=f)HC595_SendDat1(DISP_TAB1[i]);DelayNS(100);HC595_SendDat(0xff);//与下面一条语句共同控制关闭第i位数码显示HC595_SendDat1(DISP_TAB1[i]);}return(0);}extern void DelayNS(uint32 dly);extern void HC595_SendDat(uint8 dat);extern void HC595_SendDat1(uint8 dat);#include "config.h"#include "Num show.h"#define SPI_IOCON 0x000009d0//SPI接口的IO设置字int main(){PINSEL0=0x00000000;//设置所有引脚连接GPIOPINSEL1=0x00000000;IODIR=SPI_IOCON; //定义连接595的引脚为输出while(1){Num_show();}return(0);}#define IN_TARGET#include "config.h"void __irq IRQ_Exception(void){while(1); // 这一句替换为自己的代码}void FIQ_Exception(void){ while(1); // 这一句替换为自己的代码}void TargetInit(void){ }void TargetResetInit(void){ /* 设置系统各部分时钟 *//* PLLCON = 1;#if ((Fcclk / 4) / Fpclk) == 1VPBDIV = 0;#endif#if ((Fcclk / 4) / Fpclk) == 2VPBDIV = 2;#endif#if ((Fcclk / 4) / Fpclk) == 4VPBDIV = 1;#endif#if (Fcco / Fcclk) == 2PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);#endif#if (Fcco / Fcclk) == 4PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);#endif#if (Fcco / Fcclk) == 8PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);#endif#if (Fcco / Fcclk) == 16PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);#endifPLLFEED = 0xaa;PLLFEED = 0x55;while((PLLSTAT & (1 << 10)) == 0);PLLCON = 3;PLLFEED = 0xaa;PLLFEED = 0x55;*/ /* 设置存储器加速模块 */MAMCR = 2; //MAMCR 8u2 00-MAM 功能被禁止、01-MAM功能部分使能、10-MAM功能完全使能/* MAMTIM 8u3000=0-保留001=1-一段时间内只有 1 个处理器时钟(cclk)用于 MAM 取指。

键盘控制数码管显示与流水灯

键盘控制数码管显示与流水灯

课程设计任务书题目键盘控制数码管显示及 LED点亮学院(部)__________ 电子与控制工程 ______________专业____________ 建筑设施智能技术 ___________班级________________ 320601 ________________学生姓名_____________________________学号________________5_月日至 _5_月_22_日指导教师_______________2014年5月22日目录一、 .............................................. 摘要 2二、 .......................................... 设计要求 2三、 ...................................... 方案设计说明 2四、 ........................................ 程序流程图 4五、 .......................................... 模块介绍 41)8051CPU (4)2)数码管显示 (5)3) (4X)4键盘输入 (5)4)流水灯显示 (6)六、源程序 (7)程序执行结果 (11)七、主要元器件介绍 (13)1) ..................................................................................................8051 (13)2) .................................................................................................. 共阴极数码管 (15)八、参考书籍 (17)一、摘要单片机是单片微型计算机,它是针对控制与检测应用而设计的,也称为微控制器。

流水灯、数码管、按键、液晶显示器LCD驱动程序和RS232串口

流水灯、数码管、按键、液晶显示器LCD驱动程序和RS232串口

引言单片机(微控制器)是一种集成电路芯片,是采用超大规模集成电路技术与数据处理能力的中央处理器CPU,只读存储器ROM,各种各样的I / O口和中断系统、定时器/计数器功能(可能包括显示驱动电路、脉宽调制电路,模拟多路复用器和A / D转换器电路)集成到一块硅组成的小型和完美的微机系统,广泛应用于工业控制领域。

自1980年代以来,8位单片机,发展到现在的300高速单片机。

以其极高的性价比,是人们的注意和关心,应用很广,发展很快。

单片机体积小、重量轻、抗干扰能力强、环境要求不高,成本低,可靠性高,灵活性好,开发较为容易。

由于这些优势,在我国单片机已广泛应用于工业自动化控制、自动检测、智能仪器仪表、电力电子、机电一体化设备和其他方面,最典型的是单片机51单片机。

在本次课程设计中以STC89C52芯片为核心,辅以必要的电路,设计了流水灯、数码管、按键、液晶显示器LCD驱动程序和RS232串口程序。

同时系统硬件设计简单、稳定性高、价格低廉等优点。

关键词:液晶显示器,STC89C52,RS232MCU (Microcontrollers) is A kind of integrated circuit chips, is to use very large scale integrated circuit technology with data processing ability of the central processor CPU, ROM, A variety of I/O mouth and interrupt system, timer/counter function (may include display driver circuit, pulse width modulation circuit, analog multiplexer and A/D converter circuit) is integrated into A piece of silicon consisting of A small and perfect microcomputer system, widely used in industrial control field. Since the 1980 s, by the time of the four, 8-bit microcontroller, development to the present 300 m high speed single chip microcomputer.SCM since the 1970 s, with its extremely high cost performance, is very wide, developing very quickly. SCM small size, light weight, strong anti-jamming capability, environmental requirements is not high, low cost,highreliability, good flexibility, development is relatively easy. Because of these advantages, in our country, SCM has been widely used in industrial automation control, automatic detection, intelligent instruments and other aspects, and is most typical in the microcontroller 51 single-chip microcomputer ,The curriculum design through study andapplication of it, STC89C52 chip as the core, supplemented by necessary circuit, designed a light water program, digital tube, key procedures, LCD driver and RS232 serial interface program. At the same time the system has simple hardware design, high stability, price is low wait for an advantage .Key words: liquid crystal display,STC89C52,RS232第一章总体设计方案1.1 课程设计任务(1)按照硬件电路画出原理图及PCB图;(2)在硬件电路上完成流水灯、数码管、按键、液晶显示器以及RS232串口通信驱动程序。

EDA流水灯,数码管显示01234567,加减计数,

EDA流水灯,数码管显示01234567,加减计数,

练习1.两位的循环彩灯,自定义的循环彩灯2.用另外的方式实现按键控制数码管加减3.设计一个在四个数码管上,显示拨码开关给定的值。

1、设计一个流水灯。

原理图设计:(8位流水灯)程序设计:(16位流水灯)module led_s(rst,clk,leds);input rst,clk;output [15:0] leds;reg [15:0] leds;reg [3:0]count;always @(posedge clk)beginif (rst)count <=16 'h00_00;elsebeginif(count==4'hf)count <=16 'h00_00;elsecount <=count+1;endendalways @(count)begincase(count)0: leds<= 16 'b0000_0000_0000_0001;1: leds<= 16 'b0000_0000_0000_0010;2: leds<= 16 'b0000_0000_0000_0100;3: leds<= 16 'b0000_0000_0000_1000;4: leds<= 16 'b0000_0000_0001_0000;5: leds<= 16 'b0000_0000_0010_0000;6: leds<= 16 'b0000_0000_0100_0000;7: leds<= 16 'b0000_0000_1000_0000;8: leds<= 16 'b0000_0001_0000_0000;9: leds<= 16 'b0000_0010_0000_0000;10: leds<=16 'b0000_0100_0000_0000;11: leds<=16 'b0000_1000_0000_0000;12: leds<=16 'b0001_0000_0000_0000;13: leds<=16 'b0010_0000_0000_0000;14: leds<=16 'b0100_0000_0000_0000;15: leds<=16 'b1000_0000_0000_0000;default: leds<=16 'hxxxx;endcaseendendmodule2、设计一个加减计数器,计数器的值在一位数码管上显示出来。

按键控制数码管和流水灯设计报告实验报告

按键控制数码管和流水灯设计报告实验报告

按键控制数码管和流水灯设计报告实验报告实验名称:按键控制数码管和流水灯设计报告一、实验目的本实验旨在通过使用按键来控制数码管和流水灯的显示,加深对数码管和流水灯工作原理的理解,并掌握按键的基本输入输出原理。

二、实验器材1. Arduino开发板2.数码管模块3.面包板4.面包板连接线5.按键模块6.跳线三、实验原理数码管是一种将数字和一些常用符号通过数码电路显示在特定位置的显示器件,由多个LED组成,可显示0-9及一些小于9的字母和符号。

流水灯是一种LED灯的组合,通过不同的时序控制,实现灯光依次点亮或熄灭的效果。

本实验通过使用按键控制器将数码管和流水灯的状态控制与显示,按下不同的按键可以使数码管切换显示不同的数字,同时控制流水灯的点亮或熄灭。

四、实验步骤1. 将数码管模块连接到Arduino开发板的数字I/O口,连接方式可参考数码管模块的接口定义和Arduino开发板的编号。

2. 将按键模块连接到Arduino开发板的数字I/O口,连接方式可参考按键模块的接口定义和Arduino开发板的编号。

3. 按键模块和数码管模块都需要使用面包板连接线和跳线连接到Arduino开发板的相应引脚上。

4.根据按键的读取状态,通过编程控制数码管显示相应的数字,利用流水灯实现通过按键的控制点亮或熄灭。

五、实验结果经过编程和调试,实验中数码管能够正确显示按键输入的数字,同时根据按键输入状态控制流水灯的点亮或熄灭。

按不同的按键可以切换数码管的数字显示,实现了按键对数码管和流水灯的控制。

六、实验总结本实验通过按键来控制数码管和流水灯的显示,加深了对数码管和流水灯的工作原理的理解。

同时,掌握了按键的基本输入输出原理,并通过编程控制实现了按键对数码管和流水灯的控制。

本实验还有一些可以改进的地方,例如可以增加多个按键,实现更多的控制功能;还可以通过增加延时函数控制流水灯的点亮或熄灭速度。

通过不断改进和练习,可以提高对Arduino开发板的理解和掌握。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计任务书题目键盘控制数码管显示及 LED点亮学院(部)__________ 电子与控制工程 ______________专业____________ 建筑设施智能技术 ___________班级________________ 320601 ________________学生姓名_____________________________学号________________5_月日至 _5_月_22_日指导教师_______________2014年5月22日目录一、 .............................................. 摘要 2二、 .......................................... 设计要求 2三、 ...................................... 方案设计说明 2四、 ........................................ 程序流程图 4五、 .......................................... 模块介绍 41)8051CPU (4)2)数码管显示 (5)3) (4X)4键盘输入 (5)4)流水灯显示 (6)六、源程序 (7)程序执行结果 (11)七、主要元器件介绍 (13)1) ..................................................................................................8051 (13)2) .................................................................................................. 共阴极数码管 (15)八、参考书籍 (17)一、摘要单片机是单片微型计算机,它是针对控制与检测应用而设计的,也称为微控制器。

它具有芯片体积小、集成度高、功能强、抗干扰能力强、性价比高等特点,被广泛的应用在工业自动化、仪器仪表、航天航空、消费电子、电力电子、汽车电子、计算机外设等领域。

自 20 世纪80年代MCS-51系列单片机问世以来,经历了三十多年的发展,在共享 Inter 公司 8051 内核技术的基础上,众多的半导体公司经过不断的技术更新,推出了庞大的系列兼容产品,使MCS-51系列单片机依然在各个应用领域扮演着重要的角色。

学习单片机的最有效方法就是理论与实践并重,需要更深的去了解单片机的很多功能,努力的去查找资料,当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。

单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。

本课程通过应用单片机技术完成了流程灯、数码管显示以及4X4键盘的识别等功能。

二、设计要求(1)利用按键控制流水灯的显示。

(2)利用3X 3或者4X4键盘,控制数码管的显示。

(3)利用到定时 /计数器。

4)利用到中断技术。

三、方案设计说明根据要求我们所采用的方案为:主程序为4X4键盘的扫描程序,通过 P1 口输入所按键的键值,将扫描到的键值“0~F”中的一位通过P0 口在数码管上显示,并检测按键是否为“LED--- ”,如果不是,将回到程序继续扫描,如果是“LED- --”,则跳到LED循环点亮。

LED循环点亮:一共八盏灯,一盏灯亮,另七盏灯灭,从左到右循环点亮,在其中运用定时器TO工作在MODEL1,对其点亮时间进行控制点亮1s,对其定时器溢出中断次数进行统计,当溢出中断次数达到10次后,返回主程序开始四、程序流程图五、模块介绍(1)8051CPUP10 1■P11 2p12 3/P13 4附4 5p15 6fP16 7p17 8P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393735343221222325272810P3011P3112P3213P33P341415P3516P3617P37P3[O..7]甲-4-U2A0 B0A1 B1A2 B2A3 B3A4 B4A5 B5A7 B7AB/BA/4LS245U3A0 BOA1A2 B2A3 B3A5 B5卒B6A^ B7AB/BA____ |XTAL1U119XTAI2P1.2LED--- P1.3P1.4P12P1.780C51P11」10P1.5P1.6P1.0P1.1123568RESPA K-81614 *13 F11 出18 L117 L216 L32314 L513 L612 L711 L8467194678919P1.3~P1.0分别连接4X 4键盘的第一行 到第四行;P1.7~P1.4分别连接4X 4键盘的 第一列到第四列;P2 口分别接8个LED 灯; P0 口接1个共阴极数码管。

如图,MCS-51系列单片机的40只引脚按功能能可分为四类: ① 电源引脚电源引脚提供芯片的工作电源,MCS-51系列单片机采用单一的直 流5V 电源供电。

(1) Vcc (引脚 40)——+5V 。

(2) GND (引脚20)——地。

② 晶体振荡器信号输入和输出引脚晶体振荡器信号输入输出引脚外接振荡器或时钟源,为单片机提 供时钟信号。

(1) XTAL1 (引脚19)――振荡器信号输入。

(2) XTAL2 (引脚18)――振荡器信号输出。

③ I/O 口线引脚P0 口 (39~32脚):P0.0~P0.7统称为P0 口。

在不接片外存储器 与不扩展I/O 口时,可作为准双向输入/输出口。

在接有片外存P5EN ALEP2 I/A9 田刁㈣1 P2JZJK12 P2SA13 P26/A14 P2 7^15P1.01 ps(/r-nP1.2 p.3 z/im P1J3 P3 ^INTl P1.4 Pl 山 TOP1 5 F3&niP1 £Pl.?F3心口U412_3 IZ 壬-4?dAL2RSI储器或扩展I/O 口时,P0 口分时复用为低8位地址总线和双向数据总线。

P1 口(1~8脚):P1.0~P1.7统称为P1 口,可作为准双向I/O口使用。

对于52子系列,P1.0与P1.1还有第二功能:P1.0可用作定时器/计数器2的计数脉冲输入端T2,P1.1可用作定时器/ 计数器2的外部控制端T2EX。

P2口(21~28脚):P2.0~P2.7统称为P2 口,一般可作为准双向I/O 口使用;在接有片外存储器或扩展I/O 口且寻址范围超过256 字节时,P2 口用作高8位地址总线。

P3 口(10~17脚):P3.0~P3.7统称为P3 口。

除作为准双向I/O 口使用外,还可以将每一位用于第二功能,而且 P3 口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。

P3 口的第二功能如表1-1所示。

表1-1④控制信号线ALE(引脚30)――地址锁存控信号,输出。

PSEN(引脚29)――外部程序存储器读选通信号,输出EA (引脚31)――内、外程序存储器选择控制端,输入RESET(引脚9)――复位信号。

(2)数码管显示! o D u Li-lb h2P 5 5 Li 采用共阴极8位数码管来显示键盘输入的键值。

数码管字型编码表宇符显云共萨槻敌砖共阳极段码亞示孚袴共隕极段磋共圧极袈码03IH€0H c C6106EI F9H d ALII5BH A4H79H66114PH E0f T1H S^H 4如99H P73H&2H56DJJ g;H11J LH C1H67DH82H r31H CEH707H F®H y6EH91HS7FH KUH8.ttH OUM9f讣H90H OOH FFHA88Hb7 CH(3) 4X4键盘输入键盘输入有“ 1,2,3,4,5,6,7,8,9,A,B,C,D,E,F” 这些键值,“A”键的功能是流水灯循环显示。

键盘所有键的特征码按键特征码键值按键特征码键值0 7700 87D08F E 、i 1 d* 白片D >i-i ■c 、J—i .1 P13 >i |—d &—i 1 ] i 由01^TEXT*8 J=L* 1—O' a―i詢F1<TEXT>91_1 .<TEXT*8J=L»I p■_0 Q- -1P12 / i 1-- 0 o—1l |- O O---- 1«TfXT>7 r~i . L JuTEX"61严—<TEXT>5 -l=L.i [ Cl & i<TEXT>4■ L —'PH y^TEXT> 3r~i .H TEXT A21l~I .uTEXTnE_1 «P1Q /|——o 1L 4L匚|—^0 4 uTKCTn uTEXTn <TEKT> uTEXTn1! 1 12化“&丄>P1盘760C51 |g1 B7 01 9 BD 092 D7 02 A DD 0A3 E7 03 B ED 0B4 7B 04 C 7E 0C5 BB 05 D BE 0D6DB06E DE 0E7 EB 07 F EE 0F(4)流水灯显示六、源程序;------- 键盘控制数码管显示及LED点亮程序 --------------org OOOOhajmp mai n流水灯显示方式:开始全部点亮,按下“ LED---键后,点亮第一个LED,然后从左向右依次循环点亮。

ORG 0BHJMP TIM0 main:mov dptr,#tab ; mov30h,#0ffh ;mov 31h,#0ffh ;mov 32h,#0ffh ;mov 33h,#0ffh mov34h,#0ffh ;mov 35h,#0ffhmov 36h,#0ffhmov 37h,#0ffh mov39h,#0ffh ;loop: jb f0,kk1 ;f0mov 39h,#00h kk2:lcall display ;lcall keycpl a ; jz loop;mov a,38h ; cjnea,#0ah,norp ;setb f0 ;将表头位置送入 DPT 将30 显示单元清零将 30 显示单元清零将 30 显示单元清零将 30 显示单元清零将 30 显示单元清零若等于一则跳到KK1处调用显示程序; 调用键盘描程序将 A 的值取反无键按下则返回有键按下将键值送入 ACC若A键未按下则返回到LOOPL若A键按下则将F0值1jmp LEDmov p3,#00hIjmp loop ; 返回LOOP处不断的循环LED: MOV TMOD,#00000001BMOV TH0,#10000MOV TL0,#10000SETB TR0MOV IE,#10000010B ;MOV R5,#10MOV P3,#01Hjmp loopTIM0: PUSH ACCPUSH PSWMOV TH0,#10000MOV TL0,#10000DJNZ R5,LOOP1MOV R5,#10MOV A,P3RL AMOV P3,ALOOP1: POP PSWPOP ACCRETIkk1: inc 39hmov a,39h 将 39H 向上加一 将 39H 中的值送入 ACCcjnea,#10,kk2 ;ACC 中的值与 10 相等则跳转至 KK2mov 39h,#00h cpl 00h ajmp kk2 norp: mov 37h,36hmov 36h,35h若ACG 等于零则将35H 清零 将00H 位取反 跳转至KK2处mov 35h,34h mov33h,32h; 将32H 显示单元的内容送入33H mov 32h,31h ; 将31H 显示单元的内容送入32Hmov a,38h mov 30h,a ljmploopdisplay: mov p2,#0ffh将键值送入 ACC 将ACC 的值送入30H 返回主程序循环将 P2 口置高电平 dd1: jnbOOh,dd1d ; 若 00H 等 0 跳至 DD1Dajmp ddlb ;若00H 等于1则跳转至DD1Bmov 34h,33h mov 31h,30h ;将30H 单元的内容送入31H mov r7,#100; 软件计数器赋值dd1d:mov a,30h ; 将显示缓冲区30H中的值送入ACCmovc a,@a+dptr; 查表取要显示的数并把查表的结果送入 ACC mov p0,a ; 将要显示的数送入P0 口开个位显示单元clr p2.7 ;lcall延时 100USdelay100us ;setb p2.7 ; 关个位显示单ajmp dd1cdd1b: mov a,30h ; 将显示缓冲区30H中的值送入ACC movc a,@a+dptr; 查表取要显示的数并把查表的结果送入 ACCmov p0,a ; 将要显示的数送入P0 口开个位显示单元setb p2.7 ;lcall延时 100USdelay100us ;开个位显示单元setb p2.7 ;dd1c: mov a,31h ; 将显示缓冲区别31H中的值送入A movc a,@a+dptr ; 查表取要显示的数并把查表的结果送入 ACCmov p0,a ; 将要显示的数送入P0 口开十位显示单元clr p2.6 ;lcall延时 100USdelay100us ;关十位显示单元setb p2.6 ;mov a,32h ; 将显示缓冲区32H中的值送入ACCmovc a,@a+dptr ; 查表取要显示的数并把查表的结果送入 ACCmov p0,a ; 将要显示的数送入P0 口开百位显示单元 延时 100US 关百位显示单元将显示缓冲区33H 中的值送入ACC查表取要显示的数并把查表的结果送入 ACC 将要显示的数送入P0 口 开千位显示单元 延时 100US将显示缓冲区34H 中的值送入ACC 查表取要显示的数并把查表的结果送入 ACC 将要显示的数送入P0 口 开万位显示单元 延时 100US将显示缓冲区35H 中的值送入ACC 查表取要显示的数并把查表的结果送入 ACC将要显示的数送入P0 口 开十万位显示单元 延时 100US将显示缓冲区36H 中的值送入ACCclr p2.5 ; lcall delay100us ; setb p2.5;mov a,33h ; movca,@a+dptr ; mov p0,a ;clr p2.4 ; lcalldelay100us ; setb p2.4 mov a,34h ;movc a,@a+dptr ; mov p0,a;clr p2.3 ; lcall delay100us ; setb p2.3 mov a,35h;movc a,@a+dptr ; mov p0,a ;clr p2.2 ; lcalldelay100us ; setb p2.2 mov a,36h ;movc a,@a+dptr ; 查表取要显示的数并把查表的结果送入 ACC mov p0,a ; 将要显示的数送入 P0 口 clr p2.1; 开百万位显示单元lcall delay100us ; 延时 100US setb p2.1 mov a,37h; 将显示缓冲区37H 中的值送入ACCmovc a,@a+dptr ; 查表取要显示的数并把查表的结果送入开千万显示单元 延时 100US 关千万位显示单元不等于0返回至DD1处 等于 0 子程序返回 调用检测按键子程序有键按下继续 ;无键按下退出KEY 子程序 返回继续检测有无按键按下有键按下继续延时去抖动再一次调用检测按键程序;无键按下退出KEY 子程序K2: MOV R2,#0efH将扫描值送入 R2 暂存ACCmov p0,a ; clr p2.0 ;lcall delay100us ; setb p2.0 ; djnz r7,dd1 ;R7 ret;R7KEY: LCALL KS JNZ K1 ;ljmp key_exitK1: LCALL delay4ms LCALL delay4ms LCALL KS;JNZ K2 ;ljmp key_exit将要显示的数送入P0 口MOV R4,#00H;将第一列的列值00H送入R4暂存,R4用于存放列K3: MOV P1,R2 L6: JB P1.0,L15;P1.0将R2的值送入P1 口等于 1 跳转到 L1MOV A,#00H 5将第一行的行值00H送入ACCAJMP LK 5跳转到键值处理程序L1: JB P1.1,L2;P1.1等于 1 跳转到 L2 MOV A,#04H 5将第二行的行值04H送入ACC AJMP LK 5跳转到键值理程序进行键值处理L2: JB P1.2,L3 ;P1.2 等于 1 跳转到 L3 MOV A,#08H 5将第三行的行值08H送入ACCAJMP LK 5跳转到键值处理程序L3: JB P1.3,NEXT ;P1.3等于1跳转到NEXT处MOV A,#0cH 5将第四行的行值0CH送入ACC LK: ADD A,R4 ; 行值与列值相加后的键值送入 Amov 38h,a5将A中的值送入34h暂存K4: lcall display 5调用动态显示子程序LCALL KSJNZ K45按键没有松开继续返回检测RET5按键松开返回NEXT:INC R45将列值加一MOV A,R2将R2的值送入AJNB ACC.7,key_exit; 扫描完成跳至KEY处进行下一回合的扫描RL A ; 扫描未完成将A中的值右移一位进行下一列的扫描MOV R2,A ; 将ACC的值送入R2暂存AJMP K3 ; 跳转到K3继续key_exit:mov a,#Offh ; 无键按下则将A赋成OFFHretKS: MOV P1,#0FH ; 将P1 口高四位置0低四位值1 MOV A,P1 ; 读 P1 口XRL A,#0FH ; 将A中的值与A中的值相异或RET ; 子程序返回delay4ms: ;4ms 延时MOV R5,#08HL7: MOV R6,#0FAHL8: DJNZ R6,L8DJNZ R5,L7RETdelay100us: ;100us 延时mov r5,#50djnz r5,$rettab:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7' DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'DB 3EH, 50H, 40H, 08H, 00H ;'U, r,—,-, BLANKEND程序执行结果按键0按下显示结果按键LED---按下结果(输入位闪烁)D '■■©B■4Tft--fLE&—,1^4刘',3"■ET、■4tW--24产耐丿上他1Ft■/他i讯I 陀」佃」Ff-MCibg」■中斗怦皿1rgwtiw F\” 褂 2rr加F-id-點晦F-iJ砌」TTPIP PMFHJMhJ・u二ixblaua^u-少-盂I4TP皿Fi.UFlJ-Pi-E附■FINPdJflTT«*M4£按键D按下显示结果(d)按键B按下显示结果(b)■■i- vtiyjyJI•叫ui-avj-JI•叫WHS 七、主要元器件介绍 1) 805151系列是基本型,包括8051、8751、8031、8951.这四个机种区别,仅在于片内程序储存器。

相关文档
最新文档