数码管显示4×4矩阵键盘的键盘号--万意
矩阵式键盘控制数码管显
P1.2、 P1.3相接。16个按键设置在行、列线交点上。
2
二、工作原理
当扫描开始时,首先将P1.7列初始值设置为低电平, 即P
3
三、程序流程图 ——主程序开始Fra bibliotek初始化
按键查询
YES
A=FFH?
NO
调用消除抖动子程序
转入功能处理程序
AAAA 1234
结束
4
皮肌炎图片——皮肌炎的症状表现
皮肌炎是一种引起皮肤、肌肉、 心、肺、肾等多脏器严重损害的, 全身性疾病,而且不少患者同时 伴有恶性肿瘤。它的1症状表现如 下:
完成实训报告十
8
实训十一: 矩阵式键盘控制数码管显示
功能说明: 使用4*4矩阵式键盘控制第一个数码
管显示0~F。
1
一、电路图
4条列线的一端分别与单片机P1口中的P1.4、 P1.5、 P1.6、 P1.7
相接,另一端通过上拉电阻接到+5V电源上,平时使列线处
于高电平状态;而4条行线的一端分别与P1口中的P1.0、 P1.1、
按DL1键,亮灯从右向左移动 按DL2键,亮灯从左向右移动 按DL3键,左边4只灯与右边4只灯交替闪亮 按DL4键,8个灯闪烁
7
作业布置
思考:
用四个按键控制数码管显示: 按下DL1,第一个数码管显示0; 按下DL2,第二个数码管显示1; 按下DL3,第三个数码管显示2; 按下DL4,第四个数码管显示3 。
1、早期皮肌炎患者,还往往伴 有全身不适症状,如-全身肌肉酸 痛,软弱无力,上楼梯时感觉两 腿费力;举手梳理头发时,举高 手臂很吃力;抬头转头缓慢而费 力。
四、程序清单
独立式键盘控制灯移动程序.doc
数码管显示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矩阵键盘控制数码管显示按键值
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矩阵式键盘在单片机中的应用--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矩阵键盘设计方案
1、设计原理(1)如图14.2所示,用单片机的并行口P3连接4×4矩阵键盘,并以单片机的P3.0-P3.3各管脚作输入线,以单片机的P3.4-P3.7各管脚作输出线,在数码管上显示每个按键“0-F”的序号。
(2)键盘中对应按键的序号排列如图14.1所示。
2、参考电路图14.2 4×4矩阵式键盘识别电路原理图3、电路硬件说明(1)在“单片机系统”区域中,把单片机的P3.0-P3.7端口通过8联拨动拨码开关JP3连接到“4×4行列式键盘”区域中的M1-M4,N1-N4端口上。
(2)在“单片机系统”区域中,把单片机的P0.0-P0.7端口连接到“静态数码显示模块”区域中的任何一个a-h端口上;要求:P0.0对应着a,P0.1对应着b,……,P0.7对应着h。
4、程序设计内容(1)4×4矩阵键盘识别处理。
(2)每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。
矩阵的行线和列线分别通过两并行接口和CPU通信。
键盘的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。
键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么?还要消除按键在闭合或断开时的抖动。
两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
5、程序流程图(如图14.3所示)6、汇编源程序;;;;;;;;;;定义单元;;;;;;;;;;COUNT EQU 30H;;;;;;;;;;入口地址;;;;;;;;;;ORG 0000HLJMP STARTORG 0003HRETIORG 000BHRETIORG 0013HRETIORG 001BHRETIORG 0023HRETIORG 002BHRETI;;;;;;;;;;主程序入口;;;;;;;;;;ORG 0100HSTART: LCALL CHUSHIHUALCALL PANDUANLCALL XIANSHILJMP START;;;;;;;;;;初始化程序;;;;;;;;;;CHUSHIHUA: MOV COUNT,#00HRET;;;;;;;;;;判断哪个按键按下程序;;;;;;;;;;PANDUAN: MOV P3,#0FFHCLR P3.4MOV A,P3ANL A,#0FHJZ SW1LCALL DELAY10MS JZ SW1MOV A,P3ANL A,#0FHCJNE A,#0EH,K1 MOV COUNT,#0 LJMP DKK1: CJNE A,#0DH,K2 MOV COUNT,#4 LJMP DKK2: CJNE A,#0BH,K3 MOV COUNT,#8 LJMP DKK3: CJNE A,#07H,K4 MOV COUNT,#12K4: NOPLJMP DKSW1: MOV P3,#0FFH CLR P3.5MOV A,P3ANL A,#0FHJZ SW2LCALL DELAY10MS JZ SW2MOV A,P3ANL A,#0FHCJNE A,#0EH,K5 MOV COUNT,#1 LJMP DKK5: CJNE A,#0DH,K6 MOV COUNT,#5 LJMP DKK6: CJNE A,#0BH,K7 MOV COUNT,#9 LJMP DKK7: CJNE A,#07H,K8 MOV COUNT,#13K8: NOPLJMP DKSW2: MOV P3,#0FFH CLR P3.6MOV A,P3ANL A,#0FHJZ SW3LCALL DELAY10MS JZ SW3MOV A,P3ANL A,#0FHCJNE A,#0EH,K9 MOV COUNT,#2 LJMP DKK9: CJNE A,#0DH,KA MOV COUNT,#6 LJMP DKKA: CJNE A,#0BH,KB MOV COUNT,#10 LJMP DKKB: CJNE A,#07H,KC MOV COUNT,#14 KC: NOPLJMP DKSW3: MOV P3,#0FFH CLR P3.7MOV A,P3ANL A,#0FHJZ SW4LCALL DELAY10MSJZ SW4MOV A,P3ANL A,#0FHCJNE A,#0EH,KDMOV COUNT,#3LJMP DKKD: CJNE A,#0DH,KE MOV COUNT,#7LJMP DKKE: CJNE A,#0BH,KF MOV COUNT,#11 LJMP DKKF: CJNE A,#07H,KG MOV COUNT,#15KG: NOPLJMP DKSW4: LJMP PANDUAN DK: RET ;;;;;;;;;;显示程序;;;;;;;;;; XIANSHI: MOV A,COUNTMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,ALCALL DELAYSK: MOV A,P3ANL A,#0FHXRL A,#0FHJNZ SKRET;;;;;;;;;;10ms延时程序;;;;;;;;;;DELAY10MS: MOV R6,#20D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RET;;;;;;;;;;200ms延时程序;;;;;;;;;;DELAY: MOV R5,#20LOOP: LCALL DELAY10MSDJNZ R5,LOOPRET;;;;;;;;;;共阴码表;;;;;;;;;;TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H;;;;;;;;;;结束标志;;;;;;;;;;END7、C语言源程序#includeunsigned char code table[]={0x3f,0x66,0x7f,0x39,0x06,0x6d,0x6f,0x5e,0x5b,0x7d,0x77,0x79,0x4f,0x07,0x7c,0x71};void main(void){ unsigned char i,j,k,key;while(1){ P3=0xff; //给P3口置1//P3_4=0; //给P3.4这条线送入0//i=P3;i=i&0x0f; //屏蔽低四位//if(i!=0x0f) //看是否有按键按下//{ for(j=50;j>0;j--) //延时//for(k=200;k>0;k--);if(i!=0x0f) //再次判断按键是否按下//{ switch(i) //看是和P3.4相连的四个按键中的哪个// { case 0x0e:key=0;break;case 0x0d:key=1;break;case 0x0b:key=2;break;case 0x07:key=3;break;}P0=table[key]; //送数到P0口显示//}}P3=0xff;P3_5=0; //读P3.5这条线//i=P3;i=i&0x0f; //屏蔽P3口的低四位//if(i!=0x0f) //读P3.5这条线上看是否有按键按下// { for(j=50;j>0;j--) //延时//for(k=200;k>0;k--);i=P3; //再看是否有按键真的按下//i=i&0x0f;if(i!=0x0f){ switch(i) //如果有,显示相应的按键//{ case 0x0e:key=4;break;case 0x0d:key=5;break;case 0x0b:key=6;break;case 0x07:key=7;break;}P0=table[key]; //送入P0口显示//}}P3=0xff;P3_6=0; //读P3.6这条线上是否有按键按下// i=P3;i=i&0x0f;if(i!=0x0f){ for(j=50;j>0;j--)for(k=200;k>0;k--);i=P3;i=i&0x0f;if(i!=0x0f){ switch(i){ case 0x0e:key=8;break;case 0x0d:key=9;break;case 0x0b:key=10;break;case 0x07:key=11;break;}P0=table[key];}}P3=0xff;P3_7=0; //读P3.7这条线上是否有按键按下//i=P3;i=i&0x0f;if(i!=0x0f){ for(j=50;j>0;j--) for(k=200;k>0;k--); i=P3;i=i&0x0f;if(i!=0x0f){ switch(i){ case 0x0e:key=12;break;case 0x0d:key=13;break;case 0x0b:key=14;break;case 0x07:key=15;break;}P0=table[key];}}}}8、注意事项在硬件电路中,要把8联拨动拨码开关JP2拨下,把8联拨动拨码开关JP3拨上去。
4×4 键盘矩阵控制条形LED显示
目录1 课程设计概述 (1)1.1设计目的 (1)1.2设计内容和要求 (1)1.3设计思路 (1)1.4系统设计 (1)1.5功能要求 (1)2 硬件开发平台 (2)3软件开发平台 (3)4硬件电路的设计 (4)4.1硬件电路的基本构成 (4)4.2硬件电路元器件 (4)4.3条形LED灯 (5)4.4硬件资源及其分配 (5)5程序设计 (7)5.1程序流程图: (7)5.2程序代码 (8)6.1运行结果描述 (10)6.2仿真结果图: (10)结论 (11)参考文献 (12)1 课程设计概述1.1设计目的1、通过单片机课程设计,熟练掌握C语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力。
2、通过4×4 键盘矩阵控制条形LED显示系统的设计,掌握数码管的使用方法,和简单程序的编写,最终提高我们的逻辑抽象能力[1]。
1.2设计内容和要求内容:设计一个4×4 键盘矩阵控制条形LED显示。
要求:利用单片机的矩阵键盘,条形LED显示,第几个的按键对应的几个led 灯亮。
1.3 设计思路1.先熟悉实验原理,设计8×8LED点阵屏显示数字的工作过程,以及所需要的组件。
2.通过单片机的各个引脚的输出控制8×8LED点阵屏显示数字1.4系统设计通过编写程序,实现用中断系统对8×8LED点阵屏的控制,使其每延时一段时间,LED点阵的显示数字就会进行状态转换。
采用单片机内部的I/O口上的P0和P3口可来控制LED点阵。
1.5功能要求本设计能模拟基本的LED点阵显示系统,是用中断的方式定时控制LED点阵显示的内容变换。
定时/计数器工作方式寄存器,定时器采用T0定时器0工作于模式0 位数:13位计数范围:0-8192,每累计250次定时器中断才执行一次换数。
2 硬件开发平台3软件开发平台4硬件电路的设计4. 1硬件电路的基本构成4×4键盘矩阵控制条形LED显示系统,可用单片机的矩阵键盘的输入直接控制发光二极管LED灯的。
单片机4×4矩阵键盘设计方案
1、设计原理(1)如图14.2所示,用单片机的并行口P3连接4×4矩阵键盘,并以单片机的P3.0-P3.3各管脚作输入线,以单片机的P3.4-P3.7各管脚作输出线,在数码管上显示每个按键“0-F”的序号。
(2)键盘中对应按键的序号排列如图14.1所示。
2、参考电路图14.24×4矩阵式键盘识别电路原理图3、电路硬件说明(1)在“单片机系统”区域中,把单片机的P3.0-P3.7端口通过8联拨动拨码开关JP3连接到“4×4行列式键盘”区域中的M1-M4,N1-N4端口上。
(2)在“单片机系统”区域中,把单片机的P0.0-P0.7端口连接到“静态数码显示模块”区域中的任何一个a-h端口上;要求:P0.0对应着a,P0.1对应着b,……,P0.7对应着h。
4、程序设计内容(1)4×4矩阵键盘识别处理。
(2)每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。
矩阵的行线和列线分别通过两并行接口和CPU通信。
键盘的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。
键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么?还要消除按键在闭合或断开时的抖动。
两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
5、程序流程图(如图14.3所示)6、汇编源程序;;;;;;;;;;定义单元;;;;;;;;;;COUNTEQU30H;;;;;;;;;;入口地址;;;;;;;;;;ORG0000HLJMPSTARTORG0003HRETIORG000BHRETIORG0013HRETIORG001BHRETIORG0023HRETIORG002BHRETI;;;;;;;;;;主程序入口;;;;;;;;;;ORG0100HSTART:LCALLCHUSHIHUALCALLPANDUANLCALLXIANSHILJMPSTART;;;;;;;;;;初始化程序;;;;;;;;;; CHUSHIHUA:MOVCOUNT,#00HRET;;;;;;;;;;判断哪个按键按下程序;;;;;;;;;; PANDUAN:MOVP3,#0FFHCLRP3.4MOVA,P3ANLA,#0FHXRLA,#0FHJZSW1LCALLDELAY10MSJZSW1MOVA,P3ANLA,#0FHCJNEA,#0EH,K1MOVCOUNT,#0LJMPDKK1:CJNEA,#0DH,K2MOVCOUNT,#4 LJMPDKK2:CJNEA,#0BH,K3 MOVCOUNT,#8 LJMPDKK3:CJNEA,#07H,K4 MOVCOUNT,#12K4:NOPLJMPDKSW1:MOVP3,#0FFH CLRP3.5MOVA,P3ANLA,#0FH XRLA,#0FHJZSW2 LCALLDELAY10MS JZSW2MOVA,P3ANLA,#0FH CJNEA,#0EH,K5 MOVCOUNT,#1LJMPDKK5:CJNEA,#0DH,K6 MOVCOUNT,#5 LJMPDKK6:CJNEA,#0BH,K7 MOVCOUNT,#9 LJMPDKK7:CJNEA,#07H,K8 MOVCOUNT,#13K8:NOPLJMPDKSW2:MOVP3,#0FFH CLRP3.6MOVA,P3ANLA,#0FH XRLA,#0FHJZSW3 LCALLDELAY10MS JZSW3MOVA,P3ANLA,#0FHCJNEA,#0EH,K9 MOVCOUNT,#2 LJMPDKK9:CJNEA,#0DH,KA MOVCOUNT,#6 LJMPDKKA:CJNEA,#0BH,KB MOVCOUNT,#10 LJMPDKKB:CJNEA,#07H,KC MOVCOUNT,#14 KC:NOPLJMPDKSW3:MOVP3,#0FFH CLRP3.7MOVA,P3ANLA,#0FH XRLA,#0FHJZSW4 LCALLDELAY10MS JZSW4ANLA,#0FHCJNEA,#0EH,KD MOVCOUNT,#3LJMPDKKD:CJNEA,#0DH,KE MOVCOUNT,#7LJMPDKKE:CJNEA,#0BH,KF MOVCOUNT,#11LJMPDKKF:CJNEA,#07H,KG MOVCOUNT,#15KG:NOPLJMPDKSW4:LJMPPANDUANDK:RET;;;;;;;;;;显示程序;;;;;;;;;; XIANSHI:MOVA,COUNT MOVDPTR,#TABLEMOVCA,@A+DPTRLCALLDELAYSK:MOVA,P3ANLA,#0FHXRLA,#0FHJNZSKRET;;;;;;;;;;10ms延时程序;;;;;;;;;; DELAY10MS:MOVR6,#20D1:MOVR7,#248DJNZR7,$DJNZR6,D1RET;;;;;;;;;;200ms延时程序;;;;;;;;;; DELAY:MOVR5,#20LOOP:LCALLDELAY10MSDJNZR5,LOOPRET;;;;;;;;;;共阴码表;;;;;;;;;;TABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB7FH,6FH,77H,7CH,39H,5EH,79H,71H7、C语言源程序#includeunsignedcharcodetable[]={0x3f,0x66,0x7f,0x39,0x06,0x6d,0x6f,0x5e,0x5b,0x7d,0x77,0x79,0x4f,0x07,0x7c,0x71};voidmain(void){unsignedchari,j,k,key;while(1){P3=0xff;//给P3口置1//P3_4=0;//给P3.4这条线送入0//i=P3;i=i&0x0f;//屏蔽低四位//if(i!=0x0f)//看是否有按键按下//{for(j=50;j>0;j--)//延时//for(k=200;k>0;k--);if(i!=0x0f)//再次判断按键是否按下//{switch(i)//看是和P3.4相连的四个按键中的哪个// {case0x0e:key=0;break;case0x0d:key=1;break;case0x0b:key=2;break;case0x07:key=3;break;}P0=table[key];//送数到P0口显示//}}P3=0xff;P3_5=0;//读P3.5这条线//i=P3;i=i&0x0f;//屏蔽P3口的低四位//if(i!=0x0f)//读P3.5这条线上看是否有按键按下// {for(j=50;j>0;j--)//延时//for(k=200;k>0;k--);i=P3;//再看是否有按键真的按下//i=i&0x0f;if(i!=0x0f){switch(i)//如果有,显示相应的按键// {case0x0e:key=4;break;case0x0d:key=5;break;case0x0b:key=6;break;case0x07:key=7;break;}P0=table[key];//送入P0口显示//}}P3=0xff;P3_6=0;//读P3.6这条线上是否有按键按下// i=P3;i=i&0x0f;if(i!=0x0f){for(j=50;j>0;j--)for(k=200;k>0;k--);i=P3;i=i&0x0f;if(i!=0x0f){switch(i){case0x0e:key=8;break;case0x0d:key=9;break;case0x0b:key=10;break;case0x07:key=11;}P0=table[key];}}P3=0xff;P3_7=0;//读P3.7这条线上是否有按键按下// i=P3;i=i&0x0f;if(i!=0x0f){for(j=50;j>0;j--)for(k=200;k>0;k--);i=P3;i=i&0x0f;if(i!=0x0f){switch(i){case0x0e:key=12;break;case0x0d:key=13;case0x0b:key=14;break;case0x07:key=15;break;}P0=table[key];}}}}8、注意事项在硬件电路中,要把8联拨动拨码开关JP2拨下,把8联拨动拨码开关JP3拨上去。
4X4矩阵键盘控制条形LED显示
4X4矩阵键盘控制条形LED显示/* 名称:4X4矩阵键盘控制条形LED显示说明:运行本例时,按下的按键值越大点亮的LED越多。
*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//矩阵键盘按键特征码表uchar code KeyCodeTable[]={0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88};//延时void DelayMS(uint x){uchar i;while(x--) for(i=0;i<120;i++);}//键盘扫描uchar Keys_Scan(){uchar sCode,kCode,i,k;//低4位置0,放入4行P1=0xf0;//若高4位出现0,则有键按下if((P1&0xf0)!=0xf0){DelayMS(2);if((P1&0xf0)!=0xf0){sCode=0xfe; //行扫描码初值for(k=0;k<4;k++) //对4行分别进行扫描{P1=sCode;if((P1&0xf0)!=0xf0){kCode=~P1;for(i=0;i<16;i++) //查表得到按键序号并返回if(kCode==KeyCodeTable[i])return(i);}elsesCode=_crol_(sCode,1);}}}return(-1);}//主程序void main(){uchar i,P2_LED,P3_LED;uchar KeyNo=-1; //按键序号,-1表示无按键while(1){KeyNo=Keys_Scan(); //扫描键盘获取按键序号KeyNoif(KeyNo!=-1){P2_LED=0xff;P3_LED=0xff;for(i=0;i<=KeyNo;i++) //键值越大,点亮的LED越多{if(i<8)P3_LED>>=1;elseP2_LED>>=1;}P3=P3_LED; //点亮条形LEDP2=P2_LED;}}}。
4乘4矩阵键盘检测
#define uchar unsigned char
#define uint unsigned int
sbit p2_7 = P2^7 ;
unsigned char const table[]={
0x06,0x5b,0x3f,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
{
uchar cord_h,cord_l;//行列值
P1=0x0f; //行线输出全为0
cord_h=P1&0x0f; //读入列线值
if(cord_h!=0x0f) //先检测有无按键按下
{
delay(100); //去抖
if(cord_h!=0x0f)
{
cord_h=P1&0x0f; //读入列线值
temp=table[13];
break;//d
case 0xeb:
temp=table[14];
break;//e
case 0xe7:
temp=table[15];
break;//f
}
if (p2_7==0)//确认键
{
P0 = temp;
}
}
}
uchar keyscan(void)//键盘扫描函数
0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F
uchar temp;
uchar keyscan(void);
void delay(uint i);
void main()
{
uchar key;
P0=0x049;//1数码管亮按相应的按键,会显示按键上的字符
单片机-数码管显示4X4矩阵键盘按键号
单片机-数码管显示4X4矩阵键盘按键号#include<>#define uchar unsigned char#define uint unsigned int//段码uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};sbit BEEP=P3^7;//上次按键和当前按键的序号,该矩阵中序号范围0~15,16表示无按键uchar Pre_KeyNo=16,KeyNo=16;//延时void DelayMS(uint x){uchar i;while(x--) for(i=0;i<120;i++);}//矩阵键盘扫描void Keys_Scan(){uchar Tmp;P1=0x0f; //高4 位置0,放入 4 行DelayMS(1);Tmp=P1^0x0f;//按键后0f变成0000XXXX,X中一个为0,3 个仍为 1,通过异或把 3 个1 变为0,唯一的0变为1;switch(Tmp) //判断按键发生于 0~3 列的哪一列{case 1: KeyNo=0;break;case 2: KeyNo=1;break;case 4: KeyNo=2;break;case 8: KeyNo=3;break;default:KeyNo=16; //无键按下}P1=0xf0; //低 4 位置0,放入 4 列DelayMS(1);Tmp=P1>>4^0x0f;//按键后 f0 变成 XXXX0000,X中有 1 个为0,三个仍为 1;高4 位转移到低 4位并异或得到改变的值switch(Tmp) //对0~3 行分别附加起始值 0,4,8,12{case 1: KeyNo+=0;break;case 2: KeyNo+=4;break;case 4: KeyNo+=8;break;case 8: KeyNo+=12;}}//蜂鸣器void Beep(){uchar i;for(i=0;i<100;i++){DelayMS(1);BEEP=~BEEP;}BEEP=0;}//主程序void main(){P0=0x00;BEEP=0;while(1){P1=0xf0;if(P1!=0xf0) Keys_Scan(); //获取键序号 if(Pre_KeyNo!=KeyNo) {P0=~DSY_CODE[KeyNo];Beep();Pre_KeyNo=KeyNo;}DelayMS(100);}}。
单片机-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); //然后切换到第⼆个数码管。
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段数码管的译码显示。
4乘4矩阵键盘扫描加数码管显示代码
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矩阵键盘
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 设计思想按键采用线反转法先把列线置成低电平,行线置成输入状态,读行线;再把行线置成低电平,列线输入状态,读列线。
当有键按下时,由两次所读状态即可确定所按键的位置,不需扫描,键盘响应速度大大加快。
4×4矩阵式键盘识别技术
14.4×4矩阵式键盘识别技术1.实验任务如图4.14.2所示,用AT89S51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线;在数码管上显示每个按键的“0-F”序号。
对应的按键的序号排列如图4.14.1所示错误!48C159D26AE37BF图4.14.12.硬件电路原理图图4.14.23.系统板上硬件连线(1.把“单片机系统“区域中的P3.0-P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4 R1-R4端口上;(2.把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。
4.程序设计内容(1.4×4矩阵键盘识别处理(2.每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。
矩阵的行线和列线分别通过两并行接口和CPU通信。
每个按键的状态同样需变成数字量“0”和“1”,,而接地是通过程序输出数开关的一端(列线)通过电阻接VCC字“0”实现的。
键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。
两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
5.程序框图错误!P3=FFH,P3.0=0有键按下吗?延时10ms真得有键按下吗?根据当前状态识别按键P3=FFH,P3.1=0有键按下吗?延时10ms真得有键按下吗?根据当前状态识别按键P3=FFH,P3.2=0有键按下吗?延时10ms真得有键按下吗?根据当前状态识别按键P3=FFH,P3.3=0有键按下吗?延时10ms真得有键按下吗?根据当前状态识别按键图4.14.3 6.汇编源程序KEYBUF EQU 30HORG 00HSTART: MOV KEYBUF,#2WAIT:MOV P3,#0FFHCLR P3.4MOV A,P3ANL A,#0FHXRL A,#0FHLCALL DELY10MS MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY1MOV A,P3ANL A,#0FHCJNE A,#0EH,NK1 MOV KEYBUF,#0 LJMP DK1NK1: CJNE A,#0DH,NK2 MOV KEYBUF,#1 LJMP DK1NK2: CJNE A,#0BH,NK3 MOV KEYBUF,#2 LJMP DK1NK3: CJNE A,#07H,NK4 MOV KEYBUF,#3 LJMP DK1NK4: NOPDK1:MOV A,KEYBUFMOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,ADK1A: MOV A,P3ANL A,#0FHJNZ DK1A NOKEY1:MOV P3,#0FFHCLR P3.5MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY2LCALL DELY10MS MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY2MOV A,P3ANL A,#0FHCJNE A,#0EH,NK5 MOV KEYBUF,#4 LJMP DK2NK5: CJNE A,#0DH,NK6 MOV KEYBUF,#5 LJMP DK2NK6: CJNE A,#0BH,NK7 MOV KEYBUF,#6 LJMP DK2NK7: CJNE A,#07H,NK8 MOV KEYBUF,#7 LJMP DK2NK8: NOPDK2:MOV A,KEYBUFMOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,ADK2A: MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK2ANOKEY2:MOV P3,#0FFHCLR P3.6MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY3LCALL DELY10MS MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY3MOV A,P3ANL A,#0FHCJNE A,#0EH,NK9 MOV KEYBUF,#8LJMP DK3NK9: CJNE A,#0DH,NK10 MOV KEYBUF,#9LJMP DK3NK10: CJNE A,#0BH,NK11 MOV KEYBUF,#10 LJMP DK3NK11: CJNE A,#07H,NK12 MOV KEYBUF,#11 LJMP DK3NK12: NOPDK3:MOV A,KEYBUFMOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,ADK3A: MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK3ANOKEY3:MOV P3,#0FFHCLR P3.7MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY4LCALL DELY10MS MOV A,P3ANL A,#0FHXRL A,#0FHMOV A,P3ANL A,#0FHCJNE A,#0EH,NK13 MOV KEYBUF,#12 LJMP DK4NK13: CJNE A,#0DH,NK14 MOV KEYBUF,#13 LJMP DK4NK14: CJNE A,#0BH,NK15 MOV KEYBUF,#14 LJMP DK4NK15: CJNE A,#07H,NK16 MOV KEYBUF,#15 LJMP DK4NK16: NOPDK4:MOV A,KEYBUFMOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,ADK4A: MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK4ANOKEY4:LJMP WAITDELY10MS:D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RETTABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5EH,79H,71HEND7.C语言源程序#include <AT89X51.H>unsigned char code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; unsigned char temp;unsigned char key;unsigned char i,j;void main(void){while(1){P3=0xff;P3_4=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f){for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp & 0x0f;if (temp!=0x0f){temp=P3;temp=temp & 0x0f; switch(temp){case 0x0e:key=7;break;case 0x0d:key=8;break;case 0x0b:key=9;break;case 0x07:key=10;break;}temp=P3;P1_0=~P1_0;P0=table[key];temp=temp & 0x0f;while(temp!=0x0f){temp=P3;temp=temp & 0x0f; }}}P3=0xff;P3_5=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f){for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp & 0x0f;if (temp!=0x0f){temp=P3;temp=temp & 0x0f;switch(temp){case 0x0e:key=4;break;case 0x0d:key=5;break;case 0x0b:key=6;break;case 0x07:key=11;break;}temp=P3;P1_0=~P1_0;P0=table[key];temp=temp & 0x0f;while(temp!=0x0f){temp=P3;temp=temp & 0x0f; }}}P3=0xff;P3_6=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f){for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp & 0x0f;if (temp!=0x0f){temp=P3;temp=temp & 0x0f; switch(temp){case 0x0e:key=1;break;case 0x0d:key=2;break;case 0x0b:key=3;break;case 0x07:key=12;break;}temp=P3;P1_0=~P1_0;P0=table[key];temp=temp & 0x0f; while(temp!=0x0f){temp=temp & 0x0f; }}}P3=0xff;P3_7=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f){for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp & 0x0f;if (temp!=0x0f){temp=P3;temp=temp & 0x0f;switch(temp){case 0x0e:key=0;break;case 0x0d:key=13;break;key=14;break;case 0x07:key=15;break;}temp=P3;P1_0=~P1_0;P0=table[key];temp=temp & 0x0f;while(temp!=0x0f){temp=P3;temp=temp & 0x0f; }}}}}。
矩阵键盘按键的数码管显示矩阵键盘按键的数码管显示
一、矩阵键盘按键的数码管显示1.实验目的(1)掌握VHDL语言的语法规范,掌握时序电路描述方法(2)掌握多个数码管动态扫描显示的原理及设计方法2.实验所用仪器及元器件计算机一台实验板一块电源线一根扁平线一根下载线一根3.实验任务要求设计出4*4矩阵键盘对某一按键按下就在数码管显示一个数字。
按键从左上角到右下角依次为1,2, (16)4.实验原理按键模块原理键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。
同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。
键盘键值的获取:键盘上的每一个按键其实就是一个开关电路,当某键被按下时,该按键的接点会呈现0的状态,反之,未被按下时则呈现逻辑1的状态。
扫描信号由r o w进入键盘,变化的顺序依次为1110-1101-1011-0111-1110。
每一次扫描一排,依次地周而复始。
例如现在的扫描信号为1011,代表目前正在扫描9,10,11,12这一排的按键,如果这排当中没有按键被按下的话,则由column读出的值为1111;反之当9这个按键被按下的话,则由colu mn读出的值为1110。
根据上面所述原理,我们可得到各按键的位置与数码关系如表所示:1110 1110 1110 1110 1101 1101 1101 1101row1110 1101 1011 0111 1110 1101 1011 0111 column1 2 3 4 5 6 7 8键值row 1011 1011 1011 1011 0111 0111 0111 0111column1110 1101 1011 0111 1110 1101 1011 0111键值9 10 11 12 13 14 15 16动态显示原理为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求。
数码管显示4×4矩阵键盘的键盘号(程序解释好了)大作业
数码管显⽰4×4矩阵键盘的键盘号(程序解释好了)⼤作业《单⽚机原理及应⽤课程设计》报告——数码管显⽰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.3源程序#include#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;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: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:}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=temp&0xf0;}}}return num;//⼦函数最后返回num值} void main(){P0=0x00;//清屏delay(5);//延时while(1)//主循环{disp(keyscan());//检测并显⽰}}}5、调试运⾏电路图K=15时的数码管显⽰:6、设计⼼得体会硬件设计⽅⾯,此课题所需的硬件并不负责,只许少量的导线、简单的电路便可以完成。
数码管显示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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数码管显示4X4矩阵键盘的键盘号学院:物理与电子工程学院专业:自动化班级:13级7班学号:姓名:万意指导教师:马世榜日期:2013年12月31日目录1引言 (1)2设计方案 (2)3硬件设计 (2)AT89S51 (2)4*4矩阵式键盘 (5)矩阵式键盘介绍 (5)键盘扫描原理 (6)硬件电路连接 (9)单片机时钟电路 (9)单片机复位电路 (9)矩阵式键盘电路 (9)LED数码管显示电路 (9)4软件设计 (11)所用软件简介 (11)Keil (11)Proteus (11)程序流程图 (13)源程序 (14)5电路原理图 (16)参考文献 (17)1引言矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,即时在LED数码管上。
单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。
4*4矩阵式键盘采用AT89S51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用汇编语言编程。
单片机将检测到的按键信号转换成数字量,显示于LED显示器上。
该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。
2设计方案单片机的P1口的~连接4×4矩阵键盘,P0口控制一只数码管,当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。
例如,1号键按下时,数码管显示“1”, 14号键按下时,数码管显示“E”等等。
本论文主要研究单片机控制的键盘识别显示系统,分别对按键信息和显示电路以及软、硬件各个部分进行研究。
主要内容如下:①根据矩阵式键盘的特点,进行键盘控制系统的整体研究与设计;② LED实时显示按键信息;③采用软件编程的方法实现按键信息的提取和显示。
3硬件设计AT89S51AT89S51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。
AT89S51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
引脚如图所示AT89S51图3-1 AT89S51管脚图AT89S51其具有以下特性:与MCS-51 兼容4K字节可编程FLASH存储器寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24MHz三级程序存储器锁定128×8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路特性概述:AT89S51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 接口,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
管脚说明:VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P0口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。
在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89S51的一些特殊功能口,如下表所示:RXD(串行输入口)TXD(串行输出口)/INT0(外部中断0)/INT1(外部中断1)T0(记时器0外部输入)T1(记时器1外部输入)/WR(外部数据存储器写选通)/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH 编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
4*4矩阵式键盘矩阵式键盘介绍矩阵式键盘(或者叫行列式键盘)常应用在按键数量比较多的系统之中。
这种键盘由行线和列线组成,按键设置在行、列结构的交叉点上,行、列线分别接在按键开关的两端。
行列式键盘可分为非编码键盘和编码键盘两大类。
编码键盘内部设有键盘编码器,被按下键的键号由键盘编码器直接给出,同时具有防抖和解决重键的功能。
非编码键盘通常采用软件的方法,逐行逐列检查键盘状态,当有键按下时,通过计算或查表的方法获取该键的键值,通常,计算机通过程序控制对键盘扫描,从而获取键值,根据计算机扫描的方法可以分为定时扫描法和中断扫描法两种。
本系统中的4*4矩阵式键盘结构简单,按键数较少,采用非编码式键盘,当有键按下时,由单片机通过程序扫描确定键值,并将获得的键值通过LED数码管显示出来,4*4矩阵式键盘结构及键值分布如下图:图3-2矩阵式键盘电路原理图1234567890A BC D E F图3-3 键盘键值分布键盘扫描原理为了更加贴近实际应用,本系统采用中断式扫描法,这样可以节约单片机开销,提高单片机工作效率,使得单片机在没有键盘输入时可以处理其他工作,其具体工作过程为:在没有键按下时矩阵键盘行线接高电平,列线接低电平,当某个键被按下时,该按键所在行线电位被拉低,触发单片机的外部中断INT0,进入中断子程序,在中断程序中,单片机对矩阵键盘进行扫描以确定按下的键值,扫描过程如下:1、检测行线电平,确定是否有按键被按下;2、延时去抖动;3、重新确认是否有按键被按下,若有,扫描键值,若没有,返回主程序;4、 扫描键值,首先行线接高电平,列线接低电平,对行线电平进行检测,以确定按下的键所在的行;5、行线接低电平,列线接高点平,对列线电平进行检测,确定按下的键所在的列;6、将扫描所得的按键值送入LED 数码管显示。
LED 数码管LED (发光二级管)显示器件是计算机控制控制系统中的廉价输出设备,它由多个发光二极管组成,能显示许多种字符。
由于制作材料不同,LED 可以发出红、黄、篮、紫等各种单色光,一个发光二级管正常发光时的电流大约为10mA ,本系统中使用的是七段共阴极LED 数码管。
图4、5所示为七段共阴极LED 显示器件的结构及外形图。
七段LED 显示器件就是将7个发光二极管按一定的方式组合在一起,如图4所示。
a b c def g图3-4 7段LED 显示器件外形图aaaaaaaCOM下表给出了共阴极7段LED显示器件所能显示的部分字符与7段控制显示代码的对应关系表3-1 共阴极7段LED显示器件所能显示的部分字符与7段控制显示代码的对应关系在本系统中,4*4键盘共有16个键,对其编号0~9,A~F,所以用一个7段数码管静态显示即可满足即时显示按键信息的要求。
所谓静态显示,就是当显示器件显示某个字符时,相应的显示段(发光二级管)恒定地导通或截止,直到显示另一个字符为止。
这种显示方式显示一个字符时,只需要微处理器送一次代码,因此占用机时少,而且显示稳定可靠,其缺点是,使用元器件相对较多,且线路比较复杂,相对而言成本较高,比较适合显示位数较少的情况。
硬件电路连接单片机时钟电路时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:内部振荡和外部振荡。
单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTALl和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式,如图6所示在其外接晶体振荡器(简称晶振)或陶瓷谐振器就构成了内部振荡方式,片内高增益反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器并产生振荡时钟脉冲。
图6中外接晶体以及电容C1和C2构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值为30pF左右,晶振频率选。