51单片机键盘数码管显示_利用8255和51单片机实现数码管显示按键数值的程序(带程序)

合集下载

利用8255和51单片机实现数码管显示按键值的实验

利用8255和51单片机实现数码管显示按键值的实验

期中大作业姓名:性别:专业:学号:课题:【利用51单片机、8255实现数码管显示按键值的程序实验】要求:【4*4矩阵键盘,按0-15数码管上分别显示0-9、a-f】一、芯片资料;8255:8255的内部结构,由三部分电路组成:与CPU的接口电路、内部控制逻辑电路和与外设连接的输入/输出接口电路。

D7~D0(data bus):三态、双向数据线,与CPU数据总线连接,用来传送数据。

(chip select):片选信号线,低电平有效时,芯片被选中。

A1, A0(port address):地址线,用来选择内部端口。

(read):读出信号线,低电平有效时,允许数据读出。

(write):写入信号线,低电平有效时,允许数据写入。

RESET(reset):复位信号线,高电平有效时,将所有内部寄存器(包括控制寄存器)清0。

PA7~PA0(port A):A口输入/输出信号线。

PB7~PB0(port B):B口输入/输出信号线。

PC7~PC0(port C):C口输入/输出信号线。

VCC:+5V电源。

GND:电源地线。

8255的工作方式方式0:基本输入输出方式适用于无条件传送和查询方式的接口电路方式1:选通输入输出方式适用于查询和中断方式的接口电路方式2:双向选通传送方式适用于与双向传送数据的外设适用于查询和中断方式的接口电路8255初始化编程8255的A,B,C三个端口的工作方式是在初始化编程时,通过向8255A的控制端口写入控制字来设定的。

8255由编程写入的控制字有两个:方式控制字和置位/复位控制字。

方式控制字用于设置端口A, B, C的工作方式和数据传送方向;置位/复位控制字用于设置C口的PC7~PC0中某一条口线PC i(i=0~7)的电平。

两个控制字公用一个端口地址,由控制字的最高位作为区分这两个控制字的标志位。

(1)方式控制字的格式8255工作方式控制字的格式。

D0:设置PC3~PC0的数据传送方向。

8255控制键盘与显示实验

8255控制键盘与显示实验

实验六 8255 控制键盘与显示实验一、实验目的1.掌握8255 输入、输出编程方法。

2.掌握阵列键盘和数码管动态扫描显示的控制方法。

二、实验内容用8255 可编程并行口做一个键盘、显示扫描实验,把按键输入的键值,显示在8255 控制的七段数码管上。

8255 PB 口做键盘输入线,PC 口做显示扫描线,PA 口做显示数据线。

三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。

四、实验说明和电路原理图本实验需要用到 CPU 模块(F3 区)、8255 模块(C6 区)、8279 键盘与显示模块(E7 区)。

8255 键盘与显示电路原理图参见图7-1A、图7-1B,及前一实验的图6-1。

CS_8255 接8000H,则8255 状态/命令口地址为8003H,PA 口地址为8000H,PB 口地址为8001H、PC 口地址为8002H。

图7-1A 键盘显示电路1图7-1B 键盘显示电路2五、实验步骤1)系统各跳线器处在初始设置状态,S11E 和S12E 红开关全部打到下方(OFF)。

2)用8 位数据线对应连接8255 模块的JD3C(PA 口)、JD4C(PB 口)、JD5C(PC 口)到8279模块的JD3E、JD2E、JD4E;用导线连接8255 模块的CS_8255 到地。

3)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。

编译无误后,下载程序运行。

4)在键盘上按任一单键,观察数码管的显示,数码管低位显示按键值。

D8255A EQU 8000H ;8255 PA 口地址D8255B EQU 8001H ;8255 PB 口地址D8255C EQU 8002H ;8255 PC 口地址D8255 EQU 8003H ;8255 状态/命令口地址LEDBUF EQU 50H ;显示缓存KEYVAL EQU 60H ;读到的键码ORG 0000HLJMP STARTORG 0100HSTART: MOV SP,#80H ;堆栈指针指到80HMOV DPTR,#D8255MOV A,#90H ;方式0,PB,PC口输出,PA口输入MOVX @DPTR,AMOV LEDBUF,#10H ;预置地址MOV LEDBUF+1,#11H ;低四位显示---MOV LEDBUF+2,#11HMOV LEDBUF+3,#11HMOV LEDBUF+4,#5 ;高四位显示8255MOV LEDBUF+5,#5MOV LEDBUF+6,#2MOV LEDBUF+7,#8KB_DIS:LCALL RD_KB ;读键盘MOV A,#0FFHCJNE A,KEYVAL,TOSHOW ;判读到键SJMP SHOW ;没有则继续读键TOSHOW:MOV LEDBUF,KEYVALSHOW: LCALL DISPLAYSJMP KB_DISRD_KB: ;键盘扫描MOV A,#02H ;扫描第一行MOV DPTR,#D8255CMOVX @DPTR,AMOV DPTR,#D8255A MOVX A,@DPTRMOV R1,#00H ;行首键号0CJNE A,#0FFH,KEYCAL ;判键是否按下MOV A,#01H ;扫描第二行MOV DPTR,#D8255CMOVX @DPTR,AMOV DPTR,#D8255AMOVX A,@DPTRMOV R1,#08H ;行首键号8CJNE A,#0FFH,KEYCALSJMP NOKEY ;无键按下KEYCAL: MOV R0,#08H ;计算键码循环8次SHIFT: RRC AJNC TORETINC R1DJNZ R0,SHIFTSJMP NOKEY ;无键按下TORET: MOV KEYVAL,R1RETNOKEY: MOV KEYVAL,#0FFH ;返回无键标志RETDisplay:MOV R7,#8 ;8个数码管MOV R5,#0MOV R0,#LEDBUFDLOOP:MOV A,R5RL A ;JD4E移到PC3、PC4、PC5RL ARL AANL A,#11111011BINC R5MOV DPTR,#D8255CMOVX @DPTR,A ;点亮对应的LEDMOV A,@R0MOV DPTR,#LEDSEGMOVC A,@A+DPTRINC R0MOV DPTR,#D8255BMOVX @DPTR,A ;显示数据LCALL DelayDJNZ R7,DLOOPRETDelay: PUSH R7MOV R7,#200DelayLoop:NOPDJNZ R7,DelayLoopPOP R7RETLEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH;0,1,2,3,4,5DB 7DH,07H,7FH,6FH,77H,7CH;6,7,8,9,A,BDB 39H,5EH,79H,71H,00H,40H;C,D,E,F, ,-END六、实验结果及分析当我们载入程序后我们可以看到数码管上显示“8255-- ”。

51或52单片机电子表数码管显示

51或52单片机电子表数码管显示

#include<reg52.h>#define uint unsigned int#define uchar unsigned char//设置端口sbit dula=P2^6;//数码管段锁存器sbit wela=P2^7;//数码管位锁存器sbit s1=P3^0;sbit s2=P3^1;sbit s3=P3^2;sbit rd=P3^7;//s1~s4为设置时间键位uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};uchar code tablewe[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};void delay(uint z);void display(uchar add,uchar time); void timeinit();void keyscan();uchar hour,min,sec,config,tt,ge,shi; void main(){ s1=1;s2=1;s3=1;dula=1;P0=0;dula=0;wela=1;P0=0x00;wela=0;config=0;timeinit();while(1)keyscan();}void keyscan(){ display(1,hour);display(4,min);display(7,sec);rd=0;if(s1==0){ delay(5);if(s1==0){ config++;if(config==4)config=0;while(!s1);if(config!=0)TR0=0;elseTR0=1;}}else{if(s2==0){delay(5);if(s2==0){ while(!s2){ display(1,hour);display(4,min);display(7,sec);};if(config==1){sec++;if(sec==60)sec=0;display(7,sec);}if(config==2){min++;if(min==60)min=0;display(4,min);}if(config==3){hour++;if(hour==24)hour=0;display(1,hour);}}}if(s3==0){delay(5);if(s3==0){while(!s3){ display(1,hour);display(4,min);display(7,sec);};if(config==1){sec--;if(sec==-1)sec=59;display(7,sec);}if(config==2){min--;if(min==-1)min=59;display(4,min);}if(config==3){hour--;if(hour==-1)hour=23;display(1,hour);}}}}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=120;y>0;y--);}void timeinit(){ tt=0;TMOD=0x01;EA=1;ET0=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;sec=0;min=0;hour=0;}void display(uchar add,uchar time) { shi=time/10;ge=time%10;dula=1;P0=tabledu[shi];dula=0;wela=1;P0=tablewe[add];wela=0;delay(5);dula=1;P0=tabledu[ge];dula=0;wela=1;P0=tablewe[add+1];wela=0;delay(5);}void time0() interrupt 1{ TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt++;if(tt==20){sec++;tt=0;}if(sec==60){sec=0;min++;delay(10);}if(min==60){min=0;hour++;}if(hour==24)hour=0; }。

实验七8255键盘显示实验

实验七8255键盘显示实验

实验七 8255 键盘显示实验一.实验目的1.掌握8255与单片机的接线和I/O编程方法;2.掌握8255扫描键盘与读取键值的编程;3.掌握数码管的显示原理与编程。

二、实验内容1.使用单片机、8255模块和数码管显示电路,编程实现在数码管上从右至左显示0-5;2. 使用单片机、8255模块和键盘显示电路,编程实现在数码管最右1位显示按键的键码。

三、实验设计1.硬件电路设计使用8255模块(E3区),PA口作为位扫描口(键扫描口),PB口输出字形码,PC口作为键值读入口,与数码管显示电路和矩阵键盘模块电路(F6区)相应接口连接, 8255的数据总线D0-D7、读(/RD)、写(/WR)、端口选择A0、A1和片选/CS已和单片机接好,各端口地址如下:PA口:0FF28H;PB口:0FF29H;PC口:0FF2AH;控制口:0FF2BH单片机与8255的接线原理图和8255与键盘显示模块接线原理图如下:2.程序设计主程序流程图和显示子程序、读键子程序流程图见图6-1,6-2,6-3.YN入口 数据存储区取数据数据表中取字形码 输出字形码 输出位扫描信号6位显示完否? 返回延时图6-2 显示子程序Y N 开始初始化 扫描键盘有键按下?延时消抖读键值 显示键码图6-1 主程序流程图显示数据程序设计要点:(1)数码管显示:数码管是共阴极的,但数码管的接口电路(74LS240,754510)决定了PB口应输出共阳码,PA口应输出低电平扫描信号,数码管才能正确显示数据;(2)每一位数码管选通时间应保持在1-5ms之内,PA口轮扫一遍的时间应保持在50ms之内;(3)扫描键盘:PA口输出00H, PC口读入,判断A的值不等于03H,有键按下;(4)延时消抖:检测到有按键后,延时10-20ms再读键值;(5)读键值:PA口分列输出0,PC口读入,根据A的值和扫描的列数值确定键值。

三、实验操作1.硬件连线:根据硬件电路原理图连接各模块,SW3、SW4、SW5拨向off。

51单片机数码管显示数字原理

51单片机数码管显示数字原理

主题:51单片机数码管显示数字原理内容:1. 介绍51单片机在现代的电子产品中,单片机被广泛应用于各个领域,它是一种集成了微处理器、存储器和输入/输出端口的集成电路芯片。

其中,51单片机即指的是基于Intel 8051架构的单片机,它具有低功耗、高性能和丰富的外设接口,因此被广泛应用于嵌入式系统设计中。

2. 数码管的基本原理数码管是一种能够显示数字和部分字母的显示器件,它由多个发光二极管组成,可以显示0-9的数字。

数码管按照结构可以分为共阳数码管和共阳数码管两种类型。

共阳数码管的显示原理是通过控制各个发光二极管的通断状态来显示不同的数字,而共阴数码管则是通过控制对应的极性来实现数字的显示。

3. 51单片机连接数码管的原理通过51单片机控制数码管显示数字,需要用到引脚的输出功能。

在连接共阳数码管时,需要通过51单片机的输出引脚控制各个发光二极管的状态;而在连接共阴数码管时,则是通过控制对应的极性来实现数字的显示。

4. 51单片机连接数码管的实现步骤由于51单片机有多个通用IO口,因此可以连接多个数码管。

连接数码管的步骤如下:1)确定数码管的类型,共阴还是共阳2)连接数码管的正极和负极到单片机的对应IO口3)编写程序控制51单片机的IO口输出状态,以显示所需的数字5. 51单片机连接数码管的程序设计下面是一个简单的示例程序,演示了如何使用51单片机连接数码管,并控制其显示数字的过程:```C#include <reg51.h>sbit DIG1 = P0^0; // 数码管第一位sbit DIG2 = P0^1; // 数码管第二位sbit DIG3 = P0^2; // 数码管第三位sbit DIG4 = P0^3; // 数码管第四位void m本人n(){unsigned char DisplayData[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 0-9的显示码unsigned char i;while(1){for(i=0; i<10; i++){DIG1=0; // 打开第一位数码管P2=DisplayData[i]; // 发送段码delay(100); // 延时DIG1=1; // 关闭第一位数码管// 同样的方法依次打开其他位数码管并发送段码// 这里省略其他三个数码管的控制}}}通过以上程序设计,我们可以实现用51单片机控制数码管显示0-9的数字。

8255控制数码管、单片机程序

8255控制数码管、单片机程序

8255 管脚图下面是8255 管脚设置,具体代码要看原理图中各管脚的连接情况。

reset = 0; 禁止复位cs = 0;wr = 0;//允许CPU将数据或控制字写入8255//A1=1.A0=1;选择.控制寄存器//假设00001111控制D口的数据,从A口输出;11110000控制D口的数据,从B口输出;实际情况由实际管脚连接决定。

d0 = d1=d2= d3=0;d4 = d5=d6=d7 = 1;A1=0;A0=0;选择PA口//pa口--数码管的段选//根据原理图设置pa口各引脚,假设使pa输出00000001控制第1个数码管pa0 = pa1=pa2=pa3=pa4=pa5=pa6= 0;pa7 = 1;A1=0;A0=1;选择PB口//PB口--数码管的位选//根据原理图设置pb口各引脚,假设使pb输出00000001控制数码管显示0 pa0 = pa1=pa2=pa3=pa4=pa5=pa6= 0;pa7 = 1;//=========A1=1.A0=1;选择.控制寄存器//假设00001111控制D口的数据,从A口输出;11110000控制D口的数据,从B口输出;实际情况由实际管脚连接决定。

d0 = d1=d2= d3=1;d4 = d5=d6=d7 = 0;A1=0;A0=0;选择PA口//pa口--数码管的段选//根据原理图设置pa口各引脚,假设使pa输出00000010控制第2个数码管pa0 = pa1=pa2=pa3=pa4=pa5=pa7= 0;pa6 = 1;A1=0;A0=1;选择PB口//PB口--数码管的位选//根据原理图设置pb口各引脚,假设使pb输出00000001控制数码管显示0 pa0 = pa1=pa2=pa3=pa4=pa5=pa6= 0;pa7 = 1;。

用51单片机8255138373等实现数码管显示按键数值的程序DOC

用51单片机8255138373等实现数码管显示按键数值的程序DOC

姓名专业学号2013年10月28日随着单片机技术的飞速发展,在其推动下,现代的电子产品几乎渗透到了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高。

单片机具有体积小、功能强、应用面广等优点,目前正以前所未见的速度取代着传统电子线路构成的经典系统,蚕食着传统数字电路与模拟电路固有的领地。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

同时,学习使用单片机了解计算机原理与结构的最佳选择。

现在,这种单片机的使用领域已十分广泛。

彩电、冰箱、空调、录像机、VCD、遥控器、游戏机、电饭煲等无处不见单片机的影子,单片机早已深深地融入我们每个人的生活之中。

单片机能大大地提高这些产品的智能性,易用性及节能性等主要性能指标,给我们的生活带来舒适和方便的同时,在工农业生产上也极大地提高了生产效率和产品质量。

单片机按用途大体上可分为两类,一种是通用型单片机,另一种是专用型单片机。

课题要求:用51单片机、8255、138、373等实现数码管显示按键数值的程序各芯片资料:1.8255芯片资料如下用8255A可编程器件扩展并行接口8255: 有三个八位的并行口:PA、PB、PC。

有三种工作方式:方式0,方式1,方式2。

逻辑结构图:包含四个部分:●三个并行数据输入输出端口●两个工作方式控制电路●一个读写逻辑控制电路●八位总线缓冲器⑴.三个并行数据输入输出端口:A口;B口;C口一般,A口,B口作为数据输入输出端口,C口作为控制/状态信息口,可以分为两个部分,分别与A口和B口配合使用,作为控制信息输出或状态信息输入。

⑵.工作方式控制电路工作方式控制电路有两个:A组控制和B组控制电路,A组控制用来控制A口和C口的上半部分PC7——PC4;B组控制用来控制B口和C口的下半部分PC3——PC0;两组控制电路具有一个控制命令寄存器,用来接收来自CPU的数据(控制字),以决定芯片的工作方式,或对C口按位进行清“0”或者置“1”。

51单片机数码管显示及矩阵键盘扫描程序

51单片机数码管显示及矩阵键盘扫描程序

51单片机数码管显示及矩阵键盘扫描程序硬件实验十一八段数码管实验一、实验任务1、在静态数码管上轮流显示数字0-9。

2、在两个4位数码管上动态显示数字0-9二、流程图及程序静态显示:流程图:程序代码:#include#define uchar unsigned chucharcodevalue[10]={0xC0,0xF9,0xA4,0xB0,0X99,0x92,0x82,0xF8,0 x80,0x90};//0 -9数码管显示段码void delay(char x) //延时子程序{uchar i;for(i=0;i<200;i++);}main() //主函数{int i;while(1){for(i=0;i<10;i++) //显示0-9{P0=codevalue[i];delay(500); //延时1秒}}}动态显示:#include#includetab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f}; //数码管显示数字字段unsigned char tab2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//片选字段unsigned char i,k,j,x;void delay(x); //声明延时子函数void main() //主函数{while(1){for(i=0;i<8;i++) //显示0-7{ P1=tab1[i];P0=tab2[i];delay(5); //延时}P1=tab1[8]; P0=tab2[0]; delay(5); //显示8-9P1=tab1[9]; P0=tab2[1]; delay(5);}}void delay(x) //延时函数定义{do{for(j=0;j<250;j++)for(k=0;k<250;k++);}}硬件实验十二矩阵键盘扫描显示一、实验任务1、把矩阵键盘上的按键输入的键码在静态数码管上显示出来。

51单片机静态数码管显示数字程序

51单片机静态数码管显示数字程序

void Delay10ms(); //延时 10ms
/******************************************************************************
* *函无
*输 出
:无
*******************************************************************************
/
void main(void)
{
unsigned int i,j;
LSA=0;
LSB=0;
LSC=0;
while(1)
{
if(K1==0)
//检测按键 K1 是否按下
{ Delay10ms(); //消除抖动
if(K1==0)
{
j=0;
}
while((i<50)&&(K1==0)) //检测按键是否松开
{
Delay10ms();
i++;
}
i=0;
} if(K2==0)
//检测按键 K2 是否按下
{
Delay10ms();
if(K2==0)
{
j=9;
}
while((i<50)&&(K2==0))
{
Delay10ms();
i++;
}
i=0;
} if(K3==0)
//检测按键 K3 是否按下
{
Delay10ms();
sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4;
sbit K1=P3^1; sbit K2=P3^0; sbit K3=P3^2; sbit K4=P3^3;

51单片机在数码管显示中的应用

51单片机在数码管显示中的应用
这样一个led数码管就有i根位选线和8根段选线要想显示一个数31硬件设计静态显示是各个led管上能稳定地同时显示各自的字符并维持不变直到显示下一个字符为采用这种显示方式时位选线同时选通每位的段选线分别与一个8位锁存器输出相连
摘要:LED数码显示管可以显示数字或符号,通常用来显示时间、速度、系统状态等。MCS
就有I根位选线和8根段选线,要想显示一个数
3.1硬件设计
静态显示是各个LED管上能稳定地同时显示
各自的字符并维持不变,直到显示下一个字符为
止。
采用这种显示方式时,位选线同时选通,每位
的段选线分别与一个8位锁存器输出相连。一种常
?[收稿日期]2006—07—28:[修改日期]2006—09一o5
??[作者简介]李正浩(1983一),男。本科生。就读于电子信息科学与技术专业。
程,然而却占用了太多的端口线资源,一个3位静
态LED显示器需要24个I/O口,如果显示位数太
多,则用这种显示方式无法实现。
4改进的静态显示方式
4.1硬件设计
利用静态显示稳定的优点,使用MCS一51单
片机的串行口输出,外接串并转换芯片74LS164作
为LED显示器的静态显示接口,把MCS一51的
RXD作为数据输出线,TXD作为移位时钟脉冲,
MOV 21H,#00000011B
DISP:MOV A,20H;20H中的数送A
ANL A,#OFH;取低4位
MOVC A,@A+DP1R;查表
MOV P0,A;送数到Po口
MOV A,20H;20H中的数送A
ANL A,g0FOH;取高4位
MOVC A,@A+DP1R;查表
MOV P1,A;送数到Pl口
进人了第二片74LS164,而新的数据就进人了第一

51单片机多段数码管显示原理

51单片机多段数码管显示原理

51单片机多段数码管显示原理1.引言多段数码管是一种常见的显示装置,由多个发光二极管(LED)组成。

51单片机是一种常用的微控制器,广泛应用于各种嵌入式系统和电子设备中。

本文将介绍51单片机如何控制多段数码管进行显示。

2.多段数码管基本原理多段数码管由7个LED组成,分别是a、b、c、d、e、f、g。

通过控制这些LED的亮灭和组合,可以显示0至9的数字,以及一些字母和特殊字符。

对于通常的7段数码管,通过组合控制LED的亮灭状态,即可实现各种数字的显示。

比如要显示数字0,需要同时点亮a、b、c、d、e、f这六个LED,而其他数字则只需点亮其中的一部分。

3.控制多段数码管的硬件连接为了控制多段数码管,我们需要先对其进行硬件连接。

每个LED需要连接到51单片机的一个IO口上,通过控制IO口的高低电平来控制LED的亮灭。

当控制端口输出高电平时,LED会发出光亮,反之则不亮。

4.使用共阳极数码管和共阴极数码管数码管分为共阳极数码管和共阴极数码管两种类型。

它们的区别在于LED的极性不同。

共阳极数码管的正极连接到VCC,通过拉低对应的IO口来点亮LED;共阴极数码管的负极连接到GND,通过拉高对应的IO口来点亮LED。

5.控制多段数码管的原理在51单片机中,通过控制IO口的输出值,可以控制多段数码管的亮灭。

当需要显示某个数字时,需要按照相应的真值表,控制对应的IO口输出高低电平。

下面是一个示例:数字亮灭情况真值表0 abcdef 11111101 bc 01100002 abdeg 11011013 abcdg 11110014 bcfg 01100115 acdfg 10110116 acdefg 10111117 abc 11100008 abcdefg 11111119 abcfg 1111011通过查表可以得出一个数字所对应的亮灭情况,然后将对应的IO 口配置为输出模式,并设置相应的输出值(高或低电平)即可实现对多段数码管的控制。

51单片机并行口驱动LED数码管显示电路及程序

51单片机并行口驱动LED数码管显示电路及程序

51单片机并行口驱动LED数码管显示电路及程序介绍利用51单片机的一个并行口实现多个LED数码管显示的方法,给出了利用此方法设计的多路LED显示系统的硬件电路结构原理图和软件程序流程,同时给出了采用51汇编语言编写程序。

1 硬件电路多位LED显示时,常将所有位的段选线并联在一起,由一个8位I/O口控制,而共阴极点或共阳极点分别由另一个8位I/O口控制;也可采用并行扩展口构成显示电路,通常,需要扩展器件管脚的较多,价格较高。

本文将介绍一种利用单片机的一个并行I/O口实现多个LED显示的简单方法,图1所示是该电路的硬件原理图。

其中,74LS138是3线-8线译码器,74LS164是8位并行输出门控串行输入移位寄存器,LED采用L05F型共阴极数码管。

显示时,其显示数据以串行方式从89C52的P12口输出送往移位寄存器74LS164的A、B端,然后将变成的并行数据从输出端Q0~Q7输出,以控制开关管WT1~WT8的集电极,然后再将输出的LED段选码同时送往数码管LED1~LED8。

位选码由89C52的P14~P16口输出并经译码器74LS138送往开关管Y1~Y8的基极,以对数码管LED1~LED8进行位选控制,这样,8个数码管便以100ms的时间间隔轮流显示。

由于人眼的残留效应,这8个数码管看上去几乎是同时显示。

<51单片机并行口驱动LED数码管显示电路>2 软件编程该系统的软件编程采用MCS-51系列单片机汇编语言完成,并把显示程序作为一个子程序,从而使主程序对其进行方便的调用。

图2所示是其流程图。

具体的程序代码如下:<51单片机并行口驱动LED数码管显示程序>pic单片机驱动led数码管显示程序;*****该程序用于驱动led数码管显示,在8个LED数码管上依次显示数字1、2、3、4、5、6、7、8*******;**** 单片机学习网经典程序已测试,led数码管共阴和共阳不同请修改码值转换表部分LIST P=18F458INCLUDE "P18F458.INC";所用的寄存器XIANR EQU 0X20ORG 0X00GOTO MAINORG 0X30;****************以下为码值转换表******************** CONVERT ADDWF PCL,1RETLW 0XC0 ;0,显示段码与具体的硬件连接有关RETLW 0XF9 ;1RETLW 0XA4 ;2RETLW 0XB0 ;3RETLW 0X99 ;4RETLW 0X92 ;5RETLW 0X82 ;6RETLW 0XD8 ;7RETLW 0X80 ;8RETLW 0X90 ;9RETLW 0X88 ;ARETLW 0X83 ;BRETLW 0XC6 ;CRETLW 0XA1 ;DRETLW 0X86 ;ERETLW 0X8E ;FRETLW 0X7F ;"."RETLW 0XBF ;"-"RETLW 0X89 ;HRETLW 0XFF ;DARKRETURN;**************初始化子程序*****************INITIALBCF TRISA,5 ;置RA5为输出方式,以输出锁存信号BCF TRISC,5BCF TRISC,3 ;设置SCK与SDO为输出方式BCF INTCON,GIE ;关闭所有中断MOVLW 0XC0MOVWF SSPSTAT ;设置SSPSTAT寄存器MOVLW 0X30MOVWF SSPCON1 ;设置SPI的控制方式,允许SSP方式,并且时钟下降;沿发送数据,与"74HC595当其SCLK从低到高电平;跳变时,串行输入数据(DI)移入寄存器"的特点相对应MOVLW 0X11 ;显示值寄存器赋初值,每个值占两个字节,MOVWF XIANR ;从8开始显示RETURN ;返回;***************led数码管显示子程序******************;SPI发送显示子模块DISPLAYTRANSMIT CLRF PORTA ;LACK送低电平,为锁存做准备MOVWF SSPBUF ;启动发送WAITBTFSS PIR1,SSPIFGOTO WAIT ;等待发送结束BCF PIR1,SSPIF ;清除中断标志NOPBSF PORTA,5 ;最后给一个锁存信号,代表一显示任务完成RETURN;*****************pic单片机驱动led显示程序的主程序开始*************** MAIN NOPCALL INITIAL ;调用系统初始化子程序LOOP MOVF XIANR,WCALL CONVERT ;查出XIANR的显示段码值CALL DISPLAYDECF XIANRDECF XIANR ;显示值减2,因为按字存放,按字节读取MOVF XIANR,WSUBLW 0X01BTFSS STATUS,ZGOTO LOOP ;若送完显示的数,则退出显示HERE GOTO HEREENDC语言源程序如下:/*************************************************程序名称:8位数码管移位显示0-F简要说明:使用共阳型数码管P0口输出数码管段码,P2口输出数码管位码编写:时间:2008-8-21*************************************************/#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define duan P0 //定义段码输出#define wei P2 //定义位码输出uchar a=0,b=0; //全局变量。

51单片机的数码管动态显示技术

51单片机的数码管动态显示技术
当测量的数据按权位展开所得的十进制数 不是我们所需要的十进制数,就必须按照测量 的要求,找出实际的数据与测量的数据之间的 对应关系来进行转换。如在电压测量系统中,测 量范围为 0-5V,测量精度为 0.02V,这样通过 ADC0809 转换后的数据就是 8 位二进制测量数 据。这个数据就包含了十进制电压值得个位、十 分位和百分位,必须从这 8 位二进制数据中拆 出个位、十分位和百分位的电压值,每一位用一 个数码管显示,这样才能直观的读出当前测量 的电压值是几点几几伏。
在信息时代的今天,单片机技术应用越来 越广泛,涉及各行各业,也渗透到人们的日常生 活之中,如洗衣机、空调、冰箱等的控制系统,就 可以用单片机实现。为了让人们很直观的了解 相关设备当前的工作状态,很多时候需要将当 前的时间、温度、工作程序等状态通过数码管显 示出来,这就涉及到单片机的数码管显示技术。
1 单片机与 LED 数码管动态显示接口电路 动态显示方式是将所有数码管的 8 段按同 名端连在一起,另外为每个数码管的公共极 COM 增加位选通控制电路,位选通由各自独立 的 I/O 线控制,显示数码同时传到每个数码管, 但每个瞬时由位选通信号选通一个数码管,即 在某一瞬时只有一个数码管显示数据,且显示 时间不能太长,一般为 1-10MS,依次循环扫描, 轮流显示,由于人的视觉滞留效应,人们看到的 是多位同时稳定显示。占用 I/O 端线少,电路较 简单,编程较复杂,CPU 要定时扫描刷新显示, 一般适用于显示位数较多的场合。 由于动态显示情况下,CPU 要定时扫描刷 新显示,数码管的信号在不停的通断变化,为了 保证显示效果,一般会在数据端口接一个缓冲 驱动芯片(如 74HC244、74LS244 等),而在位选 通端接一个 PNP 三极管作驱动 (如 9012、8550 等)。(如图 1)

51单片机数码管动态显示分析

51单片机数码管动态显示分析

51单片机数码管动态显示分析51单片机数码管动态显示是一种常见的数字显示方式,其主要通过控制不同位数的数码管,使其依次显示数字,从而实现数字动态显示的效果。

以下将从原理和实现两个方面对51单片机数码管动态显示进行分析。

一、原理分析51单片机数码管动态显示的原理主要分为两部分,分别为定时器控制和位选控制。

定时器控制:在51单片机中使用定时器是为了保证数字动态显示的稳定性。

通过定时器中断的方式来控制数码管的显示时间,使得每个数字都有足够的时间显示,并且切换速度平稳。

位选控制:在数码管动态显示过程中,需要依次控制不同位数的数码管显示数字。

这是通过位选控制器实现的,它会依次选中各位数码管,并显示出要显示的数字。

这个过程会不停地重复,从而实现数字的动态显示。

二、实现分析51单片机数码管动态显示的实现需要以下几个步骤:1. 确定使用的数码管数量及其接口:需要确定使用几个数码管以及它们的引脚分别对应的单片机IO口。

2. 编写显示函数:编写一个函数来控制数码管的动态显示,其中需要实现定时器中断以及位选控制的功能。

3. 循环调用显示函数:将编写好的显示函数放到主函数中进行调用,并不断地循环执行,从而实现数字的动态显示。

需要注意的是,在编写显示函数的过程中,需要确定定时器中断的时间间隔、位选控制的顺序以及每个数码管对应的IO口。

这些因素会直接影响到数字的显示效果,因此需要仔细调试以达到最佳的显示效果。

在实现过程中,还需要考虑到如何读取用户输入并将其显示在数码管上。

一种常见的方式是通过外部按键来读取用户输入,然后通过数码管动态显示的方式,将输入的数字依次显示出来。

总之,51单片机数码管动态显示是一种常见的数字显示方式,其实现原理和步骤相对比较简单。

需要注意的是,在实际应用中还需要结合实际需求进行相应的调整,以达到最佳的显示效果。

8255键盘扫描与LED数码管显示

8255键盘扫描与LED数码管显示

即(行数-1)*8+列值
mov
bh,0
mov
cx,bx ;显示码在discode表中的偏移量送CX
display:
;显示输出
mov si, offset discode
add si, cx ;显示码偏移地址
mov dx,04a4h ;C口地址
mov al,0fh
out dx,al ;写入C口内容,使位控(LED1)有效
mov ah,0
mov al, 0fbh ; 0fbh=1111 1011B
contin: push ax
;将ax的内容(0fbh)入栈保存
mov dx,04a4h ;C口地址
out dx,al ;写入C口内容0fbh=1111 1011B,即将第三行置为低电平
mov dx,04a0h ;A口地址
in
loop contin ;循环扫描下一行,确定行
jmp check0 ;若所有行都没有被按下,则返回check0重新检测
next: mov ch,cl ;保存行值至ch
mov cl,7 ;列值从0开始编号0-7
begin0: shl ah,1 ; ah为A口的内容,逻辑左移1位,末位补0
jnc goon ;无进位则转移,即可确定列
1
D6
D5
D4
D3
D2
D1
D0
1:端口C(PC3~PC0)输入
0:端口C(PC3~PC0)输出

1:端口B输入
式 控
0:端口B输出

1:端口B方式1

0:端口B方式0
标 志
1:端口C(PC7~PC4)输入

0:端口C(PC7~PC4)输出

8255与多位LED数码管的显示

8255与多位LED数码管的显示

实验2 8255与多位LED数码管的显示实验一、实验目的掌握8255A的编程原理与多位LED数码管的显示方法。

二、实验设备MUT—Ⅲ型实验箱、8086CPU模块。

三、实验内容把待显示字符的LED代码组成一个七段代码表,存放在存储器中。

通过对8255编写程序在多位LED 数码管上显示输出。

1、设计出8255与8086接口对应硬件电路,并完成相应的连接2、设计出8255与LED数码管的对应硬件接口电路,并完成相应的连接3、编写程序,在数码管上显示相应字符或数字4、写出习题部分要求的程序四、实验原理介绍本实验用到两部分电路:8255可编程并口电路和LED数码管的显示电路。

实验箱数码管采用共阴极形式。

五、实验步骤1、实验接线CS0↔CS8255(输出)PA0~PA7↔ LED-A~LED-DP(段控)(输出)PB0~PB5↔ LED-1~LED-6(位控)2、编程并全速或单步运行。

3、全速运行时观察数码管的变化。

六、实验提示1.8255A是比较常用的一种并行接口芯片,其特点在许多教科书中均有介绍。

本实验中用到8255A的A口和B口两个端口,A口和B口均作为输出口。

实验中,8255A工作于基本输入输出方式(方式0)。

2.用8255A端口B的PB0~PB5,控制LED的显示位,即8255A的端口B为LED数码显示器的位控制端口。

当B口中一位输出为“0”时,便在相应数码管的阴极加上了低电平,这个数码管就可以显示数据。

但具体显示什么数码,则由另一个端口,即段控制端口决定。

段控制端口由6个数码管共用,因此当CPU送出一个显示代码时,各数码管的阳极都收到了此代码。

但是,只有位控制码中低位对应的数码管才会导通而显示数字,其他管子并不发光。

3.对显示器采用动态扫描法控制显示。

所谓动态扫描,就是逐个接通6位LED,把端口A送出的代码送到相应的位上去显示。

此时,8255A的端口A送出的一个七段码,虽然各位LED都能接收到,但由于端口B只有一位输出低电平,所以只有一个LED的相应段导通显示数字,其他LED不亮。

51单片机数码管显示程序

51单片机数码管显示程序

;该程序库为4位显示,可以设置3个小数点的位置,数据在R2中, LED_DATA EQU P0 ;数码管数据口定义SHOW1 EQU 30H ;个位SHOW2 EQU 31H ;十位SHOW3 EQU 32H ;百位SHOW4 EQU 33H ;千位SHOW5 EQU 34H ;万位XSDW EQU 50H ;小数点位数ORG 0000HAJMP LOOPORG 0030HLOOP: MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV P3,#0FFHMOV SP,#60HMOV XSDW,#00HLOOP0: CALL CONVTCALL PLAYJB P3.7,LOOP0CALL DELAY2MSCALL DELAY2MSCALL DELAY2MSCALL DELAY2MSCALL DELAY2MSCALL DELAY2MSCALL DELAY2MSJB P3.7,LOOP0JNB P3.7, LOOP1NOPLOOP1: CALL PLAYJNB P3.7, LOOP1MOV A,XSDWCJNE A,#3,LOOP2MOV XSDW,#00HAJMP LOOP0LOOP2: INC XSDWAJMP LOOP0;---------------------------------------------------------;代码变换 (HEX TO BCD);---------------------------------------------------------CONVT: CLR EAMOV 41H,#00HMOV R4,40H ;待转换低位 MOV R3,41H ;待转换高位HEX2BCD: CLR AMOV R5,AMOV R6,AMOV R7,AMOV R2,#16 ;转换16位H2B: CLR CMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AMOV A,R7ADDC A,R7DA AMOV R7,AMOV A,R6ADDC A,R6DA AMOV R6,AMOV A,R5ADDC A,R5DA AMOV R5,ADJNZ R2,H2BMOV A,R7MOV B,#16DIV ABMOV R4,AMOV R4,AMOV R3,BMOV A,R5MOV R7,AMOV A,R6MOV B,#16DIV ABMOV R6,AMOV R5,BMOV SHOW5,R7 ;万位MOV SHOW4,R6MOV SHOW2,R4MOV SHOW1,R3 ;个位H2B0: SETB EARET;-----------------------------------------------------;显示子程序;---------------------------------------------PLAY: PUSH ACCMOV A,XSDW ;小数点的位数是3则直接跳转到显示,即千位是0也要显示CJNE A,#3, PLAY0AJMP PLAY5PLAY0: NOPMOV A,SHOW4 ;取千位JNZ PLAY5 ;等于0吗MOV SHOW4,#0AH ;等于0送数据0A,即不显示MOV A,XSDW ;小数点的位数是3则直接跳转到显示,即千位是0也要显示CJNE A,#2, PLAY1AJMP PLAY5PLAY1: NOPMOV A,SHOW3 ;取百位JNZ PLAY5MOV SHOW3,#0AHMOV A,XSDW ;小数点的位数是3则直接跳转到显示,即千位是0也要显示CJNE A,#1, PLAY2AJMP PLAY5PLAY2: NOPMOV A,SHOW2 ;取十位JNZ PLAY5MOV SHOW2,#0AHPLAY5: MOV R1,XSDW ;小数点的位数送R2MOV A,SHOW4 ;获得当前位地址MOV DPTR,#TAB_NU ;获得表头MOVC A,@A+DPTR ;查表获得显示数据MOV LED_DATA,A ;显示数据CJNE R1,#3, PLAY6 ;小数点的位数送R2,如果是3就点亮3位的小数点 CLR P0.7PLAY6: NOP ;不是则不点亮CLR P2.4LCALL DELAY2MS ;延时 2 MSSETB P2.4MOV A,SHOW3 ;获得当前位地址MOV DPTR,#TAB_NU ;获得表头MOVC A,@A+DPTR ;查表获得显示数据MOV LED_DATA,A ;显示数据CJNE R1,#2, PLAY7 ;小数点的位数送R2,如果是2就点亮2位的小数点 CLR P0.7PLAY7: NOP ;不是则不点亮CLR P2.5LCALL DELAY2MS ;延时 2 MSSETB P2.5MOV A,SHOW2 ;获得当前位地址MOV DPTR,#TAB_NU ;获得表头MOVC A,@A+DPTR ;查表获得显示数据MOV LED_DATA,A ;显示数据CJNE R1,#1, PLAY8 ;小数点的位数送R2,如果是3就点亮3位的小数点 CLR P0.7PLAY8: NOP ;不是则不点亮CLR P2.6LCALL DELAY2MS ;延时 2 MSSETB P2.6MOV A,SHOW1 ;获得当前位地址MOV DPTR,#TAB_NU ;获得表头MOVC A,@A+DPTR ;查表获得显示数据MOV LED_DATA,A ;显示数据CLR P2.7LCALL DELAY2MS ;延时 2 MSSETB P2.7POP ACCRET;---------------------------------------------------------;延时子程序;---------------------------------------------------------DELAY2MS:MOV R6,#10DEL1:MOV R7,#100DJNZ R7,$DJNZ R6,DEL1RETTAB_NU:DB 0C0H,0DDH,0A1H,89H,9CH,8AH,82H,0D9H,80H,88H,0FFH;---------------------------------------------------------END(注:可编辑下载,若有不当之处,请指正,谢谢!)。

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

期中大作业学院:物理与电子信息工程学院课题:【利用8255和51单片机实现数码管显示按键数值的程序】要求:【4*4矩阵键盘,按0到15,数码管上分别显示0~9,A~F】芯片资料:8255:8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。

具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。

其各口功能可由软件选择,使用灵活,通用性强。

8255可作为单片机与多种外设连接时的中间接口电路。

8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。

同时必须具有与外设连接的接口A、B、C口。

由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。

8255特性:1.一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口。

2.具有24个可编程设置的I/O口,即3组8位的I/O口,分别为PA口、PB口和PC 口。

它们又可分为两组12位的I/O口:A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3)。

A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O三种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.引脚说明RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

CS:芯片选择信号线,当这个输入引脚为低电平时,即CS=0时,表示芯片被选中,允许8255与CPU进行通讯;CS=1时,8255无法与CPU做数据传输。

RD:读信号线,当这个输入引脚为低电平时,即CS=0且RD=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

WR:写入信号,当这个输入引脚为低电平时,即CS=0且WR=0时,允许CPU将数据或控制字写入8255。

D0~D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。

PA0~PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。

PB0~PB7:端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。

PC0~PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。

端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。

A1,A0:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器。

当A1=0, A0=0时,PA口被选择;当A1=0, A0=1时,PB口被选择;当A1=1, A0=0时,PC口被选择;当A1=1. A0=1时,控制寄存器被选择。

74ls373芯片资料:74ls373是常用的地址锁存器芯片,它实质是一个是带三态缓冲输出的8D 触发器,在单片机系统中为了扩展外部存储器,通常需要一块74ls373芯片.本文将介绍74ls373的工作原理,引脚图(管脚图),内结构图、主要参数及在单片机系统中的典型应用电路.L——低电平;H——高电平;X——不定态;Q0——建立稳态前Q的电平;G——输入端,与8031ALE连高电平:畅通无阻低电平:关门锁存。

图中OE——使能端,接地。

当G=“1”时,74LS373输出端1Q—8Q与输入端1D—8D相同;当G为下降沿时,将输入数据锁存。

E G 功能0 0 直通Qi = Di0 1 保持(Qi保持不变)1 X 输出高阻774ls373在单片机系统中的应用电路图:当74LS373用作地址锁存器时,应使OE为低电平,此时锁存使能端C为高电平时,输出Q0~Q7 状态与输入端D1~D7状态相同;当C发生负的跳变时,输入端D0~D7 数据锁入Q0~Q7。

51单片机的ALE信号可以直接与74LS373的C连接。

在MCS-51单片机系统中,常采用74LS373作为地址锁存器使用,其连接方法如上图所示。

其中输入端1D~8D接至单片机的P0口,输出端提供的是低8位地址,G 端接至单片机的地址锁存允许信号ALE。

输出允许端OE接地,表示输出三态门一直打开。

1D~8D为8个输入端。

1Q~8Q为8个输出端。

G是数据锁存控制端;当G=1时,锁存器输出端同输入端;当G由“1”变为“0”时,数据输入锁存器中。

OE为输出允许端;当OE=“0”时,三态门打开;当OE=“1”时,三态门关闭,输出呈高阻状态。

(1).1脚是输出使能(OE),是低电平有效,当1脚是高电平时,不管输入3、4、7、8、13、14、17、18如何,也不管11脚(锁存控制端,G)如何,输出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部呈现高阻状态(或者叫浮空状态);(2).当1脚是低电平时,只要11脚(锁存控制端,G)上出现一个下降沿,输出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)立即呈现输入脚3、4、7、8、13、14、17、18的状态.锁存端LE 由高变低时,输出端8 位信息被锁存,直到LE 端再次有效。

当三态门使能信号OE为低电平时,三态门导通,允许Q0~Q7输出,OE为高电平时,输出悬空。

74LS138:无论从逻辑图还是功能表我们都可以看到74LS138的八个输出引脚,任何时刻要么全为高电平1—芯片处于不工作状态,要么只有一个为低电平0,其余7个输出引脚全为高电平1。

如果出现两个输出引脚同时为0的情况,说明该芯片已经损坏。

80C51单片机引脚图及引脚功能介绍:单片机的40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。

⒈ 电源:⑴ VCC - 芯片电源,接+5V;⑵ VSS - 接地端;⒉ 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。

⒊ 控制线:控制线共有4根,⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲① ALE功能:用来锁存P0口送出的低8位地址② PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。

⑵ PSEN:外ROM读选通信号。

⑶ RST/VPD:复位/备用电源。

① RST(Reset)功能:复位信号输入端。

② VPD功能:在Vcc掉电情况下,接备用电源。

⑷ EA/Vp p:内外ROM选择/片内EPROM编程电源。

① EA功能:内外ROM选择端。

② Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。

⒋ I/O线80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。

P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。

拿到一块单片机,想要使用它,首先必须要知道怎样去连线,我们用的一块89C51的芯片为例,我们就看一下如何给它连线。

1、电源:这当然是必不可少的了。

单片机使用的是5V电源,其中正极接40管脚,负极(地)接20管脚。

2、振蒎电路:单片机是一种时序电路,必须供给脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。

只要买来晶体震荡器,电容,连上就能了,按图1接上即可。

3、复位管脚:按图1中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。

4、 EA管脚:EA管脚接到正电源端。

至此,一个单片机就接好,通上电,单片机就开始工作了。

【实验电路图】【单片机源程序】#include <reg51.h> //51单片机头文件#include <absacc.h> //该可使用其中定义的宏来访问绝对地址#include <intrins.h>#define uchar unsigned char //宏的定义变量类型uchar 代替unsigned char#define uint unsigned int //宏的定义变量类型uint 代替unsigned int#define PA8255 XBYTE[0x4000] // 8255的A口地址#define PB8255 XBYTE[0x4001] // 8255的B口地址#define PC8255 XBYTE[0x4002] // 8255的C口地址#define PD8255 XBYTE[0x4003] // 8255的控制口地址uchar temp,key; //定义变量temp,key为按键键值,无实际意义void delay(uint z) //延迟程序{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void ini_8255() //初始化8255函数{PD8255 = 0x81;}void display() //显示函数,不可删除,删除出现连闪情况{PB8255 = 0xff; // PB8255全部置1,数码管清0PA8255 = 0x00; // PA8255全部置0,对数码管进行位选,选中六个数码管delay(100); //延迟}void keyscan(void) //按键扫描程序,让数码管显示按键数值{PC8255 = 0xef; //PC8255选中JL1列,JL1置0,其他置1if(temp != 0xef){delay(10); //延迟防抖temp = PC8255;switch(temp){case 0xee: key = 0x0f; PB8255 = 0x8e; //第15按键键值,数码管显示‘F’break;case 0xed: key = 0x0b; PB8255 = 0x83; //第11按键键值,数码管显示‘B’break;case 0xeb: key = 0x07; PB8255 = 0xf8; //第7按键键值,数码管显示‘7’break;case 0xe7: key = 0x03; PB8255 = 0xb0; //第3按键键值,数码管显示‘3’break;}while(temp != PC8255);}PC8255 = 0xdf;if(temp != 0xdf) //PC8255选中JL2列,JL2置0,其他置1{delay(10);temp = PC8255;switch(temp){case 0xde: key = 0x0e; PB8255 = 0x86; //第14按键键值,数码管显示‘E’break;case 0xdd: key = 0x0a; PB8255 = 0x88; //第10按键键值,数码管显示‘A’break;case 0xdb: key = 0x06; PB8255 = 0x82; //第6按键键值,数码管显示‘6’break;case 0xd7: key = 0x02; PB8255 = 0xa4; //第2按键键值,数码管显示‘2’break;}while(temp != PC8255);}PC8255 = 0xbf; //PC8255选中JL3列,JL3置0,其他置1if(temp != 0xbf){delay(10);temp = PC8255;switch(temp){case 0xbe: key = 0x0c; PB8255 = 0xa1; //第13按键键值,数码管显示‘C’。

相关文档
最新文档