4乘4矩阵键盘输入数码管显示四位数
实验四4×4键盘输入
![实验四4×4键盘输入](https://img.taocdn.com/s3/m/aecc23b310a6f524ccbf85d7.png)
实验四: 4 × 4键盘输入实验一、实验目的:1.学习非编码键盘的工作原理和键盘的扫描方式。
2.学习键盘的去抖方法和键盘应用程序的设计。
二、实验原理:键盘是单片机应用系统接受用户命令的重要方式。
单片机应用系统一般采用非编码键4*4矩阵盘,需要由软件根据键扫描得到的信息产生键值编码,以识别不同的键。
本板采用键盘,行信号分别为P1.0-P1.3 ,列信号分别为P1.4-P1.7 。
具体电路连接见下图对于键的识别一般采用逐行(列)扫描查询法,判断键盘有无键按下,由单片机I/O口向键盘送全扫描字,然后读入列线状态来判断。
程序及流程图:ORG 0000HAJMP MAINORG 0000HAJMP MAINORG 0030HMAIN:MOV P2,#0F7HMOV P1,#0F0HMOV R7,#100DJNZ R7,$MOV A,P1ANL A,#0F0HXRL A,#0F0HJZ MAINLCALL D10MSMOV A,#00HMOV R0,AMOV R1,AMOV R2,#0FEH SKEY0:MOV A,R2MOVP1,AMOVR7,#10DJNZ R7,$MOVA,P1ANLA,#0F0HXRLA,#0F0HJNZ LKEYINC R0MOVA,R2RL AMOVR2,AMOVA,R0CJNE A,#04H,SKEY0AJMP MAIN LKEY:JNB ACC,4,NEXT1MOVA,#00HMOVR1,AAJMP DKEYNEXT1:JNB ACC.5,NEXT2MOVA,#01HMOVR1,AAJMP DKEYNEXT2:JNB ACC.6,NEXT3MOVA,#02HMOVR1,AAJMP DKEYNEXT3:JNB ACC.7,MAINMOVA,#03HMOVR1,AAJMP DKEY DKEY:MOV A,R0MOVB,#04HMULABADDA,R1AJMP SQRSQR:MOVDPTR,#TABMOVC A,@A+DPTRMOVP0,AAJMP MAINTAB:DB0C0H,0F9H,0A4H,0B0H,99H, 92H, 82H, 0F8H DB 80H, 90H, 88H, 83H, 0C6H,0A1H,86H, 8EH D10MS:MOV R6,#10L1:MOV R5,#248DJNZ R5,$DJNZ R6,L1RETEND流程图:结束三、思考题:总结 FPGA是如何识别按键的?与单片机读取键值有何不同?答:FPGA的所有 I/O 控制块允许每个 I/O 引脚单独配置为输入口 , 不过这种配置是系统自动完成的。
数码管显示4×4矩阵键盘的键盘号程序解释好了大作业.doc
![数码管显示4×4矩阵键盘的键盘号程序解释好了大作业.doc](https://img.taocdn.com/s3/m/16fd508baa00b52acfc7ca7a.png)
《单片机原理及应用课程设计》报告——数码管显示4×4矩阵键盘的键盘号专业:电子信息科学与技术班级:姓名:学号:指导教师:2012年5月15日1、课程设计目的1.1巩固和加深对单片机原理和接口技术知识的理解;1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。
2、课程设计要求单片机的P1口的P1.0~P1.7连接4×4矩阵键盘,P0口控制一只数码管,当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。
例如,1号键按下时,数码管显示“1”, 14号键按下时,数码管显示“E”等等。
3、硬件设计3.1 设计思想分析本任务的要求,在课程设计的基础上,添加要求,使设计能够完成当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。
3.2主要元器件介绍:AT89C51单片机 LED数码管 4X4矩阵键盘3.3 功能电路介绍AT89C51单片机:控制器。
程序中将单片机的引脚置高电平低电平,单片机通过读取IO引脚的电平,在根据读取的数据去查找数组中相应的按键值,然后在送到数码管也就是P0口去显示.(51单片机通过IO口来读取键盘的电平,再通过程序来查找对应的数值,在送到数码管去显示)LED数码管 :输出设备4X4矩阵键盘:输入设备4、软件设计4.1 设计思想通过对矩阵键盘的逐行扫描,来获得所按下键的键盘号,最终通过数码管显示出来。
4.2软件流程图4.3源程序#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//定义显示段码uchar num,temp;void delay(uchar k)//定义延时函数{uchar i,j;for(i=k;i>0;i--)for(j=110;j>0;j--);}void disp(char num1)//定义显示函数{P0=table[num1];//将段码值送入P0口显示}char keyscan()//定义键盘检测函数{P1=0xfe;//给P1口送检测信号11111110,即先检测第一列有无按键被按下(key1~key4)temp=P1;//将检测信号赋给变量temptemp=temp&0xf0;//与11110000相“与”去除低四位检测部分while(temp!=0xf0)//判断是否有按键被按下,即key1-key4有任意按键被按下temp便不等于0xff{delay(5);//按键防抖动延时(时间要求不严格)while(temp!=0xf0)//延时之后再次判断{temp=P1;//进入函数说明有按键被按下,再将p1值赋给temp进行判断是哪位被按下switch(temp)//利用switch函数判断temp值{case 0xee://若P0等于0xee,即11101110,则由判断为0的位被按下即第四位(最低位),则应赋值num为0;num=0;break;case 0xde://11011110同理判断其为第三位被按下(该行第二位)num=1num=1;break;case 0xbe://同上则num=2num=2;break;case 0x7e://同上num=3num=3;break;}while(temp!=0xf0)//判断按键是否松开,循环判断直至按键松开{temp=P1;temp=temp&0xf0;}}}P1=0xfd;//给P1口再次送检测信号11111101,来检测第二列有无按键被按下(key5~key8),以下几步同上temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P1;switch(temp){case 0xed:num=4;break;case 0xdd:num=5;break;case 0xbd:num=6;break;case 0x7d:num=7;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xfb;//给P1口再次送检测信号11111011,来检测第三列有无按键被按下(key9~key12),以下几步同上temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P1;switch(temp){case 0xeb:num=8;break;case 0xdb:num=9;break;case 0xbb:num=10;break;case 0x7b:num=11;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xf7;//给P1口再次送检测信号11110111,来检测第四列有无按键被按下(key13~key16),以下几步同上temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P1;switch(temp){case 0xe7:num=12;break;case 0xd7:num=13;break;case 0xb7:num=14;break;case 0x77:num=15;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}return num;//子函数最后返回num值}void main(){P0=0x00;//清屏delay(5);//延时while(1)//主循环{disp(keyscan());//检测并显示}}}。
4X4矩阵式键盘输入程序
![4X4矩阵式键盘输入程序](https://img.taocdn.com/s3/m/1d3378da5022aaea998f0f8c.png)
4*4键盘程序readkeyboard:begin: acall key_onjnz delayajmp readkeyboarddelay:acall delay10msacall key_onjnz key_numajmp beginkey_num:acall key_panl a,#0FFhjz beginacall key_ccodepush akey_off:acall key_onjnz key_offpop aretkey_on: mov a,#00horl a,#0fhmov p1,amov a,p1orl a,#0f0hcpl aretkey_p: mov r7,#0efhl_loop:mov a,r7mov p1,amov a,p1orl a,#0f0hmov r6,acpl ajz nextajmp key_cnext: mov a,r7jnb acc.7,errorrl amov r7,aajmp l_looperror:mov a,#00hretkey_c:mov r2,#00hmov r3,#00hmov a,r6mov r5,#04hagain1:jnb acc.0,out1rr ainc r2djnz r5, again1out1: inc r2mov a,r7mov r5,#04hagain2:jnb acc.4,out2rr ainc r3djnz r5,again2out2: inc r3mov a, r2swap aadd a,r3retkey_ccode:push aswap aanl a,#0fhdec arl a ;行号乘4rl amov r7,apop aanl a,#0fhdec aadd a,r7retdelay10ms:anl tmod,#0f0horl tmod,#01hmov th0,#0d8hmov tl0,#0f0hsetb tr0wait:jbc tf0,overajmp waitclr tr0over:ret单片机键盘设计(二)从电路或软件的角度应解决的问题软件消抖:如果按键较多,硬件消抖将无法胜任,常采用软件消抖。
4X4矩阵键盘控制数码管显示按键值
![4X4矩阵键盘控制数码管显示按键值](https://img.taocdn.com/s3/m/1c75401cdd3383c4bb4cd2cf.png)
4X4矩阵键盘控制数码管显示按键值4X4矩阵键盘控制数码管显示按键值一、设计内容与要求用80C51单片机控制系统显示按键值0~F。
二、设计目的意义2.1 设计目的1、了解单片机系统中实现LED动态显示的原理及方法;2、详细了解8051芯片的性能及编程方法;3、了解单片机系统基本原理,了解单片机控制原理;4、掌握AT89C51输入/输出接口电路设计方法;5、掌握AT89C51程序控制方法;6、掌握单片机汇编编程技术中的设计和分析方法;7、掌握使用PROTEUS软件进行仿真的方法。
8、学会使用并熟练掌握电路绘制软件Protel99SE;9、掌握电路图绘制及PCB图布线技巧。
2.2 设计意义1、在系统掌握单片机相应基础知识的前提下,熟悉单片机应用系统的设计方法及系统设计的基本步骤。
2、完成所需单片机应用系统原理图设计绘制的基础上完成系统的电路图设计。
3、完成系统所需的硬件设计制作,在提高实际动手能力的基础上进一步巩固所学知识。
4、进行题目要求功能基础上的软件程序编程,会用相应软件进行程序调试和测试工作。
5、用AT89C51设计出题目所要求的数码管动态循环显示,并针对实际设计过程中软、硬件设计方面出现的问题提出相应解决办法。
6、通过单片机应用系统的设计将所学的知识融会贯通,锻炼独立设计、制作和调试单片机应用系统的能力;领会单片机应用系统的软、硬件调试方法和系统的研制开发过程,为进一步的科研实践活动打下坚实的基础。
三、系统硬件电路图3.1 Proteus软件简介以及仿真电路图Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、1ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
4乘4矩阵键盘输入数码管显示四位数要点
![4乘4矩阵键盘输入数码管显示四位数要点](https://img.taocdn.com/s3/m/b9f6cfd8af1ffc4fff47ac87.png)
Proteus 软件功能的理解,学会用这个软件设计三相步进电机控制系统,将理论
知识与实践相联系,为以后在学习和工作的发展打下一个良好的基础
。然后,
通过该课程设计, 初步理解了利用计算机控制技术进行三相步进电机控制系统的
设计。
最后,我明白:知识不是孤立的,相互之间有联系的,我们要学会理解知识
点以及学科之间的融合渗透。 本次课程设计涉及到了计算机技术, 自动控制技术,
微机技术, 数字电子技术等众多知识, 因而我们需要把把各个学科之间的知识融
合起来,形成一个整体。认识到 Proteus这个软件的强大功能,为以后的学习和
工作打下基础 。
我相信未来是属于我们的, 随着科学技术的发展, 控制技术的应用将将越来
越广泛,发挥越来越重要的作用。
参考文献
[1] 阎石主编 . 数字电子技术 . [M] 北京:高等教育出版社, 2006 年 [2] 陈振官等编著 . 新颖高效声光报警器 . [M] 北京:国防工业出版社, 2005 年 [3] 王东峰等主编 .单片机 C 语言应用 100 例 . [M] 北京:电子工业出版社, 2009 年 [4] 胡耀辉等主编 .单片机系统开发实例经典 . [M] 北京:冶金工业出版社, 2006 年 [5] 李鸿主编 .单片机原理及应用 . [M] 湖南:湖南大学出版社, 2005 年 [6] 谭浩强主编 .C 语言程序设计 . [M] 北京:清华大学出版社, 2005 年
4X4矩阵式键盘输入程序
![4X4矩阵式键盘输入程序](https://img.taocdn.com/s3/m/40776738376baf1ffc4fadb9.png)
4*4键盘程序readkeyboard:begin: acall key_onjnz delayajmp readkeyboard delay:acall delay10msacall key_onjnz key_numajmp beginkey_num:acall key_panl a,#0FFhjz beginacall key_ccodepush akey_off:acall key_onjnz key_offpop aretkey_on: mov a,#00horl a,#0fhmov p1,amov a,p1orl a,#0f0hcpl aretkey_p: mov r7,#0efhl_loop:mov a,r7mov p1,amov a,p1orl a,#0f0hmov r6,acpl ajz nextajmp key_cnext: mov a,r7jnb acc.7,errorrl amov r7,aajmp l_looperror:mov a,#00hretkey_c:mov r2,#00hmov r3,#00hmov a,r6mov r5,#04hagain1:jnb acc.0,out1rr ainc r2djnz r5, again1out1: inc r2mov a,r7mov r5,#04hagain2:jnb acc.4,out2rr ainc r3djnz r5,again2out2: inc r3mov a, r2swap aadd a,r3retkey_ccode:push aswap aanl a,#0fhdec arl a ;行号乘4rl amov r7,apop aanl a,#0fhdec aadd a,r7retdelay10ms:anl tmod,#0f0horl tmod,#01hmov th0,#0d8hmov tl0,#0f0hsetb tr0wait:jbc tf0,overajmp waitclr tr0over:ret单片机键盘设计(二)从电路或软件的角度应解决的问题软件消抖:如果按键较多,硬件消抖将无法胜任,常采用软件消抖。
机电单片机课程设计--4乘4矩阵键盘-汇编语言
![机电单片机课程设计--4乘4矩阵键盘-汇编语言](https://img.taocdn.com/s3/m/cfc649a78e9951e79a892783.png)
目录1 引言 (2)2 4×4矩阵键盘控制LED工作原理及软硬件设计、仿真调试 (2)2.1 4×4矩阵式键盘识别显示系统概述 (2)2.2 4×4矩阵式键盘原理 (3)2.3 4×4矩阵式键盘控制LED显示方法 (3)2.4 电路设计及电路图 (3)2.5 4×4矩阵式键盘软件编程 (6)2.6 4×4矩阵式键盘软件仿真调试分析 (9)3 结论 (10)4参考文献 (10)1 引言随着现代科技日新月异的发展,作为新兴产业,单片机的应用越来越广。
单片机以其体积小、重量轻、功能强大、功耗低等特点而备受青睐。
键盘作为一种最为普遍的输入工具在单片机项目应用上显得尤为重要。
用MCS51系列的单片机并行口P1接4×4矩阵键盘,以P1.0-P1.3 作输入线,以P1.4-P1.7作输出线;在数码管上显示每个按键的0-F序号。
2 4×4矩阵键盘控制LED工作原理及软硬件设计、仿真调试2.1 4×4矩阵式键盘识别显示系统概述矩阵式键盘模式以4个端口连接控制4*4个按键,实时在LED数码管上显示按键信息。
显示按键信息,省下了很多的I/O端口为他用,相反,独立式按键虽编程简单,但占用I/O口资源较多,不适合在按键较多的场合应用。
矩阵式键盘简介:矩阵式键盘又称行列键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。
在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为4*4个。
这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。
最常见的键盘布局如图1所示。
一般由16个按键组成,在单片机中正好可以用一个P 口实现16个按键功能,这也是在单片机系统中最常用的形式,本设计就采用这个键盘模式。
2.2 4×4矩阵式键盘原理在占用相同的I/O端口的情况下,行列式键盘的接法会比独立式接法允许的按键数量多。
4乘4矩阵键盘输入数码管显示四位数
![4乘4矩阵键盘输入数码管显示四位数](https://img.taocdn.com/s3/m/3a7e9b1e67ec102de2bd894b.png)
沈阳航空航天大学综合课程设计三相步进电机控制器电路的设计班级学号 23学生姓名 XXXXXXXXX 指导教师常丽东课程设计任务书一、设计说明步进电机是工业过程控制及仪表控制中的主控元件之一,作为执行元件其特点为能够快速起启停、精度高且能直接接收数字量,由于这些特点使其在定位场合得到了广泛的应用。
设计一个三相步进电机控制器,使其能够控制步进电机的工作状态,如步进电机正、反转,步进电机的工作方式等。
用键盘设定步进电机的工作频率,工作方式,并用数码管显示设定值,可以通过按键来更换显示内容。
用示波器观测三相的输出波形,并用数码管显示电路的工作状态。
二、技术指标步进电机的工作频率为:<10kHz三、设计要求1.进行方案论证,提出一个合理的设计方案并进行理论设计;2.对所设计的方案部分进行调试;3.在选择器件时,应考虑成本。
4.设计测量调试电路。
四、实验要求1.根据技术指标制定实验方案;验证所设计的电路。
2.进行实验数据处理和分析。
五、推荐参考资料1.谢自美. 电子线路设计·实验·测试. [M]武汉:华中理工大学出版社,2000年2.阎石. 数字电子技术基础. [M]北京:高等教育出版社,2006年3.童诗白、华成英.模拟电子技术基础. [M]北京:高等教育出版社,2006年4..付家才. 电子实验与实践. [M]北京:高等教育出版社,2004年5.沙占友、李学芝著.中外数字万用表电路原理与维修技术. [M]北京:人民邮电出版社,1993年六、按照要求撰写课程设计报告成绩评定表沈阳航空航天大学综合课程设计一、概述本次毕设的题目是:三相步进电机控制电路的设计。
本次毕设使用80C51单片机作为主控芯片,利用ULN2003A集成电路作为三相步进电机的驱动电路,采用单极性驱动方式,使三相步进电机能在(1)三相单三拍,(2)三相双三拍,(3)三相六拍三种工作方式下正常工作;能实现的功能有:启动/停止控制、方向控制;速度控制;用LED数码管显示工作方式。
数码管显示4×4键盘矩阵按键实验
![数码管显示4×4键盘矩阵按键实验](https://img.taocdn.com/s3/m/f9802a4477232f60ddcca1fa.png)
5、4×4键盘矩阵按键实验一、实验目的及要求键盘实质上是一组按键开关的集合。
通常,键盘开关利用了机械触点的合、断作用。
键的闭合与否,反映在行线输出电压上就是呈高电平或低电平,如果高电平表示键断开,低电平则表示键闭合,反之也可。
通过对行线电平高低状态的检测,便可确认按键按下与否。
为了确保CPU对一次按键动作只确认一次按键有效,还必须消除抖动。
当按键较多时会占用更多的控制器端口,为减少对端口的占用,可以使用行列式键盘接口,本实验中采用的4×4键盘矩阵可以大大减少对单片机的端口占用,但识别按键的代码比独立按键的代码要复杂一些。
在识别按键时使用了不同的扫描程序代码,程序运行时LED灯组会显示相应按键的键值0~15的二进制数。
本实验中P2端口低4位连接是列线,高4位连接的是行线。
二、实验原理(图)三、实验设备(环境):1、电脑一台2、STC-ISP(V6.85I)烧写应用程序3、Keil应用程序四、实验内容(算法、程序、步骤和方法):#include<STC15F2K60S2.h> //此文件中定义了STC15系列的一些特殊功能寄存器#include"intrins.h"#define uint unsigned int#define uchar unsigned charuchar code dsy_code[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0 F,0xff};uchar Pre_keyno=16,keyno=16;void delayMS(char x){uchar i;while(x--)for(i=0;i<120;i++) ;}void keys_scan(){uchar tmp;P2=0x0f;delayMS(5);tmp=P2^0x0f;switch(tmp){case 1:keyno=0;break;case 2:keyno=1;break;case 4:keyno=2;break;case 8:keyno=3;break;default:keyno=16;}P2=0xf0;delayMS(5);tmp=P2>>4^0x0f;switch(tmp){case 1:keyno+=0;break;case 2:keyno+=4;break;case 4:keyno+=8;break;case 8:keyno+=12;break;}}main(){P0=0x00;while(1){P2=0xf0;if(P2!=0xf0)keys_scan();if(Pre_keyno!=keyno){P0=~dsy_code[keyno];Pre_keyno=keyno;}delayMS(50);}}五、实验结论(结果):本实验实现了XXX功能,核心算法采用了XXX的方式,达到了预期目的。
数码管显示4×4矩阵键盘
![数码管显示4×4矩阵键盘](https://img.taocdn.com/s3/m/11a9c88bb9d528ea81c779f4.png)
《单片机原理及应用课程设计》报告——数码管显示4×4矩阵键盘的键盘号专业:自动化班级: 1106姓名:王佳俊学号: 110240171指导教师:卜旭芳2014年 10月15日1、课程设计目的1.1巩固和加深对单片机原理和接口技术知识的理解;1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。
2、课程设计要求单片机的P1口的P1.0~P1.7连接4×4矩阵键盘,P0口控制一只数码管,当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。
例如,1号键按下时,数码管显示“1”, 14号键按下时,数码管显示“E”等等。
3、硬件设计3.1 设计思想分析本任务的要求,在课程设计的基础上,添加要求,使设计能够完成当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。
3.2主要元器件介绍:AT89C51单片机 LED数码管 4X4矩阵键盘3.3 功能电路介绍AT89C51单片机:控制器。
程序中将单片机的引脚置高电平低电平,单片机通过读取IO引脚的电平,在根据读取的数据去查找数组中相应的按键值,然后在送到数码管也就是P0口去显示.(51单片机通过IO口来读取键盘的电平,再通过程序来查找对应的数值,在送到数码管去显示)LED数码管 :输出设备4X4矩阵键盘:输入设备4、软件设计4.1 设计思想通过对矩阵键盘的逐行扫描,来获得所按下键的键盘号,最终通过数码管显示出来。
4.2软件流程图开始初始化结束,返回若有按键按下,显示键盘号扫描键盘第一行若无按键按下扫描键盘第二行若无按键按下扫描键盘第三行若无按键按下扫描键盘第四行若无按键按下结束,返回4.3源程序#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//定义显示段码uchar num,temp;void delay(uchar k)//定义延时函数uchar i,j;for(i=k;i>0;i--)for(j=110;j>0;j--);}void disp(char num1)//定义显示函数{P0=table[num1];//将段码值送入P0口显示}char keyscan()//定义键盘检测函数{P1=0xfe;//给P1口送检测信号11111110,即先检测第一列有无按键被按下(key1~key4)temp=P1;//将检测信号赋给变量temptemp=temp&0xf0;//与11110000相“与”去除低四位检测部分while(temp!=0xf0)//判断是否有按键被按下,即key1-key4有任意按键被按下temp便不等于0xff{delay(5);//按键防抖动延时(时间要求不严格)while(temp!=0xf0)//延时之后再次判断{temp=P1;//进入函数说明有按键被按下,再将p1值赋给temp进行判断是哪位被按下switch(temp)//利用switch函数判断temp值{case 0xee://若P0等于0xee,即11101110,则由判断为0的位被按下即第四位(最低位),则应赋值num为0;num=0;break;case 0xde://11011110同理判断其为第三位被按下(该行第二位)num=1num=1;break;case 0xbe://同上则num=2num=2;break;case 0x7e://同上num=3num=3;break;}while(temp!=0xf0)//判断按键是否松开,循环判断直至按键松开{temp=P1;temp=temp&0xf0;}}}P1=0xfd;//给P1口再次送检测信号11111101,来检测第二列有无按键被按下(key5~key8),以下几步同上temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P1;switch(temp){case 0xed:num=4;break;case 0xdd:num=5;break;case 0xbd:num=6;break;case 0x7d:num=7;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xfb;//给P1口再次送检测信号11111011,来检测第三列有无按键被按下(key9~key12),以下几步同上temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P1;switch(temp){case 0xeb:num=8;break;case 0xdb:num=9;break;case 0xbb:num=10;break;case 0x7b:num=11;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xf7;//给P1口再次送检测信号11110111,来检测第四列有无按键被按下(key13~key16),以下几步同上temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P1;switch(temp){case 0xe7:num=12;break;case 0xd7:num=13;break;case 0xb7:num=14;break;case 0x77:num=15;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}return num;//子函数最后返回num值}void main(){P0=0x00;//清屏delay(5);//延时while(1)//主循环{disp(keyscan());//检测并显示}}}5、调试运行电路图依次按下开关k1-k16,数码管会对应显示出0—f的16个数字K=5的数码管显示4.K=16时的数码管显示F:6、设计心得体会硬件设计方面,此课题所需的硬件并不负责,只许少量的导线、简单的电路便可以完成。
基于单片机4X4矩阵键盘控制数码管显示的Proteus仿真
![基于单片机4X4矩阵键盘控制数码管显示的Proteus仿真](https://img.taocdn.com/s3/m/42ac9d6602768e9951e738b2.png)
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7
P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15
P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1
P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
39 38 37 36 35 34 33 32
21 22 23 24 25 26 27 P2.6 28 P2.7
10 11 12 13 14 15 16 17
K0
K1
K4
K5
K8
K9
KC
KD
图 3-2:当按下 K4 键时,数码管显示数字‘4’
软件设计方面,我感觉到在编写循环嵌套程序时非常容易出错,需要反复的查错 和耐心的调试。我虽然能够编写出程序,其可读性却有待于提高。
经过这次仿真设计,我对 51 系统的单片机内部构造的了解认识有了一定程度的提 高。我体会到做设计是一项细致的工作,必须要投入时间及精力,要有耐心有韧性。
我相信这几次的仿真设计会为我以后的发展打下一定的基础,我会更加努力,争取 自己在单片机的开发上有更深层次的提高,与此同时经过此次仿真,锻炼了团队协作 能力。
P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
39 38 37 36 35 34 33 32
21 22 23 24 25 26 27 P2.6 28 P2.7
10 11 12 13 14 15 16 17
K0
K1
K2
K3
K4
单片机-4x4个矩阵按键控制数码管显示数字程序
![单片机-4x4个矩阵按键控制数码管显示数字程序](https://img.taocdn.com/s3/m/0aa25a51bf1e650e52ea551810a6f524ccbfcbe0.png)
单⽚机-4x4个矩阵按键控制数码管显⽰数字程序1 #include "8051.h"2 typedef unsigned char u8;3 typedef unsigned int u16;4 u8 smgduan[]= {5/*0 1 2 3 4 5 6 7 */60x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,7/*8 9 A B C D E F */80x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};910// P0⼝为数码管的位选的8位输⼊引脚11// P0 = 0x00;121314void Delayms(u16 ms);15void shumaguan(u8 n);16void DigDisplay();17void KeyTest();18void smg(u8 n, u8 m);19void key_4x4();2021void main()22 {23while(1)24 {25 key_4x4();26 }27 }2829// 不精确的延时函数30void Delayms(u16 ms)31 {32 unsigned int i, j;33for(i = ms; i > 0; i--)34for(j = 110; j > 0; j--);35return;36 }3738// 数码管根据74HC138译码器选择对应的段(选择哪个数码管显⽰)39void shumaguan(u8 n)40 {41switch(n)42 {43case0:44 LSA = 0;LSB = 0;LSC = 0;break;45case1:46 LSA = 1;LSB = 0;LSC = 0;break;47case2:48 LSA = 0;LSB = 1;LSC = 0;break;49case3:50 LSA = 1;LSB = 1;LSC = 0;break;51case4:52 LSA = 0;LSB = 0;LSC = 1;break;53case5:54 LSA = 1;LSB = 0;LSC = 1;break;55case6:56 LSA = 0;LSB = 1;LSC = 1;break;57case7:58 LSA = 1;LSB = 1;LSC = 1;break;59 }60 }6162// 数码管显⽰数字,并以⼗进制递增63void DigDisplay()64 {65 u8 i1 = 0;66 u8 i2 = 0;67 u8 i3 = 0;68 u8 i4 = 0;69 u8 i5 = 0;70 u8 i6 = 0;71 u8 i7 = 0;72 u8 i8 = 0;7374757677for (i8 = 0; i8 < 10; i8++)78for (i7 = 0; i7 < 10; i7++)79for (i6 = 0; i6 < 10; i7++)80for (i5 = 0; i5 < 10; i5++)81for (i4 = 0; i4 < 10; i4++)82for (i3 = 0; i3 < 10; i3++)83for (i2 = 0; i2 < 10; i2++)84for (i1 = 0; i1 < 10; i1++)85 {86 u16 cnt = 10;87while (cnt--)88 {89 shumaguan(0); //选中第⼀个数码管90 P0 = smgduan[i1]; //给他送⼀个数字91 Delayms(1); //稍微延时⼀下下92 shumaguan(1); //然后切换到第⼆个数码管。
Desktop4×4键盘控制数码管显示.pdf
![Desktop4×4键盘控制数码管显示.pdf](https://img.taocdn.com/s3/m/cb555207ee06eff9aef807c6.png)
4×4键盘控制指导老师:徐庆小组成员:王宁赵越朱千财杨清霆日期:2014——6——21目录1编写目的 (2)2硬件设计及功能描述 (3)2.1硬件设计电路 (3)2.2硬件设计功能描述 (3)3软件设计及使用说明 (3)3.1主程序软件设计流程及说明 (3)3.2键盘服务程序流程图及说明 (5)11 编写目的目的:用于按键控制的系统中,每种功能一般都要求有相关数据显示,本模块就是应此种功能来制作的。
2 硬件设计及功能描述2.1 硬件设计电路4*4键盘硬件原理如图一所示,采用矩阵式键盘接口,这样可以合理地利用硬件资源,并且编程灵活。
图一 4*4键盘数码管显示硬件原理图如图二所示,这里我们只用到了前面两位。
图二数码管显示硬件原理图2.2 硬件设计功能描述按键显示0,1,2……15。
占用IO资源为IOA0-7以及IOB14、IOB15。
使用中断资源为IRQ5中的4Hz中断。
3 软件设计及使用说明3.1 主程序软件设计流程及说明整个程序一直对数码管进行数据更新和刷新,在这过程中如果发生4Hz中断,将进行按键扫描,并把更新的数据传给数码管进行显示。
主程序流程图如下图所示。
3初始化开中断IRQ5数码管服务3.2 键盘服务程序流程图及说明在这里提供了另一种键盘扫描方式,和取得健值的方法。
在这个程序中按键不是通过逐行扫描来确定的,先把四根线作为扫描线,并都送高电平,另外四根作为接收线,并从接收线取得一个数据keyfirst,然后把刚才的接收线作为扫描线,并都送高电平,把刚才的扫描线作为接收线,并从接收线取得一个数据keylast,通过对这两个数据的处理即可的初始哪个键按下,并把这个值送给uiValue,传给数码管进行显示。
程序流程图如下图所示。
初始化取得健值进入Switch语句键值处理并把处理的数据传给uiValue变量uiValue变量传给F_SingleLed()函数进行显示5。
矩阵键盘显示实验
![矩阵键盘显示实验](https://img.taocdn.com/s3/m/c35d99b86f1aff00bed51eb6.png)
矩阵键盘显示实验报告20 -20 学年第学期学院电子信息学院课程矩阵键盘显示实验姓名学号指导老师日期 20XX年XX月XX日矩阵键盘显示实验一、实验目的1、掌握矩阵键盘检测的原理和方法;2、掌握按键消抖的方法;3、再次熟悉数码管的显示。
二、实验任务从4×4矩阵键盘输入4位字符(如“15EF”),并显示于4位数码管。
三、实验原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1-1所示。
在矩阵键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
图1-1 矩阵键盘矩阵键盘的按健识别方法很多,其中最常见的方法是行扫描法。
行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,下面介绍矩阵键盘的扫描过程。
(1)判断有无键按下第一步:向所有的列输出口线输出低电平;第二步:然后将行线的电平状态读入;第三步:判断读入的行线值。
若无键按下,所有的行线仍保持高电平状态;若有键按下,行线中至少应有一条线为低电平。
(2)去除按键的抖动去抖原理:当判断到键盘上有键按下后,则延时一段时间再判断键盘的状态,若仍为有键按下状态,则认为有一个键按下,否则当作按键抖动来处理。
(3)按键识别(列或行扫描法)在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:依次将列(行)线置为低电平,即在置某根列(行)线为低电平时,其列(行)线为高电平,再逐行(列)检测各行(列)线的电平状态。
若某行为低电平,则该行线与置为低电平的列线交叉处的按键就是闭合的按键。
(4)求按键的键值根据闭合键的行值row和列值col采用计算法(如健值=行号×4+列号)或查表法将闭合键的行值和列值转换成所定义的键值。
电路原理图如下图所示。
图1-2 键盘显示实验电路四、程序流程图五、实验结果及分析总结(1)实验测试效果图如下:(2)分析总结:1、在这次的实验中我们将初始化部分、键盘扫描部分、数码管显示部分等分别写成了独立的函数,这样的程序看起来简洁、明了,在使用的时候直接调用就好了。
4乘4矩阵键盘扫描加数码管显示代码
![4乘4矩阵键盘扫描加数码管显示代码](https://img.taocdn.com/s3/m/62ff6d957c1cfad6195fa77e.png)
4*4矩阵键盘扫描加数码管显示师学院(工学院)电气工程及其自动化黎卫星/***************************************************************/ //º¯ÊýÍ·Îļþ/***************************************************************/ #include<reg51.h>#include<delay.h>#include<ciodziku.h>#include<keyjiance.h>#include<displychushihua.h>/***************************************************************/ //Ö÷º¯Êý/***************************************************************/ void main(){displaychushihua();while(1){num=keyjiance();dula=1;P0=~table[num-1];dula=0;}}/***************************************************///ÑÓʱº¯Êý/***************************************************/void delay(unsigned int z){unsigned int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/***************************************************************/ //Êý×Ö¿â/***************************************************************/ sbit dula = P2^6;sbit wela = P2^7;/***************************************************************/ /***************************************************************/ unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00//0x00Ϊ¹Ø±ÕËùÊýÂë¹ÜÏÔʾ};/***************************************************************/ //¼üÅÌɨÃè/***************************************************************/ unsigned int temp,num;/***************************************************************/ /***************************************************************/ unsigned int keyjiance()// unsigned int º¯Êý·µ»ØÖµÀàÐÍ Ê¹ÓÃvoidΪÎÞ·µ»ØÖµ»á³ö´í{P3=0XFE; //µÚÒ»Ðмì²âtemp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){ case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break;}while(temp!=0xf0)//°´¼üËÉÊÖ¼ì²â{temp=P3;temp=temp&0xf0;}//dula=1;//P0=~table[num-1];// dula=0;}}P3=0XFD; //µÚ¶þÐмì²âtemp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){ case 0xed:num=5;break;case 0xdd:num=6;break;case 0xbd:num=7;break;case 0x7d:num=8;break;} while(temp!=0xf0)//°´¼üËÉÊÖ¼ì²â{temp=P3;temp=temp&0xf0;}//dula=1;//P0=~table[num-1];// dula=0;}}P3=0XFB; //µÚÈýÐмì²âtemp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){ case 0xeb:num=9;break;case 0xdb:num=10;break;case 0xbb:num=11;break;case 0x7b:num=12;break;} while(temp!=0xf0)//°´¼üËÉÊÖ¼ì²â{temp=P3;temp=temp&0xf0;}// dula=1;// P0=~table[num-1];// dula=0;}}P3=0XF7; //µÚËÄÐпªÊ¼¼ì²âtemp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){ case 0xe7:num=13;break;case 0xd7:num=14;break;case 0xb7:num=15;break;case 0x77:num=16;break;} while(temp!=0xf0)//°´¼üËÉÊÖ¼ì²â{temp=P3;temp=temp&0xf0;}//dula=1;//P0=~table[num-1];//dula=0;}}return (num); //º¯Êý·µ»ØÖµ// dula=1;// P0=~table[num-1];// dula=0;}/***************************************************************/ /***************************************************************/ void displaychushihua(){num=17;//µÚ17¸öÊýΪ¹Ø±ÕËùÓÐÊýÂë¹Ü0x00 // dula=1;//P0=0xff;//³õʼ»¯ÇåÁã ²»¸ø¶ÏÑ¡ËÍÊý ÊýÂë¹Ü²»ÁÁ// dula=0;wela=1;P0=~0xc0;wela=0;}。
数码管显示4×4矩阵键盘
![数码管显示4×4矩阵键盘](https://img.taocdn.com/s3/m/84d99f3cee06eff9aef8072e.png)
2013年1月1.课程设计目的1.1巩固和加深对单片机原理和接口技术知识的理解;1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。
2.课程设计要求单片机的P1口的P1.0~P1.7连接4×4矩阵键盘,P0口控制一只数码管,当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。
例如,1号键按下时,数码管显示“1”, 14号键按下时,数码管显示“E”等等。
3.硬件设计3.1 设计思想分析本任务的要求,使设计能够完成当4*4矩阵键盘中的某一按键按下时,数码管上显示对应的键盘号。
则本系统主要由以下几大模块构成:显示模块,共阴极LED数码管;输入模块,4*4矩阵键盘;3.2主要元器件介绍矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。
在行线和列线的每一个交叉点上,设置一个按键。
这样键盘中按键的个数是4×4个。
这种行列式键盘结构能够有效地提高单片机系统中I/O 口的利用率。
数码管不同位显示的时间间隔可以通过调整延时程序的延时长短来完成。
数码管显示的时间间隔也能够确定数码管显示时的亮度,若显示的时间间隔长,显示时数码管的亮度将亮些,若显示的时间间隔短,显示时数码管的亮度将暗些。
若显示的时间间隔过长的话,数码管显示时将产生闪烁现象。
所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮度,又要数码管显示时不产生闪烁现象。
4.1 设计思想按键采用线反转法先把列线置成低电平,行线置成输入状态,读行线;再把行线置成低电平,列线输入状态,读列线。
当有键按下时,由两次所读状态即可确定所按键的位置,不需扫描,键盘响应速度大大加快。
四乘四键盘控制LED数码管显示电路.doc资料
![四乘四键盘控制LED数码管显示电路.doc资料](https://img.taocdn.com/s3/m/27a0af6ac850ad02de804124.png)
四乘四键盘控制LED数码管显示电路目录一、设计内容及要求 (2)二、系统硬件设计方案 (2)三、系统软件设计 (8)四、效果演示 (12)摘要矩阵式键盘系统以N个端口链接控制N*N个按键,使数字显示在LED数码管上。
单片机控制的是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备的硬件、软件等各个部分进行实现。
对于4*4矩阵式键盘,我想采用STC89C52RC单片机为核心,主要由矩阵式键盘电路、译码器、显示电路等组成,软件选用汇编语言编程。
单片机将检测到的按键信号转成数字量,显示于LED显示器上。
该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。
一、设计内容及要求用protues仿真设计一个单片机小系统,该小系统外接一个4*4键盘及一个LED数码管,要求按下一个键,数码管上显示该键的对应号码。
键盘的布局如下图所示:主要内容如下:1.根据矩阵式键盘的特点,进行键盘控制系统的整体研究与设计。
2.LED实时显示信息。
3.采用软件编程方法实现按键信息的提取和显示。
二、系统硬件设计方案1.芯片的选择STC89C52RC单片机是51系列单片机的一个成员,是8051单片机的简化版。
内部自带8K字节可编程FLASH存储器,拥有2K+字节的EEPROM作为程序存储器的拓展。
由于STC89C52RC具有下图中的配置,因此具有结构简单、造价低廉、效率高的特点,省去了外部的RAM、ROM和接口器件,减少了硬件的开销,节省了成本,提高了系统的性价比。
STC89C52RC的主机系统图:STC89C52RC的实物图:2.系统原理图2.1时钟电路时钟电路用来提供单片机片内各种位操作的时间基准。
51单片机芯片内部有一个高增益反相放大器,用于构成时钟振荡电路,XTAL1为该放大器的输入端、XTAL2为该放大器的输出端。
借助内部时钟方式或外部时钟方式形成时钟。
数码管显示4×4矩阵键盘的键盘号--万意要点
![数码管显示4×4矩阵键盘的键盘号--万意要点](https://img.taocdn.com/s3/m/bf17eae169dc5022abea003b.png)
数码管显示4X4矩阵键盘的键盘号学院:物理与电子工程学院专业:自动化班级:13级7班学号:姓名:万意指导教师:马世榜日期:2013年12月31日目录1引言 (1)2设计方案 (2)3硬件设计 (3)3.1AT89S51 (3)3.24*4矩阵式键盘 (6)3.2.1 矩阵式键盘介绍 (6)3.2.2 键盘扫描原理 (7)3.3硬件电路连接 (9)3.4.1 单片机时钟电路 (9)3.4.2单片机复位电路 (10)3.4.3 矩阵式键盘电路 (10)3.4.4 LED数码管显示电路 (10)4软件设计 (12)4.1所用软件简介 (12)4.1.1 Keil (12)4.1.2 Proteus (12)4.2程序流程图 (14)4.3源程序 (15)5电路原理图 (17)参考文献 (18)1引言矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,即时在LED数码管上。
单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。
4*4矩阵式键盘采用AT89S51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用汇编语言编程。
单片机将检测到的按键信号转换成数字量,显示于LED显示器上。
该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。
2设计方案单片机的P1口的P1.0~P1.7连接4×4矩阵键盘,P0口控制一只数码管,当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。
例如,1号键按下时,数码管显示“1”, 14号键按下时,数码管显示“E”等等。
本论文主要研究单片机控制的键盘识别显示系统,分别对按键信息和显示电路以及软、硬件各个部分进行研究。
主要内容如下:①根据矩阵式键盘的特点,进行键盘控制系统的整体研究与设计;② LED实时显示按键信息;③采用软件编程的方法实现按键信息的提取和显示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
沈阳航空航天大学综合课程设计三相步进电机控制器电路的设计班级 94020101 学号 2009040201023 学生姓名 XXXXXXXXX 指导教师常丽东课程设计任务书一、设计说明步进电机是工业过程控制及仪表控制中的主控元件之一,作为执行元件其特点为能够快速起启停、精度高且能直接接收数字量,由于这些特点使其在定位场合得到了广泛的应用。
设计一个三相步进电机控制器,使其能够控制步进电机的工作状态,如步进电机正、反转,步进电机的工作方式等。
用键盘设定步进电机的工作频率,工作方式,并用数码管显示设定值,可以通过按键来更换显示内容。
用示波器观测三相的输出波形,并用数码管显示电路的工作状态。
二、技术指标步进电机的工作频率为:<10kHz三、设计要求1.进行方案论证,提出一个合理的设计方案并进行理论设计;2.对所设计的方案部分进行调试;3.在选择器件时,应考虑成本。
4.设计测量调试电路。
四、实验要求1.根据技术指标制定实验方案;验证所设计的电路。
2.进行实验数据处理和分析。
五、推荐参考资料1.谢自美. 电子线路设计·实验·测试. [M]武汉:华中理工大学出版社,2000年2.阎石. 数字电子技术基础. [M]北京:高等教育出版社,2006年3.童诗白、华成英.模拟电子技术基础. [M]北京:高等教育出版社,2006年4..付家才. 电子实验与实践. [M]北京:高等教育出版社,2004年5.沙占友、李学芝著.中外数字万用表电路原理与维修技术. [M]北京:人民邮电出版社,1993年六、按照要求撰写课程设计报告成绩评定表一、概述本次毕设的题目是:三相步进电机控制电路的设计。
本次毕设使用80C51单片机作为主控芯片,利用ULN2003A集成电路作为三相步进电机的驱动电路,采用单极性驱动方式,使三相步进电机能在(1)三相单三拍,(2)三相双三拍,(3)三相六拍三种工作方式下正常工作;能实现的功能有:启动/停止控制、方向控制;速度控制;用LED数码管显示工作方式。
键盘输入工作频率。
本次课程设计采用80C51单片机作为主控芯片,程序采用C语言来编写,驱动电路采用ULN2003A集成电路,显示采用7SEG-MPX4-CC,即四位共阴数码管,P0接段码,并用8 只1K欧左右电阻上拉。
P2的4 位IO口接位选码。
正转,数码管显示1。
反转,数码管显示2.不转,数码管显示0.采用Proteus软件进行仿真。
在Keil uVsuon3编程环境下编程和编译生成HEX文件,导入到80C51单片机,实现对各个模块的控制,实现我们所需要的功能。
本次课程是对毕业设计的基础设计,即实现4x4键盘输入,数码管显示输入数字的设计。
二、方案论证1 步进电机驱动方案选择方案1:使用功率三极管等电子器件搭建成功率驱动电路来驱动电机的运行。
这种方案的驱动电路的优点是使用电子器件联接,电路比较简单,但容易受干扰,信号不够稳定,缺点是器件较大而不便电路的集成,使用时很不方便,联接时容易出错误。
方案2:使用专门的电机驱动芯片ULN2003A来驱动电机运行。
驱动芯片的优点是便于电路的集成,且驱动电路简单,驱动信号很稳定,不易受外界环境的干扰,因而设计的三相步进电机控制系统性能更好。
通过对两种方案的比较,我选择方案2使用ULN2003A电机驱动芯片来作为驱动。
2 数码管显示方案选择方案1:把所需要显示的数据通过专用的七段显示译码器(例如7448)的转换输出给LED显示屏。
优点是输出比较简单,可以简化程序,但增加了芯片的费用,电路也比较复杂。
方案2:通过程序把所要的数据转化为七段显示的数据,直接通过单片机接口来显示,其优点是简化了电路,但增加了软件编写的负担。
通过对两种方案进行比较,我选择通过软件编写来输出显示信号,即单片机直接和显示器相连。
3 控制状态的读取方案1:把按键接到单片机的中断口,若有按键按下,单片机接收到中断信号,再通过软件编写的中断程序来执行中断,优点是接线简单,简化了电路,但软件编写较为复杂,不易掌握。
方案2:不使用中断,直接把开关分别接在单片机的接口上,通过查询端口信号来动作。
通过对方案的比较,我选择通过中断来读取端口信号。
三、控制系统的工作原理1 三相步进电机控制工作原理(1)步进电机的工作原理图1 步进电机三相接线图如图1所示,U1、V1、W1接电源,分别有三个开关控制,U2、V2、W2分别接地。
如果给处于错齿状态的相通电,则转子在电磁力的作用下,将向磁导率最大(即最小磁阻位置)位置转动,即向趋于对齿的状态转动。
(2) 步进电机的工作方式三相步进电机可以在三相单拍,三相双拍和三相六拍三种工作过方式下工作。
在三相单三拍工作方式运行时,通电顺序为:A-B-C-A;三相双三拍工作方式运行时,通电顺序为:AB-BC-CA-AB;三相六拍工作方式运行时,通电顺序为:A-AB-B-BC-C-CA-A,因此要输出相应的控制字进行控制。
(3)步进电机的转向控制如果给定工作方式正序换相通电 ,步进电机正转。
若步进电机的励磁方式为三相六拍 ,即 A-AB-B-BC-C-CA。
如果按反序通电换相 ,即则电机就反转。
其他方式情况类似。
(4)步进电机的启停控制步进电机由于其电气特性,运转时会有步进感 ,即振动感。
为了使电机转动平滑 ,减小振动 ,可在步进电机控制脉冲的上升沿和下降沿采用细分的梯形波 ,可以减小步进电机的步进角 ,提高电机运行的平稳性。
在步进电机停转时 ,为了防止因惯性而使电机轴产生顺滑 ,则需采用合适的锁定波形 ,产生锁定磁力矩 ,锁定步进电机的转轴 ,使步进电机的转轴不能自由转动。
(5)步进电机的速度控制脉冲的频率越高,电动机运转的速度越快,否则,速度就越慢。
因而通过延时程序控制输出脉冲的频率,就可以实现对步进电机速度的控制。
2 控制系统的设计思路此次我所设计的是一个三相步进电机控制系统,主要由单片机80C51,3相步进电机,7段数码管,及一些其他相关元件设计而成。
可以通过开关来控制系统的启/停工作,当系统运转时,用开关来控制方向,并使相应的指示灯亮起,同样由开关来选择工作模式。
运转时,用7段数码管来显示工作状态。
最后根据思路所设计出来的硬件图设计相适应的软件。
3 控制系统的整体框图图2为系统总体设计整体框图,单片机80C51,ULN2003A驱动芯片,三相步进电机,7段LED数码管等一些电路模块组成。
图2 系统的整体框图4 控制系统的硬件设计设计一个单片机三相步进电机控制系统要求系统具有如下功能:(1)用4x4键盘输入步进电机的工作频率及工作状态,如单三拍、双三拍、三相六拍。
(2)正转时数码管显示1,反转时数码管显示2,不转时数码管显示0;(3)用数码管显示工作状态。
四、电路设计1.单片机最小系统单片机最小系统由晶振、瓷片电容、电解电容、电阻、开关及电源组成。
单片机最小系统复位电路的极性电容的大小直接影响单片机的复位时间,一般采用10~30uF,51单片机最小系统容值越大需要的复位时间越短;单片机最小系统晶振可以采用6MHz或者11.0592MHz,在正常工作的情况下可以采用更高频率的晶振;51单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快,单片机最小系统起振电容一般采用15~33pF,并且电容离晶振越近越好,晶振离单片机越近越好。
图3 单片机最小系统2.4x4矩阵键盘电路首先,对P1赋值使P1=0x11,然后令第一行即P17等于零,如果第一行有按键按下,则P0至P3的值会发生变化:如果第一个按键按下,则P10等于0;如果第二个按键按下,则P11等于0;如果第三个按键按下,则P12等于0;如果第四个按键按下,则P13等于0。
按此规律,直至四行扫描完毕。
图4 矩阵键盘3.数码管显示电路四位7段数码管,位选端接P2口,段选端通过排阻连接到接P0口,扫描函数扫描,使数码管不断显示输入数据。
图5 数码管显示电路五、软件设计1主程序流程图主函数进行键盘扫描,将按键值给显示函数,显示函数对按键值进行处理。
图6 主函数流程图2显示函数流程图图7 显示模块的程序框图六、性能的测试1、输入、显示一位数字图8 显示一位数字2、输入、显示两位数字图9 显示两位数字3、输入、显示三位数字图10 显示三位数字4、输入、显示四位数字图11 显示四位数字七、结论键盘输入0到9的任意数字,数码管显示;再次输入任意数字,前一位数字向前移位,作为十位数字,后输入数字,作为个位数字;按此规律,可以输入任意一位、两位、三位或四位数字。
八、性价比本设计用简单的常用的器件以及易编写的软件程序实现了要求功能。
51单片机价格便宜甚至实验室即可提供;共阴数码管相较液晶显示,不尽价格便宜,而且简单、易实现,4x4键盘既是简单的按键开关;电容、电阻等价格几乎不计,所有这些器件实验室都能提供,成本只有几十元。
性价比偏高。
九、课设体会经过一个月的努力和付出,完成了本次课程设计,通过本次课程设计提高了我的设计方案和分析问题的能力,加深了对理论知识的理解,做到了理论知识与实践的联系。
学会了Proteus这个仿真软件的运用,积累进行课程设计的经验。
其次,通过本次课程设计,大大提高了自己的动手能力和设计能力,加深对Proteus软件功能的理解,学会用这个软件设计三相步进电机控制系统,将理论知识与实践相联系,为以后在学习和工作的发展打下一个良好的基础。
然后,通过该课程设计,初步理解了利用计算机控制技术进行三相步进电机控制系统的设计。
最后,我明白:知识不是孤立的,相互之间有联系的,我们要学会理解知识点以及学科之间的融合渗透。
本次课程设计涉及到了计算机技术,自动控制技术,微机技术,数字电子技术等众多知识,因而我们需要把把各个学科之间的知识融合起来,形成一个整体。
认识到Proteus这个软件的强大功能,为以后的学习和工作打下基础。
我相信未来是属于我们的,随着科学技术的发展,控制技术的应用将将越来越广泛,发挥越来越重要的作用。
参考文献[1] 阎石主编. 数字电子技术. [M]北京:高等教育出版社,2006年[2] 陈振官等编著. 新颖高效声光报警器. [M]北京:国防工业出版社,2005年[3] 王东峰等主编.单片机C语言应用100例. [M]北京:电子工业出版社,2009年[4] 胡耀辉等主编.单片机系统开发实例经典. [M]北京:冶金工业出版社,2006年[5] 李鸿主编.单片机原理及应用. [M]湖南:湖南大学出版社,2005年[6] 谭浩强主编.C语言程序设计. [M]北京:清华大学出版社,2005年附录I 总电路图图12 总电路图附录II 元器件清单附录Ⅲ源程序#include<reg51.h>#define uint unsigned int#define uchar unsigned charsbit P17=P1^7;sbit P16=P1^6;sbit P15=P1^5;sbit P14=P1^4;uint count=0,num=0,k;uchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//*****************延时子程序***************************void delay(uint i){uint j;for(;i>0;i--)for(j=0;j<125;j++);}//**************矩阵键盘扫描子程序***********************uint keyscan(){uchar temp,keynum;P1=0xff;P17=0;//**************扫描第一行**********************temp=P1;temp&=0x0f;if(temp!=0x0f){delay(10);temp=P1;temp&=0x0f;if(temp!=0x0f){temp=P1;temp&=0x0f;switch(temp){case 0x0e:keynum=0;break;case 0x0d:keynum=1;break;case 0x0b:keynum=2;break;case 0x07:keynum=3;break;}while(temp!=0x0f){temp=P1;temp&=0x0f;}}}P1=0xff;P16=0;//**************扫描第二行********************** temp=P1;temp&=0x0f;if(temp!=0x0f){delay(10);temp=P1;temp&=0x0f;if(temp!=0x0f){temp=P1;temp&=0x0f;switch(temp){case 0x0e:keynum=4;break;case 0x0d:keynum=5;break;case 0x0b:keynum=6;break;case 0x07:keynum=7;break;}while(temp!=0x0f){temp=P1;temp&=0x0f;}}}P1=0xff;P15=0;//**************扫描第三行********************** temp=P1;temp&=0x0f;if(temp!=0x0f){delay(10);temp=P1;temp&=0x0f;if(temp!=0x0f){temp=P1;temp&=0x0f;switch(temp){case 0x0e:keynum=8;break;case 0x0d:keynum=9;break;case 0x0b:keynum=10;break;case 0x07:keynum=11;break;}while(temp!=0x0f){temp=P1;temp&=0x0f;}}}P1=0xff;P14=0;//**************扫描第四行********************** temp=P1;temp&=0x0f;if(temp!=0x0f){delay(10);temp=P1;temp&=0x0f;if(temp!=0x0f){temp=P1;temp&=0x0f;switch(temp){case 0x0e:keynum=12;break;case 0x0d:keynum=13;break;case 0x0b:keynum=14;break;case 0x07:keynum=15;break;}while(temp!=0x0f){temp=P1;temp&=0x0f;}}}return keynum;}//********************显示子程序************************* void Display(uint num){uint ge,shi,bai,qian;qian=num/1000;P0=table[qian];P2=0xfe;delay(10);P2=0xff;bai=num%1000/100;P0=table[bai];P2=0xfd;delay(10);P2=0xff;shi=num%100/10;P0=table[shi];P2=0xfb;delay(10);P2=0xff;ge=num%10;P0=table[ge];P2=0xf7;delay(10);P2=0xff;}void Init(void){EA=1;//**************开总中断EX1=1;//*************开外部中断0IT1=0;//*************设置为电平触发方式}//*********************主程序*************************** void main(void){uint i,count1;Init();while(1){count=keyscan(); //调用扫键子程序Display(num);}17}//*********************END******************************//*********************中断子程序************************ void Init1() interrupt 2{count=keyscan();num=num*10+count;if(num>9999)num=num%10;}//**********18。