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

合集下载

实验四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矩阵式键盘识别

4×4矩阵式键盘识别

4×4矩阵式键盘识别[实验任务]用AT89S51的并行口P3接4×4矩阵键盘,以P3.0-P3.3作输入线,以P3.4-P3.7作输出线;在每一个数码管上显示每个按键的“0-F”序号。

[硬件电路]备注:P2.7-P2.4作为输入线,P2.3-2.0作为输出线。

[DPY-1实验板连接]用排线把JP-CODE连到JP8是,注意:a接P0.0;b接P0.1;c接P0.3……把JP-CS连到JP14上,注意:4H接P2.4;3H接P2.5;2H接P2.6;1H接P2.7;用排线把JP-KEY连到JP12上,注意1,2,3,4,5,6,7,8,分别对应P3.0,P3.1,P3.3,P3.4……[实验原理]每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。

矩阵的行线和列线分别通过两并行接口和CPU通信。

键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。

两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。

[C语言源程序]#include <reg52.h>unsigned char code seg7code[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; unsigned char k;void delay10ms(void) //延时程序{unsigned char i,j;for(i=20;i>0;i--)for(j=248;j>0;j--);}void Getch ( ){ unsigned char X,Y,Z;P2=0xff;P2=0xf0; //先对P2置数行扫描if(P2!=0xf0) //判断是否有键按下{delay10ms(); //延时,软件去干扰if(P2!=0xf0) //确认按键按下X = P2;{X=P2; //保存行扫描时有键按下时状态P2=0x0f; //列扫描Y=P2; //保存列扫描时有键按下时状态Z=X|Y; //取出键值switch ( Z ) //判断键值(那一个键按下){case 0x77: k=0; break; //对键值赋值case 0x7b: k=1; break;case 0x7d: k=2; break;case 0x7e: k=3; break;case 0xb7: k=4; break;case 0xbb: k=5; break;case 0xbd: k=6; break;case 0xbe: k=7; break;case 0xd7: k=8; break;case 0xdb: k=9; break;case 0xdd: k=10;break;case 0xde: k=11;break;case 0xe7: k=12;break;case 0xeb: k=13;break;case 0xed: k=14;break;case 0xee: k=15;break;}}}}void main(void){while(1){ P2=0xff;Getch();P0=seg7code[k]; //查表LED输出P1=0xf0; //输出相同的四位数据。

实现4位数码管与4x4按键的移位显示

实现4位数码管与4x4按键的移位显示

实现4位数码管与4x4按键的移位显示,还有小数点的按键功能,注意,本例使用的是共阳数码管,用共阴的要修改一下段码和位选。

#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intunsigned char code LED7Code[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//uint i=0,a=16,b=16,c=16;uchar num[4]={16,16,16,16};uchar _FLAG = 0;uchar hang=0;uchar lie=0;uchar key_in; //读入的按键信息,检测是否有键按下//uint n=0;//uint buff;void delay(uchar t){uchar i,j;for(i=0;i<t;i++){for(j=100;j>0;j--);{ ;}}}/*void cshh(){IT1=1;//INT0下降沿触发EX1=1; //使能INT0EA=1; //开总中断PX1=0;}*/uint scankey(){P2=0xf0;delay(10);if((P2&0xf0)!=0xf0){switch(P2){case 0x70: hang=1;break; case 0xb0: hang=2;break; case 0xd0: hang=3;break; case 0xe0: hang=4;break; default: break;}delay(10);P2=0x0f;if((P2&0x0f)!=0x0f){switch(P2){case 0x07: lie=1; break; case 0x0b: lie=2; break; case 0x0d: lie=3; break; case 0x0e: lie=4; break; default: break;}}delay(5);return(((hang-1)*4+lie)-1);}else return(16);}uchar checkKey(void) {uchar key_1, key_2;static uchar key;P2 = 0x0F;key_1 = P2;key_1 = key_1 & 0x0F;delay(5);key_2 = P2;key_2 = key_2 & 0x0F;if(key_1 == key_2){if(key_2 == 0x0f) //键弹起{if(_FLAG == 1){_FLAG = 2; //_FLAG=2表示按键弹起,一次按下动作结束return key;}else if(_FLAG == 0){return 0xff;}}else //键按下{if(_FLAG == 0){_FLAG = 1; //_FLAG=1表示按键按下,还未弹起key = scankey();}}}else{return 0xff;}}void display()//显示函数{uchar j, wei=0xff; //位选信号首先选中最右侧的LED灯(即num[7]对应的LED灯)delay(1);wei=0xfe;delay(1);/* if(key_in==15){P0 = LED7Code[num[0]]; //送段码信号}else{ */for(j=0; j<4; j++){ //P0 = 0xff;//delay(1);P0 = LED7Code[num[j]]; //送段码信号P1 = wei; //送某一个LED灯的位选信号delay(1);P1 = 0xff; //清当前的位选信号delay(1);wei = wei << 1 | 0x01; //位选信号左移,依次向左选中num[6]、num[5]、num[4]、num[3]、num[2]、num[1]、num[0]所对应的LED灯}// }}void keyFun(uchar new_key){num[3] = num[2]; //实现LED灯显示向左滚动num[2] = num[1];num[1] = num[0];num[0] = new_key;}void main(){//cshh(); //中断初始化uchar m=0,n=17;while(1){key_in = checkKey(); //检测是否有键按下,并获取键值key_in==0xc0||key_in==0xf9||key_in==0xa4||key_in==0xb0||key_in==0x99||key_in==0x92||key_i n==0x82||key_in==0xf8||key_in==0x80||key_in==0x90if(key_in != 0xff) //如果键值不等于0xff,说明有键按下{if(_FLAG==2 && (key_in>=0 && key_in<=15)) //flag=2表示一次按键按下过程结束{_FLAG = 0; //把_FLAG=0,为下一次按键按下作准备if(key_in<10){m=key_in;keyFun(key_in); //把读入的新按键值向左滚动显示在LED灯上}else if(key_in==15){key_in=m+n;num[0] = key_in;//keyFun(key_in); //把读入的新按键值向左滚动显示在LED灯上}}}display();//delay(8);}}。

4乘4矩阵式键盘使用

4乘4矩阵式键盘使用

4乘4矩阵式键盘在单片机中的应用--C语言下图为4*4键盘的结果图,用单片机的P1口接4×4矩阵键盘,接法如图所示,用数码管显示按键的值,按下键S1,数码管显示0,按下S2,数码管显示1,按下S16,显示F。

先看程序代码:#include<reg51.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charuchar code table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//八段数码管对应0—F值。

void Delay_1ms(uint i)//1ms延时{uchar x, j;for(j=0;j<i;j++)for(x=0;x<=148;x++);}void delay()//消除按键抖动延时{int i,j;for(i=0; i<=10; i++)for(j=0; j<=2; j++);}uchar Keyscan(void){uchar i,j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf7};for(j=0; j<4; j++){P1 = Buffer[j];delay();temp = 0x10;for(i=0; i<4; i++){if(!(P1 & temp)){return (i+j*4);}temp <<= 1;}}}void Main(void){uchar Key_V alue; //读出的键值while(1){P1 = 0xf0;if(P1 != 0xf0){Delay_1ms(15); //按键消抖if(P1 != 0xf0){Key_Value = Keyscan();}}P0 = table[Key_V alue];//P0口输出数据到数码管}}代码分析:程序从Main开始执行,Key_V alue用来存放Keyscan();的返回值,Key_V alue为1,则数码管会显示1。

4乘4矩阵键盘输入数码管显示四位数要点

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

机电单片机课程设计--4乘4矩阵键盘-汇编语言

机电单片机课程设计--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矩阵键盘的工作原理与编程

4×4矩阵键盘的工作原理与编程

4×4矩阵键盘的工作原理与编程ME300B单片机学习开发系统应用之三---4×4矩阵键盘的工作原理与编程作者:山西太原贵国庆本文介绍如何在ME300B型51/AVR单片机学习开发系统上使用数码管显示4×4矩阵键盘的键值。

一、硬件工作原理的简单介绍该实验使用ME300B上的8位数码管显示电路和4×4矩阵键盘电路。

现将这二部分的电路工作原理进行简单的介绍:1、4×4矩阵键盘的工作原理矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。

在行线和列线的每一个交叉点上,设置一个按键。

这样键盘中按键的个数是4×4个。

这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。

图1为ME300B矩阵键盘电路图,行线接P1.4-P1.7,列线接P1.0-P1.3。

地显示。

图3 数码管电路数码管不同位显示的时间间隔可以通过调整延时程序的延时长短来完成。

数码管显示的时间间隔也能够确定数码管显示时的亮度,若显示的时间间隔长,显示时数码管的亮度将亮些,若显示的时间间隔短,显示时数码管的亮度将暗些。

若显示的时间间隔过长的话,数码管显示时将产生闪烁现象。

所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮度,又要数码管显示时不产生闪烁现象。

在ME300B单片机开发系统中使用数码管来显示信息时,要将JP2的2、3端短接。

见图3二、演示程序的编程方法1、4×4矩阵键盘的编程方法:1.1、先读取键盘的状态,得到按键的特征编码。

先从P1口的高四位输出低电平,低四位输出高电平,从P1口的低四位读取键盘状态。

再从P1口的低四位输出低电平,高四位输出高电平,从P1口的高四位读取键盘状态。

将两次读取结果组合起来就可以得到当前按键的特征编码。

使用上述方法我们得到16个键的特征编码。

举例说明如何得到按键的特征编码:假设“1”键被按下,找其按键的特征编码。

4乘4键盘与四位七段数码管的应用源程序、电路仿真图

4乘4键盘与四位七段数码管的应用源程序、电路仿真图

/* ch05-4-4.c - 4x4键盘与4个7节显示器实验, P1.4~7为共用扫描信号 *//* P1.0~3为键盘输入值,P2为7节显示器直接输出 *///==声明区================================================ #include <reg51.h> // 定义8051暂存器之标头档#define KEYP P2 // 扫瞄输出端口(高位元)及键盘输入端口(低位元) #define SEG7P P0 // 7节显示器(g~a)输出埤unsigned char code TAB[17]= // 共阳7节显示器(g~a)编码{ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, // 数字0-40x92, 0x82, 0xf8, 0x80, 0x98, // 数字5-90xa0, 0x83, 0xa7, 0xa1, 0x84, // 字母a-e(10-14)0x8e, 0xbf}; // 字母F(15),负号(-)unsigned char disp[4]={ 0xbf, 0xbf, 0xbf, 0xbf }; // 显示阵列初值为负号(-)unsigned char scan[4]={ 0xef, 0xdf ,0xbf ,0x7f }; // 7显示器及键盘之扫瞄码void delay1ms(int); // 声明延迟函数void scanner(void); // 声明扫瞄函数//==主程序================================================ main() // 主程序开始{ while(1) // 无穷回圈,程序一直跑scanner(); // 扫瞄键盘及显示7段显示器} // 主程序结束// === 延迟函数,延迟约x*1ms ================================void delay1ms(int x) // 防弹跳函数开始{ int i,j; // 声明整数变数ifor(i=0;i<x;i++) // 计数x次,延迟约*1msfor(j=0;j<120;j++); // 计数120次,延迟约1ms} // 防弹跳函数结束// ======= 扫瞄4*4键盘及4个7节显示器函数 ================void scanner(void) // 扫瞄函数开始{ unsigned char col,row,dig; // 声明变数(col:行,row:列,dig:颢示位)unsigned char rowkey,kcode; // 声明变数(rowkey:列键值,kcode:按键码)for(col=0;col<4;col++) // for回圈,扫瞄第col行{ KEYP = scan[col]; // 高4位输出扫瞄信号,低4位元输入列值SEG7P = disp[col]; // 输出第col行数字rowkey= ~KEYP & 0x0f;// 读入KEYP低4位,反相再清除高4位求出列键值if(rowkey != 0) // 若有按键{ if(rowkey == 0x01) row=0;// 若第0列被按下else if(rowkey == 0x02) row=1;// 若第1列被按下else if(rowkey == 0x04) row=2;// 若第2列被按下else if(rowkey == 0x08) row=3;// 若第3列被按下kcode = 4 * col + row; // 算出按键之号码for(dig = 0; dig < 3 ; dig++) // 显示阵列之左3字disp[dig]=disp[dig+1]; // 将右侧编码左移1位disp[3]=TAB[kcode]; // 键值编码後,写入最右侧while(rowkey != 0) // 当按钮未放开rowkey=~KEYP & 0x0f; // 再读入列键值} // if叙述(有按键时)结束delay1ms(4); // 延迟4ms} // for回圈结束(扫瞄col行) } // 扫瞄函数scanner()结束电路仿真图:。

数码管显示4×4键盘矩阵按键实验

数码管显示4×4键盘矩阵按键实验

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的方式,达到了预期目的。

矩阵式键盘控制数码管显示

矩阵式键盘控制数码管显示
完成实训报告十
7
谢谢观赏!
二、工作原理
当扫描开始时, 首先将P1.7列初始值设置为低电平, 即P
3
三、程序流程图 ——主程序
开始
初始化
按键查询
YES
A=FFH?
NO
调用消除抖动子程序转Leabharlann 功能处理程序AAAA 1234
结束
4
四、程序清单
独立式键盘控制灯移动程序.doc
5
五、实验板上测试
观察实验结果并记录: 按下不同按键开关,可以看到P0端口的
实训十一: 矩阵式键盘控制数码管显示
功能说明: 使用4*4矩阵式键盘控制第一个数码
管显示0~F。
1
一、电路图
4条列线的一端分别与单片机P1口中的P1.4、 P1.5、 P1.6. P1.7 相接,另一端通过上拉电阻接到+5V电源上,平时使 列线处于高电平状态;而4条行线的一端分别与P1口中的 P1.0、 P1.1、 P1.2、 P1.3相接。16个按键设置在行、列 2 线交点上。
灯作不同方向的移动或闪烁,说明是在执 行不同功能键的处理程序。 按DL1键,亮灯从右向左移动 按DL2键,亮灯从左向右移动 按DL3键,左边4只灯与右边4只灯交替闪亮 按DL4键,8个灯闪烁
6
码管显示0; 作业布置按下DL2,第二个数
码管显示1; 按下DL3,第三个数 码管显示2; 按下DL4,第四个数 码管显示3 。

基于单片机4X4矩阵键盘控制数码管显示的Proteus仿真

基于单片机4X4矩阵键盘控制数码管显示的Proteus仿真

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个矩阵按键控制数码管显示数字程序

单⽚机-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); //然后切换到第⼆个数码管。

矩阵键盘显示实验

矩阵键盘显示实验

矩阵键盘显示实验报告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、在这次的实验中我们将初始化部分、键盘扫描部分、数码管显示部分等分别写成了独立的函数,这样的程序看起来简洁、明了,在使用的时候直接调用就好了。

4X4矩阵键盘及显示电路设计说明

4X4矩阵键盘及显示电路设计说明

4X4矩阵键盘及显示电路设计FPGA在数字系统设计中的广泛应用,影响到了生产生活的各个方面。

在FPGA 的设计开发中,VHDL语言作为一种主流的硬件描述语言,具有设计效率高,可靠性好,易读易懂等诸多优点。

作为一种功能强大的FPGA数字系统开发环境,Altera公司推出的Quar-tUSⅡ,为设计者提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程,为使用VHDL语言进行FPGA设计提供了极大的便利。

矩阵键盘作为一种常用的数据输入设备,在各种电子设备上有着广泛的应用,通过7段数码管将按键数值进行显示也是一种常用的数据显示方式。

在设计机械式矩阵键盘控制电路时,按键防抖和按键数据的译码显示是两个重要方面。

本文在QuartusⅡ开发环境下,采用VHDL语言设计了一种按键防抖并能连续记录并显示8次按键数值的矩阵键盘及显示电路。

一、矩阵键盘及显示电路设计思路矩阵键盘及显示电路能够将机械式4×4矩阵键盘的按键值依次显示到8个7段数码管上,每次新的按键值显示在最右端的第O号数码管上,原有第0~6号数码管显示的数值整体左移到第1~7号数码管上显示,见图1。

总体而言,矩阵键盘及显示电路的设计可分为4个部分:(1)矩阵键盘的行及列的扫描控制和译码。

该设计所使用的键盘是通过将列扫描信号作为输入信号,控制行扫描信号输出,然后根据行及列的扫描结果进行译码。

(2)机械式按键的防抖设计。

由于机械式按键在按下和弹起的过程中均有5~10 ms的信号抖动时间,在信号抖动时间无法有效判断按键值,因此按键的防抖设计是非常关键的,也是该设计的一个重点。

(3)按键数值的移位寄存。

由于该设计需要在8个数码管上依次显示前后共8次按键的数值,因此对已有数据的存储和调用也是该设计的重点所在。

(4)数码管的扫描和译码显示。

由于该设计使用了8个数码管,因此需要对每个数码管进行扫描控制,并根据按键值对每个数码管进行7段数码管的译码显示。

4X4矩阵键盘控制数码管显示按键值

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

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数码管显示工作方式。

数码管显示4×4矩阵键盘

数码管显示4×4矩阵键盘

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资料

四乘四键盘控制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矩阵键盘的键盘号--万意要点

数码管显示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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);}}//*********************END******************************//*********************中断子程序************************ void Init1() interrupt 2{count=keyscan();num=num*10+count;if(num>9999)num=num%10;}//**********。

相关文档
最新文档