4乘4矩阵键盘输入数码管显示四位数
实验四4×4键盘输入

实验四: 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矩阵键盘的键盘号专业:电子信息科学与技术班级:姓名:学号:指导教师: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矩阵式键盘输入程序

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矩阵键盘控制数码管显示按键值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矩阵键盘输入数码管显示四位数要点

Proteus 软件功能的理解,学会用这个软件设计三相步进电机控制系统,将理论
知识与实践相联系,为以后在学习和工作的发展打下一个良好的基础
。然后,
通过该课程设计, 初步理解了利用计算机控制技术进行三相步进电机控制系统的
设计。
最后,我明白:知识不是孤立的,相互之间有联系的,我们要学会理解知识
点以及学科之间的融合渗透。 本次课程设计涉及到了计算机技术, 自动控制技术,
微机技术, 数字电子技术等众多知识, 因而我们需要把把各个学科之间的知识融
合起来,形成一个整体。认识到 Proteus这个软件的强大功能,为以后的学习和
工作打下基础 。
我相信未来是属于我们的, 随着科学技术的发展, 控制技术的应用将将越来
越广泛,发挥越来越重要的作用。
参考文献
[1] 阎石主编 . 数字电子技术 . [M] 北京:高等教育出版社, 2006 年 [2] 陈振官等编著 . 新颖高效声光报警器 . [M] 北京:国防工业出版社, 2005 年 [3] 王东峰等主编 .单片机 C 语言应用 100 例 . [M] 北京:电子工业出版社, 2009 年 [4] 胡耀辉等主编 .单片机系统开发实例经典 . [M] 北京:冶金工业出版社, 2006 年 [5] 李鸿主编 .单片机原理及应用 . [M] 湖南:湖南大学出版社, 2005 年 [6] 谭浩强主编 .C 语言程序设计 . [M] 北京:清华大学出版社, 2005 年
4X4矩阵式键盘输入程序

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矩阵键盘-汇编语言

目录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矩阵键盘输入数码管显示四位数

沈阳航空航天大学综合课程设计三相步进电机控制器电路的设计班级学号 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数码管显示工作方式。
- 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。