学生实验二 第二功能按键显示实验
数码管的显示的实验报告

数码管的显示的实验报告数码管的显示的实验报告引言:数码管是一种常见的数字显示装置,广泛应用于各种电子设备中。
本实验旨在通过实际操作,了解数码管的原理和工作方式,并通过一系列实验验证其显示效果和功能。
实验一:数码管的基本原理数码管是由多个发光二极管(LED)组成的,每个发光二极管代表一个数字或符号。
通过对不同的发光二极管进行点亮或熄灭,可以显示出不同的数字或符号。
本实验使用的是共阳数码管,即共阳极连接在一起,而阴极分别连接到控制芯片的输出引脚。
实验二:数码管的驱动电路为了控制数码管的显示,需要使用驱动电路。
常见的驱动电路有共阴极驱动和共阳极驱动两种。
本实验使用的是共阳极驱动电路。
驱动电路由控制芯片、电阻和电容组成。
控制芯片通过控制输出引脚的高低电平来控制数码管的点亮和熄灭。
实验三:数码管的显示效果通过控制芯片的输出引脚,可以实现数码管的显示效果。
本实验使用的是四位数码管,可以显示0-9的数字。
通过改变控制芯片输出引脚的电平,可以控制数码管显示不同的数字。
实验中通过编写程序,使数码管显示从0到9的数字循环显示,并通过按键控制数字的增加和减少。
实验四:数码管的多位显示除了显示单个数字外,数码管还可以实现多位显示。
通过控制不同位数的数码管,可以显示更多的数字或符号。
本实验使用的是四位数码管,可以同时显示四个数字。
通过编写程序,可以实现四位数码管的多位显示,例如显示当前时间、温度等信息。
实验五:数码管的亮度调节数码管的亮度可以通过改变驱动电路中的电阻值来实现。
本实验通过改变电阻值,调节数码管的亮度。
实验中通过编写程序,通过按键控制数码管的亮度增加和减少,从而实现亮度的调节。
结论:通过本次实验,我们深入了解了数码管的原理和工作方式。
数码管可以通过驱动电路的控制,实现数字和符号的显示。
同时,数码管还可以实现多位显示和亮度调节。
数码管作为一种常见的数字显示装置,具有广泛的应用前景,可以应用于各种电子设备中。
通过进一步的研究和实践,我们可以更好地利用数码管的功能,满足不同应用场景的需求。
MSP430F5529实验指导书V1.0

MSP430F5529 实验指导书(V1.0)2014年10月27日东北林业大学机电工程学院“3+1”实验室实验一基础GPIO实验实验二键盘与液晶显示实验实验三时钟系统配置实验实验四看门狗与定时器实验实验五 AD/DA实验实验六比较器实验实验七 Flash实验实验八串行通信实验实验一基础GPIO实验【实验目的】1、熟悉CCS的基本使用方法;2、掌握MSP430系列单片机程序开发的基本步骤;3、掌握MSP430 IO口的基本功能。
【实验仪器】1、SEED-EXP430F5529v1.0开发板一套;2、PC机操作系统Windows XP或Windows 7,CCSv5.1集成开发环境。
【实验原理】CCS(Code Composer Studio)是 TI 公司研发的一款具有环境配置、源文件编辑、程序调试、跟踪和分析等功能的集成开发环境,能够帮助用户在一个软件环境下完成编辑、编译、链接、调试和数据分析等工作。
CCSv5.1 为 CCS 软件的最新版本,功能更强大、性能更稳定、可用性更高,是 MSP430 软件开发的理想工具。
SEED-EXP430F5529v1.0开发板上的有8个可操作的LED灯,与MCU的IO口对应关系如图1-1所示:图1-1 LED与MCU的IO对应关系电路我们可以通过控制单片机IO口的输出电平状态来控制各个LED灯的亮灭。
开发板上还有2个可操作的按键S1,S2。
如图1-2所示。
图1-2 按键电路我们可以通过读取与按键相连的IO口的输入电平状态来执行相应的操作。
此外,S1,S2还可以作为外部中断源,触发中断。
【实验内容】1、用调用头文件的方法,使能MSP430F5529开发板上的8个LED灯依次按顺序循环点亮;2、用按键S1控制开发板上LED1的亮灭状态(查询法);3、用按键S2控制开发板上跑马灯的循环速度(中断方式)。
【实验步骤】内容1:使能开发板上的8个LED灯依次按顺序循环点亮1、打开CCSv5并确定工作区间,然后选择File-->New-->CCS Project 弹出图1-3对话框。
按键及显示实验

一、实验原理及电路1、LCD显示器是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。
因此,LCD的驱动控制归于对每个液晶单元通断电的控制,每个液晶单元都对应着一个电极,对其通电,便可使用光线通过(也有刚好相反的,即不通电时光线通过,通电时光线不通过)。
,2、由于LCD已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行接口。
驱动模块具有八位数据总线,外加一些电源接口和控制信号。
而且还自带显示缓存,只需要将要显示的内容送到显示缓存中就可以实现内容的显示。
由于只有八条数据线,因此常常通过引脚信号来实现地址与数据线复用,以达到把相应数据送到相应显示缓存的目的。
实验电路图二、功能说明设计并实现一4×4键盘的接口,键盘与1602显示单元连接,编写实验程序扫描键盘输入,并将扫描结果送1602显示,键盘采用4×4键盘。
将键盘进行编号记作0—F当按下其中一个按键时将该按键对应的编号在一个1602显示出来,当按下下一个按键时便将这个按键的编号1602上显示出来实验框图四、实验代码#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define lcd_data P3sbit lcd_EN=P2^2;sbit lcd_RW=P2^1;sbit lcd_RS=P2^0;uchar key,a;uchar sys_time1[]="good";uchar sys_time2[]="morning!";uchar sys_time3[]="play";uchar sys_time4[]="basketball!";uchar sys_time5[]="study";uchar sys_time6[]="hard!";unsigned char code key_code[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xB7,0x77 };void delayms(uint ms){uchar t;while(ms--){for(t=0;t<120;t++);}}void delay_20ms(void){uchar i,temp;for(i = 20;i > 0;i--){temp = 248;while(--temp);temp = 248;while(--temp);}}void delay_38us(void){ uchar temp;temp = 18;while(--temp);}void delay_1520us(void){ uchar i,temp;for(i = 3;i > 0;i--){temp = 252;while(--temp);}}uchar lcd_rd_status( ) /*读取lcd1602的状态,主要用于判断忙*/{uchar tmp_sts; //声明变量tmp_stslcd_data = 0xff; //初始化P3口lcd_RW = 1; //RW =1 读lcd_RS = 0; //RS =0 命令,合起来表示读命令(状态)lcd_EN = 1; //EN=1,打开EN,LCD1602开始输出命令数据,100nS 之后命令数据有效tmp_sts = lcd_data; //读取命令到tmp_stslcd_EN = 0; //关掉LCD1602lcd_RW = 0; //把LCD1602设置成写return tmp_sts; //函数返回值tmp_sts}void lcd_wr_com(uchar command ) /*写一个命令到LCD1602*/{while(0x80&lcd_rd_status()); //写之前先判断LCD1602是否忙,看读出的命令的最高位是否为1,为1表示忙,继续读,直到不忙lcd_RW = 0;lcd_RS = 0; //RW=0,RS=0 写命令lcd_data = command; //把需要写的命令写到数据线上lcd_EN = 1;lcd_EN = 0; //EN输出高电平脉冲,命令写入}void lcd_wr_data(uchar wdata ) /*写一个显示数据到lcd1602*/{while(0x80&lcd_rd_status()); //写之前先判断lcd1602是否忙,看读出的命令的最高位是否为1,为1表示忙,继续读,直到不忙lcd_RW = 0;lcd_RS = 1; //RW=0,RS=1 写显示数据lcd_data = wdata ; //把需要写的显示数据写到数据线上lcd_EN = 1;lcd_EN = 0; //EN输出高电平脉冲,命令写入lcd_RS = 0;}void Init_lcd(void) /*初始化lcd1602*/{delay_20ms(); //调用延时lcd_wr_com(0x38); //设置16*2格式,5*8点阵,8位数据接口delay_38us(); //调用延时lcd_wr_com(0x0c); //开显示,不显示光标delay_38us(); //调用延时lcd_wr_com(0x01); //清屏delay_1520us(); //调用延时lcd_wr_com(0x06); //显示一个数据后光标自动+1}void show(){uchar i;Init_lcd(); //调用LCD初始化函数for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0x80+i); //设置显示的位置if(sys_time1[i]==0x00) //字符串是否结束break;lcd_wr_data(sys_time1[i]);//送显示数据}for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0xc0+i); //设置显示的位置if(sys_time2[i]==0x00) //判断第二行显示break;lcd_wr_data(sys_time2[i]); //送显示数据}}void show1(){uchar i;Init_lcd(); //调用LCD初始化函数for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0x80+i); //设置显示的位置if(sys_time3[i]==0x00) //字符串是否结束break;lcd_wr_data(sys_time3[i]);//送显示数据}for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0xc0+i); //设置显示的位置if(sys_time4[i]==0x00) //判断第二行显示break;lcd_wr_data(sys_time4[i]); //送显示数据}}void show2(){uchar i;Init_lcd(); //调用LCD初始化函数for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0x80+i); //设置显示的位置if(sys_time5[i]==0x00) //字符串是否结束break;lcd_wr_data(sys_time5[i]);//送显示数据}for(i=0;i<16;i++) //显示液晶的第一行{lcd_wr_com(0xc0+i); //设置显示的位置if(sys_time6[i]==0x00) //判断第二行显示break;lcd_wr_data(sys_time6[i]); //送显示数据}}uchar rdkey() //键盘扫描函数{uchar scan1,scan2,keycode,j;P1=0x0f; //列线置低电平,行线输入状态scan1=P1; //读入行值if((scan1&0x0f)!=0x0f) //判断是否有按键按下{delayms(30); //调用延时程序去抖动scan1=P1; //读入行值if((scan1&0x0f)!=0x0f) //二次判断是否有按键按下{P1=0xf0; //列线作输入,行线置低电平scan2=P1; //读入列值keycode=scan1|scan2; //组合成键编码for(j=0;j<=15;j++) //循环16次{if(keycode== key_code[j])//查表得键值{key=j; //算出最后键值return(key); //返回键值}}}}else P1=0xff;return (16);}void main(){while(1){P1=0x0f;if((P1&0x0f)!=0x0f) //判断是否有键按下{a=rdkey(); //调用键盘扫描函数switch (a){case 0: show(); break;case 1: show1();break;case 2: show2();break;}}}}五、实验过程本实验仪提供了一个4×4的小键盘,向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e103H)读回,如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高.这样就可以通过输出的列码和读取的行码来判断按下的是什么键。
嵌入式实验报告数码管显示实验

实验报告课程名称嵌入式系统编程实践实验仪器清华同方辰源嵌入式系统实验箱实验名称实验四:数码管显示实验系别__计算机学院_专业 _班级/学号学生姓名实验日期 2013年10月11日成绩___________________指导教师实验四:数码管显示实验一、实验问题回答(1)如何设置功能3,4中的循环速度?答:利用系统SysTick Handler中断,控制循环速度void SysTick_Handler (void){Event = 1;}(2)若是想实现类似实验(三)通过键盘动态控制循环速度,考虑一下应该如何设计?答:SysTickPeriodSet(SysCtlClockGet() / X)//设置x的大小就可以控制循环的速度。
void Reset_Counter_Speed(int x){SysTickIntDisable();SysTickDisable();SysTickPeriodSet(SysCtlClockGet() / x);// 设置x,控制计数频率,值与频率成正比SysTickEnable();SysTickIntEnable();},达到预期的效果。
二、实验目的和效果(效果即是否达到实验目的,达到的程度如何)学习、了解和掌握数码管工作原理和使用方法实验结果及检查(1)默认在在OLED屏幕上分行显示自己的学号、姓名、项目序号、时间,如“2010011001”、“zhangsan”、“work4”、“2012-11-”(2)首先在屏幕上显示四个功能选单,通过键盘A-F键选择不同功能,选择后屏幕显示相关功能提示,接受键盘输入的数字键0-9并在数码管上显示。
如:开始显示:“please choose the function:”“A: …”“B: …”“C: …”“D: …”按下“A”键后,显示”now you choose function A”(3)按下键盘后,根据不同功能在数码管上显示按键字符。
单片机实验报告——矩阵键盘数码管显示

单片机实验报告信息处理实验实验二矩阵键盘专业:电气工程及其自动化指导老师:***组员:明洪开张鸿伟张谦赵智奇学号:152703117 \152703115\152703118\152703114室温:18 ℃日期:2017 年10 月25日矩阵键盘一、实验内容1、编写程序,做到在键盘上每按一个键(0-F)用数码管将该建对应的名字显示出来。
按其它键没有结果。
二、实验目的1、学习独立式按键的查询识别方法。
2、非编码矩阵键盘的行反转法识别方法。
3、掌握键盘接口的基本特点,了解独立键盘和矩阵键盘的应用方法。
4、掌握键盘接口的硬件设计方法,软件程序设计和贴士排错能力。
5、掌握利用Keil51软件对程序进行编译。
6、会根据实际功能,正确选择单片机功能接线,编制正确程序。
对实验结果能做出分析和解释,能写出符合规格的实验报告。
三、实验原理1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。
2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。
3、识别键的闭合,通常采用行扫描法和行反转法。
行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。
行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。
然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。
这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。
由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。
大学计算机基础实验指导书

大学计算机基础实验指导书实验一 Windows的启动及基本操作一、实验目的及要求1、掌握Windows启动以及关闭的方法;2、解键盘上各按键的功能;3、练习鼠标的操作及使用方法。
二、实验内容1、熟悉实验环境。
2、键盘操作的简单练习。
3、鼠标操作的练习。
三、实验指导1、开机前先观察一下主机、显示器、键盘和鼠标之间的连接情况;观察电源开关的位置、<Reset>键位置和键盘上各键的位置。
2、鼠标单击“开始”按钮,移动鼠标到“程序”上,再移动鼠标到弹出的级联菜单中的“附件”,最后移动鼠标到弹出的级联菜单的“写字板”中,单击,即可打开“写字板”进行编辑。
3、目前,鼠标在Windows环境下是一个主要且常用的输入设备。
常用的鼠标器有机械式和光电式两种。
鼠标的操作有单击、双击、移动、拖动、与键盘组合等。
单击:快速按下鼠标键。
单击左键是选定鼠标指针下面的任何内容,单击右键是打开鼠标指针所指内容的快捷菜单。
一般情况下若无特殊说明,单击操作均指单击左键。
双击:快速击键两次(迅速的两次单击)。
双击左键是首先选定鼠标指针下面的项目,然后再执行一个默认的操作。
单击左键选定鼠标指针下面的内容,然后再按回车键的操作与双击左键的作用完全一样。
若双击鼠标左键之后没有反应,说明两次单击的速度不够迅速。
移动:不按鼠标的任何键移动鼠标,此时屏幕上鼠标指针相应移动。
拖动:鼠标指针指向某一对象或某一点时,按下鼠标左键不松,同时移动鼠标至目的地时再松开鼠标左键,鼠标指针所指的对象即被移到一个新的位置。
与键盘组合:有些功能仅用鼠标不能完全实现,需借助于键盘上的某些按键组合才能实现所需功能。
如与Ctrl键组合,可选定不续的多个文件;与Shift键组合,选定的是单击的两个文件所形成的矩形区域之间的所有文件;与Ctrl键和Shift键同时组合,选定的是几个文件之间的所有文件。
四、实验思考题1、如何利用键盘输入英文大写字母?2、鼠标右击不同的位置,弹出的快捷菜单一样吗?实验二键盘指法练习一、实验目的及要求1、熟悉键盘的基本操作及键位;2、熟练掌握英文大小写、数字、标点的用法及输入;3、掌握正确的操作指法及姿势。
微机原理键盘控制与显示实验报告
专业:电气工程及其自动化姓名: _________实验报告学号: _______日期: ___ _____地点: ____ ________课程名称: ________微机原理(实验)___________指导老师: ____徐习东 _______成绩:__________________实验名称: ______ 键盘控制与显示_______实验类型: _____软件实验 ______同组学生姓名:__________一、实验目的和要求(必填)二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、心得【实验目的】1.通过实验掌握 TMS320F2812 通用输入 / 输出管脚直接控制外围设备的方法2.了解发光二极管的控制编程方法。
3.了解 SPI 的使用。
4.了解如何使用 GpioA 口进行数据的锁存5.通过实验掌握 TMS320F2812 的扩展端口接收外围设备信息的方法6.了解键盘的使用原理及编程方法【实验内容】1.按键显示程序,对按键记录次数,以二进制显示在16 个 LED 上。
2.定时器编程,并用按键控制各位时分秒,使其能完成加减操作【实验仪器】TMS320F2812数字信号处理器与学生用集成板。
【实验步骤】1.撰写代码2.调试代码3.实现功能【实验代码】一、定时器①宏定义和全局变量定义然后同时定义了全局变量,包括时、分、分析:这段代码是初始宏定义,用于定义按键对应的编码与地址,秒,按键编码, LED 编码和控制位。
②共阳字形码分析:由于这次实验要用到数码管,所以我们要定义一个数码管共阳端字形码,使每一个代码对应一种显示状态。
③SPI 初始化子程序分析:这一段是本次实验的重点,就是SPI 初始化。
1 )SPICCR :用于控制SPI 的状态,上下降沿发送,还有几位的数据。
其中第7 位,即 SPICCR.6 是控制SPI 在上下沿发送, 1 代表下降沿,2 代表上升沿;第8 位,即 SPICCR.7 是控制复位的,0 代表为复位状态;低 4 位控制数据长度,长度等于n+1 。
电气化自动技术 实验2 IO口开关量输入-实验指导书
实验二 IO开关量输入实验一、实验概述使用按键来控制单片机IO口的高低电平。
二、实验目的熟悉单片机的最小系统,了解单片机I/O的结构;掌握按键键值的读入和处理;学习简单程序的编写。
三、实验预习要求1、单片机最小系统电路构成;2、I/O口的内部结构;3、简单程序指令熟悉;四、实验原理图:AT89C52本实验使用了单片机AT89C52来做实验,该单片机有4组IO口。
单片机总的IO 会分为这几类:电平可变化的IO口和VCC、GND两类。
其中电平可变化的IO有P0口、P1口、P2口、P3口。
本实验就是读取了P1口的电平从而读取按键输入的值,P0口来输出高低电平来控制LED的亮或灭。
图:P1口的电路R1、R2是上拉电阻,拉高了P10和P11两个端口的电平,当按下按键的时候,相应的端口变为低电平。
图:P0口的电路P0口接了8个LED,RP1是限流电阻,保护LED,避免电流过高,烧坏LED;RP2是上拉电阻,将P0口的电平拉高。
五、Proteus使用的元器件1.AT89C51 //51单片机。
2.BUTTON //按键,用于最小系统复位;实现输入功能。
3.CAP //电容,用于搭建复位电路。
4.CAP-ELEC //电解电容,用于搭建复位电路。
5.CRYSTAL //晶振,给单片机提供时钟信号。
6.LED-YELLOW //黄色LED灯。
7.RES //电阻。
8.RESPACK-8 //排阻;RP1是限流电阻,RP2是上拉电阻。
六、实验要求1、利用单片机,按键和发光二极管,构成一个LED灯控制电路;2、上电时, 点亮LED,按下K1时, LED向左移一位,按下K2时, LED向右移一位。
七、硬件连接图1. 硬件电路图:8位独立LED图:8位独立按键2.硬件连接表3.Proteus仿真图图:Proteus仿真图八、实验程序/******************************************************************** ****文件名称: main.c作者:版本: V1.00说明: IO开关量输入实验修改记录:-------------------------------------------------------------------------* 功能描述: 按键扫描程序* 上电时, 点亮P00口LED ,按下K1时, LED向右移一位,按下K2时, LED向左移一位-------------------------------------------------------------------------* 接线说明:P10-K1,P11-K2,P00~P07——D1~D8********************************************************************** ****/#include <reg52.h>#include <intrins.h>#define uchar unsigned char //数据类型宏定义#define uint unsigned int/**********单片机IO口引脚定义********************************************/#define LED P0sbit K1 = P1^0;sbit K2 = P1^1;/**********函数定义******************************************************/uchar scan_key();void proc_key(uchar key_v);void delayms(uchar ms);/**********主函数********************************************************/void main(void){uchar key_s,key_v;key_v = 0x03; //初始化IO口LED = 0xfe;while(1){key_s = scan_key();if(key_s != key_v) //判断按键是否按下{delayms(10); //延时消抖key_s = scan_key();if(key_s != key_v){key_v = key_s;proc_key(key_v);}}}}/**********键盘扫描函数**************************************************/ uchar scan_key(){uchar key_s;key_s = 0x00;key_s |= K2;key_s <<= 1;key_s |= K1;return key_s; //返回按键号}/**********键盘处理函数**************************************************/ void proc_key(uchar key_v){if((key_v & 0x01) == 0){LED = _cror_(LED,1); //循环右移一位}else if((key_v & 0x02) == 0){LED = _crol_(LED, 1); //循环左移一位}}/***********延时函数*****************************************************/void delayms(uchar ms)// 延时子程序{uchar i;while(ms--){for(i = 0; i < 120; i++);}}九、实验步骤1、打开Proteus 8环境,在快捷工具栏中点击源代码按纽,然后在菜单栏选择系统-编译器配置。
实验二 数码管显示
实验二数码管显示本实验的目的是掌握数码管的工作原理与使用,实现数码管的静、动态显示。
静态数码管我们先看看什么是数码管,上图就是各种长相各种样子的数码管了,肯定很眼熟了吧。
不管将几位数码管连在一起,数码管的显示原理都是一样的,都是靠点亮内部的发光二极管来发光,下面就来我们讲解一个数码管是如何亮起来的。
数码管内部电路如下图所示,从右图可看出,一位数码管的引脚是10个,显示一个8字需要7个小段,另外还有一个小数点,所以其内部一共有8个小的发光二极管,最后还有一个公共端,生产商为了封装统一,单位数码管都封装10个引脚,其中第3和第8引脚是连接在一起的。
而它们的公共端又可分为共阳极和共阴极,中间图为共阴极内部原理图,右图为共阳极内部原理图。
上图展出了常用的两种数码管的引脚排列和内部结构。
总所周知,点亮发光二极管就是要给予它足够大的正向压降。
所以点亮数码管其实也就是给它内部相应的发光二极管正向压降。
如上图左(一共a、b、c、d、e、f、g、DP 八段),如果要显示“1”则要点亮b、c 两段LED;显示“A”则点亮a、b、c、e、f、g 这六段LED;我们还知道,既然LED 加载的是正向压降,它的两端电压必然会有高低之分:如果八段LED 电压高的一端为公共端,我们称之为共阳极数码管(如上图中);如果八段LED 电压低的一段为公共端,则称之为共阴极数码管(上图右)。
所以,要点亮共阳极数码管,则要在公共端给予高于非公共端的电平;反之点亮共阴极数码管,则要在非公共端给予较高电平。
对共阴极数码来说,其8个发光二极管的阴极在数码管内部全部连接在一起,所以称“共阴”,而它们的阳极是独立的,通常在设计电路时一般把阴极接地。
当我们给数码管的任意一个阳极加一个高电平时,对应的这个发光二极管就点亮了。
如果想要显示出一个8字,并且把右下角的小数点也点亮的话,可以给8个阳极全部送高电平,如果想让它显示出一个0字,那么我们可以除了给第“g, dp”这两位送低电平外,其余引脚全部都送高电平,这样它就显示出0字了。
实验2 LED显示实验和键盘编程
实验二LED显示实验和键盘编程
实验目的
1.学习LED静态显示和动态显示方法;
2.学习键盘独立按键。
实验内容
1.LED 静态显示。
将J5中的1个PIN连接到GND,P1口J30连接至J31,J32
连接至J1,J19用短路冒短接;从P1口循环输出1-9的显示的段码,并观察显示亮度。
2.LED动态显示。
将J5连接到P2口J16,P1口J30连接至J31,J32连接至
J1,J19用短路冒短接;从P1口循环输出1-9的显示的段码,从P2口输出显示的位码,在6个LED上分别显示1-6 六个数字,且数字稳定显示。
3.安装2中连接电路方法,通过串口控制LED显示。
当串口发出命令后,LED
在指定的位置显示指定的数字,例如:发送“3,2”,则在第3个位置显示数字2。
4.独立按键扫描。
将J5中的PIN8连接到GND,将P1口J30连接至J8,编程
实现扫描按键程序,扫描S1、S5、S9和S13,并将扫描的按键显示到数码管上。
实验方法
做实验时请注意:PIN4和PIN8相当于空脚,因为只有6个数码管,所以做实验时控制这2个脚不起作用。
此外做实验前建议仔细检查电路连接!
图1 实验原理图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学生实验二 第二功能按键显示实验
一、实验要求
在键盘扫描实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个第二功能键盘显示实验,把利用某一个按键,例如“A ”键,实现0至9键的第二功能,以不同字符的显示显示出来。
二、实验电路及连线
三、 实验说明
本实验仪提供了一个6×4的小键盘,向列扫描码地址(0X002H)逐列输出低电平,然后从行码地址(0X001H)读回。
如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。
这样就可以通过输出的列码和读取的行码来判断按下的是什么键。
在判断有键按下后,要有一定的延时,防止键盘抖动。
地址中的X 是由KEY/LED CS 决定,参见地址译码。
做键盘和LED 实验时,需将KEY/LED CS 接到相应的地址译码上。
以便用相应的地址来访问。
例如将KEY/LED CS 信号接CS0上,则列扫描地址为08002H ,行码地址为08001H 。
列扫描码还可以分时用作LED 的位选通信号。
四、 实验框图
五、 实验步骤
1、按键能如实显示,并且前一按键向左推动,保留原来按过的按键值。
2、利用某一个按键,例如“A ”键,实现0至9键的第二功能,把0至9数字以加2的形式显示出来。
(这是A 键和0至9键键不同时按下)
3、利用某一个按键,例如“A ”键,实现0至9键的第二功能,把0至9数字以自定义的形式显示出来,因此实现编好0至9键的第二功定义变表。
(这是A 键和0至9键键不同时按下)
读回行码 (0X001H) 列码 (0X002H)
数据总线
LED 6位数字显示器和4ⅹ6 键盘电路
本实验仪的LED 显示电路和键盘电路如图。
显示控制的位码由74HC374输出,经MC1413反向驱动后,做LED 的位选通信号。
位选通信号也可做为键盘列扫描码,键盘扫描的行数据从74HC245读回,374输出的列扫描码经245读入后,用来判断是否有键被按下,以及按下的是什么键。
如果没有键按下,由于上拉电阻的作用,经245读回的值为高,如果有键按下,374输出的低电平经过按键被接到245的端口上,这样从245读回的数据就会有低位,根据374输出的列信号和245读回的行信号,就可以判断哪个键被按下。
LED 显示的段码由另一个74HC374输出。
键盘和LED 显示的地址译码见下图,做键盘和LED 实验时,需将KEY/LED CS 接到相应的地址译码上。
位码输出的地址为0X002H ,段码输出的地址为0X004H ,键盘行码读回的地址为0X001H ,此处X 是由KEY/LED CS 决定,参见地址译码。
例如将KEY/LED CS
接到地址译码的CS0上,那么位码输出的地址就为08002H ,段码输出的地址就是08004H ,键盘行码读回的地址为08001H 。
六、 实验步骤
基本键盘扫描显示实验程序
OUTBIT equ 08002h ; 位控制口
OUTSEG equ 08004h ; 段控制口
IN equ 08001h ; 键盘读入口 键盘及LED 显示及LED 显示电路
LEDBuf equ 60h ; 显示缓冲
ljmp Start
LEDMAP: ; 八段管显示码
db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h
Delay: ; 延时子程序
mov r7, #0
DelayLoop:
djnz r7, DelayLoop
djnz r6, DelayLoop
ret
DisplayLED:
mov r0, #LEDBuf
mov r1, #6 ; 共6个八段管
mov r2, #00100000b ; 从左边开始显示Loop:
mov dptr, #OUTBIT
mov a, #0
movx @dptr, a ; 关所有八段管
mov a, @r0
mov dptr, #OUTSEG
movx @dptr, a
mov dptr, #OUTBIT
mov a, r2
movx @dptr, a ; 显示一位八段管
mov r6, #1
call Delay
mov a, r2 ; 显示下一位
rr a
mov r2, a
inc r0
djnz r1, Loop
ret
TestKey:
mov dptr, #OUTBIT
mov a, #0
movx @dptr, a ; 输出线置为0
mov dptr, #IN
movx a, @dptr ; 读入键状态
cpl a
anl a, #0fh ; 高四位不用
ret
KeyTable: ; 键码定义
db 16h, 15h, 14h, 0ffh
db 13h, 12h, 11h, 10h
db 0dh, 0ch, 0bh, 0ah
db 0eh, 03h, 06h, 09h
db 0fh, 02h, 05h, 08h
db 00h, 01h, 04h, 07h
GetKey:
mov dptr, #OUTBIT
mov P2, dph
mov r0, #Low(IN)
mov r1, #00100000b
mov r2, #6
KLoop:
mov a, r1 ; 找出键所在列
cpl a
movx @dptr, a
cpl a
rr a
mov r1, a ; 下一列
movx a, @r0
cpl a
anl a, #0fh
jnz Goon1 ; 该列有键入
djnz r2, KLoop
mov r2, #0ffh ; 没有键按下, 返回0ffh
sjmp Exit
Goon1:
mov r1, a ; 键值= 列X 4 + 行
mov a, r2
dec a
rl a
rl a
mov r2, a ; r2 = (r2-1)*4
mov a, r1 ; r1中为读入的行值
mov r1, #4
LoopC:
rrc a ; 移位找出所在行
jc Exit
inc r2 ; r2 = r2+ 行值
djnz r1, LoopC
Exit:
mov a, r2 ; 取出键码
mov dptr, #KeyTable
movc a, @a+dptr
mov r2, a
WaitRelease:
mov dptr, #OUTBIT ; 等键释放
clr a
movx @dptr, a
mov r6, #10
call Delay
call TestKey
jnz WaitRelease
mov a, r2
ret
Start:
mov sp, #40h
mov LEDBuf+0, #0ffh ; 显示8.8.8.8.
mov LEDBuf+1, #0ffh
mov LEDBuf+2, #0ffh
mov LEDBuf+3, #0ffh
mov LEDBuf+4, #0
mov LEDBuf+5, #0
MLoop:
call DisplayLED ; 显示
call TestKey ; 有键入?
jz MLoop ; 无键入, 继续显示call GetKey ; 读入键码
anl a, #0fh ; 显示键码
mov dptr, #LEDMap
movc a, @a+dptr
mov LEDBuf+5, a
ljmp MLoop
end。