实验一数码管按键控制
数码管及按键实验报告模板(1)

数码管及流水灯实验报告成员:2012年11月一、实验要求:1.实验1:在开发板上调试利用按键控制数码管从1累加到F变化(S2加、S3减)(不同分组按键利用IO口不同);2.实验2:利用开发板进行秒表设计(显示分、秒,分辨率0.1s,如0.58.5)(参考P189程序);二、硬件原理图1. 硬件原理图A到F秒表2.原理图分析:实验一原理LED数码管是由4个发光二极管中的7个长条形发光二极管(俗称7笔段),按a、b、c、d、e、f、g顺序组成“8”字形,另一个点形的发光二极管dp放在右下方,用来显示小数点,。
只要控制7笔段按一定的要求亮与灭,就能显示出十六进制0~F。
实验二原理以共阳极八段数码管为例,当控制某段发光二极管的信号为低电平时,对应的发光二极管点亮,当需要显示某字符时,就将该字符对应的所有二极管点亮;共阴极二极管则相反,控制信号为高电平时点亮。
电平信号按照dp,g,e…a 的顺序组合形成的数据字称为该字符对应的段码三、软件设计系统1. 软件设计思想与流程图软件流程图如下(标准流程图画法)……:实验一、A到F实验二、秒表2.软件代码:实验一、秒表#include <avr/io.h> //IO定义#include <util/delay.h> //延时库文件const unsigned char led_7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//段码列表,共阳极,0~9的代码列表const unsigned char position[4]={0xEF,0xDF,0xBF,0x7F};//位输出代码,分别定义PD5~Pd0单一输出“0”的状态unsigned char time[3]; //时、分、秒计数unsigned char dis_buff[4]; //显示缓冲区,存放要显示的6字符的段码unsigned char time_counter; //1s计数器unsigned char point_on=0; //秒显示标志void display(void){unsigned char i;for(i=0;i<=3;i++) //显示循环开始{PORTB = led_7[dis_buff[i]]; //段码写入PORTAif(point_on && (i == 1||i == 3))PORTB &= 0x7F; //小数点显示PORTD = position[i]; //位信号写入PORTD_delay_ms(1); //点亮延时PORTD = 0xFF; //清除位信号}}void time_to_disbuffer(void){/* unsigned char i,j=0;for(i=0;i<=2;i++);{dis_buff[j++] = time[i] % 10;dis_buff[j++] = time[i] / 10;}*/dis_buff[0] = time[0] / 10;dis_buff[1] = time[1] % 10;dis_buff[2] = time[1] / 10;dis_buff[3] = time[2] % 10;}void main(void ){PORTB =0xFF; //IO初始化DDRB =0xFF;PORTD =0xFF;DDRD =0xFF;time[2] = 11;time[1] = 00; time[0] = 23; //时间初值time_to_disbuffer(); //将时间值装载至缓冲区while (1) //循环开始{display(); //调用显示函数if (++time[0]>=99) //次数计数{time[0] = 0; //重置计数point_on= ~point_on; //小数点位求反if (++time[1] >=60) //秒数目达到60后进位重置{time[1] = 0;if (++time[2] >= 60) //分计数达到60后进位重置{time[2] = 0;}}}time_to_disbuffer(); //时间装载至缓冲区_delay_ms(5); //延时}}实验二、0到F#include <avr/io.h> //IO定义#include <util/delay.h> //延时库文件const char led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//段码列表,共阳极,0~F的代码列表int main(void){char i=0; //定义iPORTB=0xc0; //定义输入端的初始值,0xFF表示高电平DDRB=0xff; //定义DB口为输入端PORTD=0xef; //定义输出端的初始值,0x70表示低电平DDRD=0xff; //定义DD口为输出端while(1){if((PINC&(1<<PC3))==0) //显示循环开始{_delay_ms(10);if((PINC&(1<<PC3))==0) //检测PC3是否按下{if(i<16){PORTB=led[i];i++;}if(i>=16)i=0;}}while(!(PINC&(1<<PC3))); //再次放手检测if((PINC&(1<<PC2))==0) //显示循环开始{_delay_ms(10); //点亮时间if((PINC&(1<<PC2))==0) //检测PC2是否按下{if(i<16){PORTB=led[i];i--;}if(i>=16)i=0;}}while(!(PINC&(1<<PC2))); //再次放手检测}}四. 成员分工及完成情况五. 意见及建议实验报告、编译工程文件、仿真文件打包提供电子版。
按键显示电路实验报告(3篇)

第1篇一、实验目的1. 熟悉按键电路的基本原理和设计方法。
2. 掌握按键电路的搭建和调试方法。
3. 了解按键电路在实际应用中的重要性。
4. 提高动手实践能力和电路分析能力。
二、实验原理按键显示电路是一种将按键输入转换为数字信号,并通过显示设备进行显示的电路。
本实验主要涉及以下原理:1. 按键原理:按键通过机械触点实现电路的通断,当按键被按下时,电路接通,产生一个低电平信号;当按键释放时,电路断开,产生一个高电平信号。
2. 译码电路:将按键输入的信号转换为相应的数字信号,以便后续处理。
3. 显示电路:将数字信号转换为可视化的信息,如LED灯、数码管等。
三、实验器材1. 电路板2. 按键3. 电阻4. LED灯5. 数码管6. 电源7. 基本工具四、实验步骤1. 按键电路搭建(1)根据电路原理图,在电路板上焊接按键、电阻、LED灯等元器件。
(2)连接电源,确保电路板供电正常。
2. 译码电路搭建(1)根据电路原理图,在电路板上焊接译码电路所需的元器件。
(2)连接译码电路与按键电路,确保信号传输正常。
3. 显示电路搭建(1)根据电路原理图,在电路板上焊接显示电路所需的元器件。
(2)连接显示电路与译码电路,确保信号传输正常。
4. 电路调试(1)检查电路连接是否正确,确保无短路、断路等问题。
(2)按下按键,观察LED灯或数码管显示是否正常。
(3)根据需要调整电路参数,如电阻阻值、电源电压等,以达到最佳显示效果。
五、实验结果与分析1. 实验结果通过实验,成功搭建了一个按键显示电路,按下按键后,LED灯或数码管能够正确显示数字信号。
2. 结果分析(1)按键电路能够正常工作,实现电路通断。
(2)译码电路能够将按键输入转换为相应的数字信号。
(3)显示电路能够将数字信号转换为可视化的信息。
六、实验总结1. 通过本次实验,掌握了按键电路的基本原理和设计方法。
2. 提高了动手实践能力和电路分析能力。
3. 了解了按键电路在实际应用中的重要性。
综合实验一——按键控制流水灯实验(查询方式)

北京科技大学微型计算机原理实验报告学院:____自动化学院________________专业、年级:_自动化1101_ ______________ 姓名:__廖文骏_ ________________学号:_ 20111002124 ____________ 指导教师:___ _____王粉花____________2013年12 月综合实验一按键控制流水灯实验(查询方式)实验学时:2学时一、实验目的1.掌握ATmega16 I/O口操作相关寄存器2.掌握CodeVision AVR软件的使用3. 复习C语言,总结单片机C语言的特点二、实验内容1. 设计一个简单控制程序,功能是8个LED逐一循环发光0.5s,构成“流水灯”。
2. 用两个按键K1和K2控制流水灯(中断方式):(1)当按下K1时,流水灯从左向右流动;(2)当按下K2时,流水灯从右向左流动。
三、实验所用仪表及设备硬件:PC机一台、AVR_StudyV1.1实验板软件:CodeVision AVR集成开发软件、SLISP下载软件四、实验原理ATmega16芯片有PORTA、PORTB、PORTC、PORTD(简称PA、PB、PC、PD)4组8位,共32路通用I/O接口,分别对应于芯片上32根I/O引脚。
所有这些I/O口都是双(有的为3)功能复用的。
其中第一功能均作为数字通用I/O接口使用,而复用功能则分别用于中断、时钟/计数器、USRAT、I2C和SPI串行通信、模拟比较、捕捉等应用。
这些I/O口同外围电路的有机组合,构成各式各样的单片机嵌入式系统的前向、后向通道接口,人机交互接口和数据通信接口,形成和实现了千变万化的应用。
每组I/O口配备三个8位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x=A\B\C\D)。
I/O口的工作方式和表现特征由这3个I/O口寄存器控制。
AVR通用I/O端口的引脚配置情况:I/O口引脚配置表表中的PUD为寄存器SFIOR中的一位,它的作用相当AVR全部I/O口内部上拉电阻的总开关。
按键控制数码管实训报告

一、实训目的本次实训旨在通过实际操作,掌握按键控制数码管的基本原理和实现方法,熟悉数字电路设计流程,提高动手能力和工程实践能力。
通过本次实训,学生应能够:1. 理解按键控制数码管的工作原理;2. 熟悉FPGA开发环境及工具的使用;3. 掌握数码管驱动电路的设计方法;4. 能够编写简单的FPGA程序,实现按键控制数码管的功能;5. 提高团队合作能力和问题解决能力。
二、实训原理数码管是一种常用的显示器件,由多个发光二极管组成,通常用于显示数字和字符。
按键作为输入设备,通过电路连接到微控制器(如FPGA、单片机等)的输入引脚,实现用户与数码管的交互。
按键控制数码管的基本原理如下:1. 按键输入处理:微控制器不断扫描按键的状态,当检测到按键被按下时,根据按键的编号或功能执行相应的操作。
2. 指令转换:将按键的输入转换为数码管能够理解的显示指令。
这通常涉及将按键编号或功能映射到特定的数字或字符编码。
3. 数码管显示控制:微控制器根据转换后的显示指令,通过控制数码管的驱动电路来点亮或熄灭数码管中的不同段,从而显示出所需的数字或字符。
4. 循环扫描与更新:为了保持数码管显示内容的实时性,微控制器需要不断重复上述步骤,形成一个循环扫描和更新的过程。
三、实训内容本次实训主要内容包括:1. 硬件电路设计:设计数码管驱动电路,包括LED数码管、按键、电阻、电容等元件的选择和连接。
2. FPGA程序设计:编写FPGA程序,实现按键控制数码管的功能,包括按键输入处理、指令转换、数码管显示控制等。
3. 系统调试与测试:将硬件电路与FPGA程序连接,进行系统调试和测试,验证系统功能是否正常。
四、实训步骤1. 硬件电路设计:- 选择合适的LED数码管、按键、电阻、电容等元件;- 根据元件规格和电路要求,绘制电路原理图;- 使用面包板搭建电路,并进行测试。
2. FPGA程序设计:- 选择合适的FPGA开发环境(如Vivado、Quartus II等);- 创建FPGA工程,添加必要的IP核(如时钟源、按键输入、数码管驱动等);- 编写FPGA程序,实现按键控制数码管的功能;- 编译FPGA程序,生成比特流文件。
按键控制数码管

按键控制数码管1.实验目标拓展FPGA的应用,加强对FPGA设计原理的认识,提高Quartus II使用能力。
熟悉元件参数设置,学会仿真和下载到开发板调试,培养差错和排错的能力。
2.实验方案调出计数器IP核,配置参数:1,异步清零信号;2,使能控制信号;3,上计下计控制信号;4,四位输出结果。
其中异步清零信号接key0,时钟信号接key1,使能信号接SW0,上计下计信号接SW1。
4-8译码器连接计数四位输出和LED数码管,使计数器具有递增/递减计数和复位的功能,实现十六进制计数,并通过数码管显示。
3.实验步骤3-1.先新建工程,设置好相应的项目名,保存在英文路径之下,然后选择芯片cycloneII EP2C35F672C6。
3-2.新建顶层图,然后保存在新建工程的文件夹里,文件名应与项目名保持一致。
3-3.双击顶层图空白处,选择相应的元件添加,其中计数器IP核参数设置为输入端有异步清零信号;使能控制信号;上计下计控制信号;输出端有四位结果输出。
3-4.设置总线,使计数器的输出端接到译码器的4个输入端3-5.用线将元件引脚连接起来,完成原理图(图1)图13-6.运行分析综合,确认成功后保存。
3-7.选择Assignments--Pin Planner配置引脚。
根据开发板上的引脚对应的元件,在Location处作相应的设置。
3-8.当全部引脚设置好后,运行全编译,直至编译成功。
3-9.编译后将生成的sof文件下载到开发板中进行检测。
4.实验验证检测前数码管显示“0”,拨动使能端SW0,使计数器开始工作。
按下key1一次,数码管显示数字增加1。
拨动SW1选择递减计数模式,重复相同操作,数码管显示数字将减小1。
按下key0,计数器复位,数码管重新显示为“0”,证明电路功能已实现,实验成功。
5.实验心得通过这次试验,我学习了Quartus II软件的基本操作,基本学会设置元件及引脚、运行编译、仿真等操作,掌握了一些使用技巧。
按键控制数码管和流水灯设计报告实验报告

按键控制数码管和流水灯设计报告实验报告摘要单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们极大的重视和关注。
本设计选用msp430f249芯片作为控制芯片,来实现矩阵键盘对LED数码管显示的控制。
通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的检测识别。
用单片机的P3口连接4×4矩阵键盘,并以单片机的P3.0-P3.3口作键盘输入的列线,以单片机的P3.4-P3.7口作为键盘输入的行线,然后用P0.0-P0.7作输出线,通过上拉电阻在显示器上显示不同的字符“0-F”。
在硬件电路的基础上加上软件程序的控制来实现本设计。
其工作过程为:先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有键按下,则识别是哪一个键按下,最后通过LED数码管显示该按键所对应的序号。
关键字:单片机、流水灯、数码管、控制系统SCM since the nineteen seventies, with its high price, and a convenient compact attention and great concern. Thisdesign uses msp430f249 chip as the control chip, to realize the control of the LED digital tube display matrix keyboard. Through the internal control single chip to realize the hardware design of the circuit, so as to re alize the detection and recognition of 4*4 matrix keyboard. 4 * 4 matrix keyboard connected with the MCU P3 port, and the MCU P3.0 P3.3 port for a keyboard input, MCU P3.4P3.7 port as the lines of keyboard input, and then use theP0.0 P0.7 as the output line, by a pull-up resistor display different characters "0F on display". Control with software programs based on the hardware circuit to realize the design. The working process is: first to determine whether a key is pressed, if no key is pressed, it will continue to test the whole procedure, if a key is pressed, the Keywords: SCM, water lights, digital tubes, control system键盘控制流水灯和数码管实验报告目录一设计的目的 (2)二任务描述及方案设计 (3)1. 任务描述 (3)2. 方案设计 (3)三硬件设计方案 (3)1. Msp430f149单片机的功能说明 (3)2. 显示器功能 (4)3. 复位电路 (4)4. 按键的部分 (4)5. 74HC573的特点 (4)6. 流水灯和数码管电路原理图 (4)7. 元器件清单 (4)四程序设计方案 (5)1. 用IAR Embedded Workbench软件编程序 (5)2. 仿真电路图 (6)五实物实验 (7)1. 实物图 (7)2. 测试结果与分析 (7)六结论 (11)八参考文献 (16)一、设计目的1、进一步巩固和加深学生所学一门或几门相关专业课理论知识,培养学生设计、计算、绘画、计算机应用、文献查阅、报告撰写等基本技能;2、培养学生实践动手能力及独立分析和解决工程实践问题能力;3、培养学生的团队协作精神、创新意思、严肃认真的治学态度和严谨求实的工作作风。
按键控制数码管显示

按键控制数码管显示试验1:首先打开keil 4软件,如下图新建一个工程
2:输入工程名称后点保存
3:选择你用的单片机型号后点OK
4:我的是89C52所以如下选择后点OK
5:然后新建一个组
6:输入组名称,注意一定和工程名一致,且后缀名为asm
7:然后在将组加进来
8:如下选择刚保存的组然后点加入
9:然后设置频率12M
10:照图上挨个点上勾
11:debug为最后项,照图点上勾,然后OK
12然后编写程序,写好检查后点击运行
机等待烧录软件提示给单片机上电。
14:效果图:
总结:这次试验是按键控制数码管显示数字0~9的增减、以及流水灯的闪烁。
通过大家的努力实现。
感谢本组每位组员的努力。
本组成员【王思琪、熊飞、孔恩、李云彬、王鹏碧】。
矩阵式键盘控制数码管显示

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 。
实验2按键控制数码管

实验按键控制数码管班级:姓名:学号:一、实验目的1.掌握LPC2106管脚复用的概念。
2.了解LPC2106的I/O口的功能特点。
3.掌握对I/O口得基本编程操作。
二、实验设备1.硬件:计算机2.软件:ADS1.2、PROTEUS三、实验内容1.用PROTEUS仿真软件设计一个具有8个按键的数字键盘,当按键按下时,能通过七段数码管显示0,1,2,3,4,5,6,7几个数字,并具有消抖的功能。
四、实验步骤1.用PROTEUS仿真软件设计硬件电路。
2.为ADS1.2建立一个模板。
3.打开工程的user组,填充main函数。
4.编写程序配置I/O口相关寄存器。
5.调试、运行程序,观察运行结果。
五、实验结果1.Protues设计图2.仿真运行结果六、实验代码:#include "config.h"#define led0 0X3f#define led1 0x06#define led2 0x5b#define led3 0x4f#define led4 0x66#define led5 0x6d#define led6 0xfd#define led7 0x07#define key0 1<<20#define key1 1<<21#define key2 1<<22#define key3 1<<23#define key4 1<<24#define key5 1<<25#define key6 1<<26#define key7 1<<27uint32 i;#define led 0x0000007f int main(){PINSEL0=0x00000000; IODIR =0x0000007f; while(1){if((IOPIN&key0)==0) { IOSET |=led0;for(i=0;i<50000;i++); }if((IOPIN&key1)==0) {IOCLR |=led;IOSET |=led1;for(i=0;i<50000;i++); }if((IOPIN&key2)==0){IOCLR |=led;IOSET |=led2;for(i=0;i<50000;i++); }if((IOPIN&key3)==0) {IOCLR |=led;IOSET |=led3;for(i=0;i<50000;i++); }if((IOPIN&key4)==0) {IOCLR |=led;IOSET |=led4;for(i=0;i<50000;i++);}if((IOPIN&key5)==0) {IOCLR |=led;IOSET |=led5;for(i=0;i<50000;i++); }if((IOPIN&key6)==0) {IOCLR |=led;IOSET |=led6;for(i=0;i<50000;i++); }if((IOPIN&key7)==0) {IOCLR |=led;IOSET |=led7;for(i=0;i<50000;i++);}}return (0);}七、学习心得学习了ADS生成文件在仿真软件上仿真。
用按键控制输出信号的频率

电气设计自动化作业6-VHDL作业班级:11级电气一班姓名:马林学号:11003020371、实验要求:1.设计一个完整的时序逻辑电路(例如,完成用按键控制输出信号的频率,使LED按不同频率闪烁,同时在数码管上显示频率值。
),并用MAXPLUS进行仿真。
2.应包含VHDL源程序,详细的设计报告对程序,仿真结果,实验箱运行结果并进行详尽的分析。
2、实验过程源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY zuoye6 ISPORT(clk:IN STD_LOGIC;A:IN STD_LOGIC;B:IN STD_LOGIC;C:IN STD_LOGIC;D:OUT STD_LOGIC;E:OUT STD_LOGIC;F:OUT STD_LOGIC;CODE:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END zuoye6;ARCHITECTURE behave OF zuoye6 ISSIGNAL clk_DIV_1:STD_LOGIC;SIGNAL clk_DIV_2:STD_LOGIC;SIGNAL clk_DIV_3:STD_LOGIC;BEGINPROCESS(clk)V ARIABLE COUNT_0:INTEGER RANGE 0 TO 23;V ARIABLE COUNT_1:INTEGER RANGE 0 TO 7;V ARIABLE COUNT_2:INTEGER RANGE 0 TO 3;BEGINIF(clk'EVENT AND clk = '1')THENIF((COUNT_0=23) AND (COUNT_1 =7)AND(COUNT_2=3))THENCOUNT_0:=0;COUNT_1:=0;COUNT_2:=0;ELSE COUNT_0:=COUNT_0+1;COUNT_1:=COUNT_1+1;COUNT_2:=COUNT_2+1;IF( COUNT_0<11 AND A ='1')THENclk_DIV_1<= '1';ELSE clk_DIV_1 <= '0';END IF;IF(COUNT_1<4 AND B ='1')THENclk_DIV_2<= '1';ELSE clk_DIV_2 <= '0';END IF;IF(COUNT_2<1 AND C ='1')THENclk_DIV_3<= '1';ELSE clk_DIV_3 <= '0';END IF;IF(A='0'AND B='0'AND C ='0')THENCODE <= "0000000";ELSIF(A='0' AND B='0'AND C ='0')THENCODE <= "0000110";ELSIF(A='0'AND B='1'AND C ='0')THENCODE <= "1011011";ELSIF(A='0'AND B='0'AND C ='1')THENCODE <= "1001111";ELSIF(A='1'AND B='1'AND C ='1')THENCODE <= "0000000";END IF;END IF;END IF;END PROCESS;二、波形仿真三、延时分析。
按键控制1位LED数码管显示0-9

单片机课程设计姓名:陈素云班级:09电力方向2班学号:200920305340设计题目:按键控制1位LED数码管显示0-9设计要求:通过单片的I/O口与LED数码管所构成的单片机系统的软件编程,使学生掌握简单的单片机系统的设计,同时初步学全用汇编语言和C语言两种方式编程的基本方法。
学生必须采用单片机AT89C51为LED显示屏的控制为核心,分别置“1”或“0”,让某些段的LED 发光,其它的熄灭,然后达到显示不同的字符和图符号的目的. 学生根据前期设计的步骤按照设计报告内容的具体要求,选择前期设计的一个典型题目,写出详尽的课程设计报告,重点内容包括方案论证、完整的电路图、软件系统流程图及开发程序、组装调试内容和总结等。
目录第1节引言 (3)1.1 LED数码显示器概述 (3)1.2 设计任务 (5)1.3设计目的 (6)第2节 AT89C51单片机简介 (6)2.1 AT89C51单片机 (6)2.2 单片机管脚图 (7)2.3管脚说明 (7)2.4振荡器特性 (9)第3节设计主程序与硬件电路设计 (9)3.1设计的主程序 (10)3.2系统程序所需硬件 (10)3.2.1所需的硬件 (10)3.2.2所需硬件的结构图 (11)3.3 硬件电路总连接图 (12)第4节程序运行过程 (12)4.1分析步骤 (12)4.2 程序执行过程 (13)第5节程序运行结果 (13)总结参考文献第1节引言还记得我们小时候玩的“火柴棒游戏”吗,几根火柴棒组合起来,能拼成各种各样的图形,LED数码管显示器实际上也是这么一个东西。
在单片机系统中,常常用LED数码数码管显示器来显示各种数字或符号。
LED 数码显示器是单片机嵌入式系统中经常使用的显示器件。
一个“8”字型的显示模块用“a、b、c、d、e、f、g、h” 8 个发光二极管组合而成。
每个发光二极管称为一字段。
LED 数码显示器有共阳极和共阴极两种结构形式。
由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。
数码管及按键控制 CH452

数码管及按键控制芯片CH452 :
直插,24引脚,2线接口方式图1:CH452 引脚图
2 线接口方式引脚说明:
CH452芯片与单片机连线:
说明:
1.针对数码管
CH452对数码管采用动态扫描驱动。
字驱动,顺序为DIG0 至DIG7,8个数码管,当其中一个引脚吸入电流时,其它引脚则不吸入电流。
段驱动引脚SEG6~SEG0 分别对应数码管的段G~段A,段驱动引脚SEG7 对应数码管的小数点,字驱动引脚DIG7~DIG0分别连接8 个数码管的阴极;
8个8 位的数据寄存器,用于保存8 个字数据;
译码方式:BCD译码,。
BCD 译码方式是指对数据寄存器中字数据的位4~位0进行BCD译码,控制段驱动引脚SEG6~SEG0的输出;
问题:ADDR在pcb板上是悬空的。
对“位”选择的时候,二极管的接法,作用,控制一个3位一个1位
2 针对按键:
(1)扫描,芯片实行两次扫面,两次结果相同才确认
(2)DIG0-DIG7 列扫描; SEG7-SEG0 行扫描,此次用到SEG0 SEG1两行,9个按键
(3)按引脚,依次由DIG0-DIG7 输出高电平,输出时其他为低电平,SEG0-SEG7内置下拉电阻,没按键按下时,被下拉为低电平
芯片CH452引脚工作:
scl 、addr内置上拉电阻,默认高电平;
sda 双向数据,默认高电平;
int 默认高,当有按键按下时,产生低电平中断,单片机产生中断,读取按键代码;
scl 高电平,从PIC 输入数据,数码管显示
低电平,向PIC 输出数据,读按键值
(具体工作参考时序图)。
按键功能实验报告总结(3篇)

第1篇一、实验背景按键作为电子设备中常见的输入装置,其功能丰富,应用广泛。
本实验旨在通过设计和实现一系列按键功能,加深对按键工作原理的理解,并提高电子设计实践能力。
二、实验目的1. 掌握按键的基本原理和电路设计方法。
2. 熟悉按键在不同应用场景下的功能实现。
3. 培养电子设计实践能力,提高问题解决能力。
三、实验内容1. 实验器材:51单片机最小核心电路、按键、LED灯、电阻、电容、面包板等。
2. 实验内容:(1)单按键控制LED灯闪烁(2)按键控制LED灯点亮与熄灭(3)按键控制LED灯亮度调节(4)按键实现数字时钟调整(5)按键实现多功能计数器(6)按键实现密码输入与验证四、实验步骤1. 根据实验要求,设计电路图,并选择合适的元器件。
2. 使用面包板搭建实验电路,包括单片机、按键、LED灯、电阻、电容等。
3. 编写程序,实现按键功能。
4. 对程序进行调试,确保按键功能正常。
5. 实验完成后,撰写实验报告。
五、实验结果与分析1. 单按键控制LED灯闪烁实验结果:按下按键,LED灯闪烁;松开按键,LED灯停止闪烁。
分析:本实验通过单片机定时器实现LED灯的闪烁。
当按键按下时,定时器开始计时;当定时器达到设定时间后,LED灯点亮;定时器继续计时,当达到设定时间后,LED灯熄灭。
如此循环,实现LED灯的闪烁。
2. 按键控制LED灯点亮与熄灭实验结果:按下按键,LED灯点亮;再次按下按键,LED灯熄灭。
分析:本实验通过单片机的I/O口控制LED灯的点亮与熄灭。
当按键按下时,单片机将I/O口置为高电平,LED灯点亮;当按键再次按下时,单片机将I/O口置为低电平,LED灯熄灭。
3. 按键控制LED灯亮度调节实验结果:按下按键,LED灯亮度逐渐增加;松开按键,LED灯亮度保持不变。
分析:本实验通过单片机的PWM(脉宽调制)功能实现LED灯亮度的调节。
当按键按下时,单片机调整PWM占空比,使LED灯亮度逐渐增加;松开按键后,PWM占空比保持不变,LED灯亮度保持不变。
按键控制数码管和流水灯设计报告实验报告

按键控制数码管和流水灯设计报告实验报告实验名称:按键控制数码管和流水灯设计报告一、实验目的本实验旨在通过使用按键来控制数码管和流水灯的显示,加深对数码管和流水灯工作原理的理解,并掌握按键的基本输入输出原理。
二、实验器材1. Arduino开发板2.数码管模块3.面包板4.面包板连接线5.按键模块6.跳线三、实验原理数码管是一种将数字和一些常用符号通过数码电路显示在特定位置的显示器件,由多个LED组成,可显示0-9及一些小于9的字母和符号。
流水灯是一种LED灯的组合,通过不同的时序控制,实现灯光依次点亮或熄灭的效果。
本实验通过使用按键控制器将数码管和流水灯的状态控制与显示,按下不同的按键可以使数码管切换显示不同的数字,同时控制流水灯的点亮或熄灭。
四、实验步骤1. 将数码管模块连接到Arduino开发板的数字I/O口,连接方式可参考数码管模块的接口定义和Arduino开发板的编号。
2. 将按键模块连接到Arduino开发板的数字I/O口,连接方式可参考按键模块的接口定义和Arduino开发板的编号。
3. 按键模块和数码管模块都需要使用面包板连接线和跳线连接到Arduino开发板的相应引脚上。
4.根据按键的读取状态,通过编程控制数码管显示相应的数字,利用流水灯实现通过按键的控制点亮或熄灭。
五、实验结果经过编程和调试,实验中数码管能够正确显示按键输入的数字,同时根据按键输入状态控制流水灯的点亮或熄灭。
按不同的按键可以切换数码管的数字显示,实现了按键对数码管和流水灯的控制。
六、实验总结本实验通过按键来控制数码管和流水灯的显示,加深了对数码管和流水灯的工作原理的理解。
同时,掌握了按键的基本输入输出原理,并通过编程控制实现了按键对数码管和流水灯的控制。
本实验还有一些可以改进的地方,例如可以增加多个按键,实现更多的控制功能;还可以通过增加延时函数控制流水灯的点亮或熄灭速度。
通过不断改进和练习,可以提高对Arduino开发板的理解和掌握。
矩阵按键控制数码管显示

定时消抖 Case 0xee; P0口送0 段码 Case 0xed; P0口送1 段码 Case 0x77; …… P0口送F 段码
有键按下?
是
否
存储当前P2的状态1 Break P2=0X0F 结束 存储当前P2的状态2
返回(状态1|状态2)
返回0XFF
程序编写
//========================================== //函数名称: keyscan() //函数功能: 检测按键 //入口参数:无 //出口参数:cord_h|cord_1 //备注: //========================================== UINT8 keyscan(void) { INT8 cord_h=0; INT8 cord_1=0; P2=0xf0; if(P2!=0xf0) { delay_ms(10); if(P2!=0xf0) { cord_h=P2; P2=0x0f; cord_1=P2; return(cord_h|cord_1); } } return(0xff); }
在没有按键按下时,即DS2450 的输入量时0,当有丌 同的按键按下时,DS2450 的输入量丌同,微处理器就会 得到丌同的数字量,微处理器根据采集到的数字量可判断 按键情况。
单片机控制的“机电一体化产品”中按键的接口设计 科技咨询,李迚波
键盘扫描子程序一般包括以下内容:
1.判别有无键按下;
2.消除键盘机械抖动;
出线输出为全低电平,则列线中电平由高变低所在列为按
键所在列。
两步即可确定按键所在的行和列,从而识别出所按的键。
采用线反转法的矩阵式键盘
假设键3被按下。
第一步,P1.0~P1.3输出全为“0”,然后,读入 P1.4~P1.7线的状态,结果P1.4=0,而P1.5~P1.7均为 1,因此,第1行出现电平的变化,说明第1行有键按下; 第二步,让P1.4~P1.7输出全为“0”,然后,读入 P1.0~P1.3位,结果P1.0=0,而P1.1~P1.3均为1,因 此第4列出现电平的变化,说明第4列有键按下。
按键控制数码管增减

单片机两位数码显示器,并根据端口的接线情况编写相应的程序,使其具有以下功能:
1.单片机系统具有双向循环显示功能,两位数码管采用十进制,最大显示
值是99,最小显示值是00,
2.按下S1后,数码管的数值自动增1;(00—99)
3.按下S2后,数码管的数值自动减1;(99—00)
4.按下S3时,数码管停止递增或递减,并显示当时的数值;
5.数码管数值自动增、减时间间隔T 0.5S<T<1S。
评定内容:
1.组装好单片机部分
2.组装好数码管部分
3.组装好电源部分
4.单片机及数码管能够工作
5.按键S1工作正常
6.按键S2工作正常
7.按键S3工作正常
8.数码管数字在改变时没有闪烁。
按键控制实验报告

按键控制实验报告键控计数值显⽰⼀、实验⽬的(1)熟悉Nios II系统构建,并选择简单、合适的系统(2)学习按键中断的控制⽅法(3)⽤HDL⽂本输⼊⽅法建⽴顶层模块、flash编程(4)能够⾃⾏改写程序⼆、实验设备与器件Quartus II 软件、EP4CE115F29实验箱三、实验⽅案设计实验可实现的功能本实验要求实时显⽰计数器输出的0~7F计数值,显⽰终端为⼋位LED、七段数码管和LCD显⽰器。
由KEY1~KEY3三个按键选择显⽰器件。
长按KEY1键时,只在⼋位LED上进⾏显⽰;长按KEY2键时,只在LCD显⽰器上进⾏显⽰;长按KEY3键时,只在七段数码管上进⾏显⽰;⽆键按下时则不显⽰, 但计数功能保持;KEY0按下时清零。
硬件系统(HDL⽂本)//=================================================== ====// This code is generated by Terasic System Builder//=================================================== ====module Test_1(//////// CLOCK //////////CLOCK_50,//////// LED //////////LEDG,//////// KEY //////////KEY,CLR,////////COUNT////////////COUNT,//////// SEG7 //////////HEX0,HEX1,//////// LCD ////////// LCD_BLON,LCD_DATA,LCD_EN,LCD_ON,LCD_RS,LCD_RW,//////// SDRAM ////////// DRAM_ADDR, DRAM_BA,DRAM_CAS_N, DRAM_CKE, DRAM_CLK, DRAM_CS_N, DRAM_DQ,DRAM_DQM, DRAM_RAS_N, DRAM_WE_N,//////// Flash //////////FL_ADDR,FL_CE_N,FL_DQ,FL_OE_N,FL_RST_N,FL_RY,FL_WE_N,FL_WP_N,);//=================================================== ====// PARAMETER declarations//=================================================== ====//=================================================== ====// PORT declarations//=======================================================//////////// CLOCK //////////input CLOCK_50;//////////// LED //////////output [7:0] LEDG;//////////// KEY //////////input [2:0] KEY;input CLR;////////////COUNT/////////////input [7:0] COUNT//////////// SEG7 //////////output [6:0] HEX0;output [6:0] HEX1;//////////// LCD //////////output LCD_BLON; inout [7:0] LCD_DATA;output LCD_ON; output LCD_RS; output LCD_RW;//////////// SDRAM //////////output [12:0] DRAM_ADDR; output [1:0] DRAM_BA; output DRAM_CAS_N; output DRAM_CKE; output DRAM_CLK; output DRAM_CS_N; inout [31:0] DRAM_DQ; output [3:0] DRAM_DQM; output DRAM_RAS_N; output DRAM_WE_N;//////////// Flash //////////output [22:0] FL_ADDR;output FL_CE_N; inout [7:0] FL_DQ; output FL_OE_N;input FL_RY;output FL_WE_N;output FL_WP_N;//=================================================== ====// REG/WIRE declarations//=================================================== ====//////// 7-SEG ////////////////wire[2:0] norkey;wire[7:0] count_in;wire[7:0] data;//=================================================== ====// Structural coding//=======================================================wire reset_n;assign reset_n = 1'b1;kernel kernel_inst(// 1) global signals:.clk_50(CLOCK_50),.reset_n(reset_n),.sdram_clk(DRAM_CLK),.sys_clk(clk_sys), ///////////////////////// the_key.in_port_to_the_key(~KEY),//the_count.in_port_to_the_count(count_in[7:0]),// the_lcd.LCD_E_from_the_lcd(LCD_EN),.LCD_RS_from_the_lcd(LCD_RS),.LCD_RW_from_the_lcd(LCD_RW),.LCD_data_to_and_from_the_lcd(LCD_DA TA), // the_led.out_port_from_the_led(LEDG),// the_sdram.zs_addr_from_the_sdram(DRAM_ADDR),.zs_ba_from_the_sdram(DRAM_BA),.zs_cas_n_from_the_sdram(DRAM_CAS_N ), .zs_cke_from_the_sdram(DRAM_CKE),.zs_cs_n_from_the_sdram(DRAM_CS_N),.zs_dq_to_and_from_the_sdram(DRAM_D Q), .zs_dqm_from_the_sdram(DRAM_DQM),.zs_ras_n_from_the_sdram(DRAM_RAS_N ), .zs_we_n_from_the_sdram(DRAM_WE_N),// the_seg7.out_port_from_the_seg7(data),.out_port_from_the_en_seg(en),// the_tri_state_bridge_flash_avalon_slave.address_to_the_cfi_flash(FL_ADDR),.read_n_to_the_cfi_flash(FL_OE_N),.select_n_to_the_cfi_flash(FL_CE_N),.tri_state_bridge_data(FL_DQ),.write_n_to_the_cfi_flash(FL_WE_N),);clk_div clk_div(.clkin(clk_sys),.clk_1KHz(clk_1KHz),.clk_1Hz(clk_1Hz));mydecoder_7seg yima(.clk(clk_1KHz),.segmenth(HEX1),.segmentl(HEX0),.data(data),.en(en));// .lowdata(data[3:0])); counter couter(.clk(clk_1Hz),.clr(CLR),//anjian qingling.count(count_in[7:0]));// Flash Configassign FL_RST_N = reset_n;assign FL_WP_N = 1'b1;///////////////////////////////////////////// LCD configassign LCD_BLON = 0; // not supportedassign LCD_ON = 1'b1; // alwasy onendmodule系统框图实验程序#include"count.h" //关于LCD的相关定义,控制LCD 的输出格式#include#include#include"system.h"#include"altera_avalon_pio_regs.h"#include"alt_types.h"#include"sys/alt_irq.h"volatile int a=0;volatile char b;unsigned char count1,count2,count3;static void KeyDown_interrupts(void* context,alt_32 id) //中断函数{IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BASE,0);//响应中断后,将中断响应位复位;b=IORD_ALTERA_AVALON_PIO_DATA(KEY_BASE); //读取中断响应值switch(b){case 0x1: //七段数码管显⽰IOWR_ALTERA_AVALON_PIO_DATA(EN_SEG_BASE,1);//IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0x00);count1=IORD_ALTERA_AVALON_PIO_DATA(COUNT_BASE);IOWR_ALTERA_AVALON_PIO_DATA(SEG7_BASE,count1);break;case 0x2: //LCD显⽰count2=IORD_ALTERA_AVALON_PIO_DATA(COUNT_BASE); printf("%02x", count2);//直接⽤标准输出函数表⽰break;case 0x4://LED灯显⽰IOWR_ALTERA_AVALON_PIO_DATA(EN_SEG_BASE,0);count3=IORD_ALTERA_AVALON_PIO_DATA(COUNT_BASE);IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,count3);break;default: //⽆按键时,正常计数,但⽆显⽰break;}}void InitPIO(void)//中断初始化{IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_BASE,0x7);//开中断,允许后三位开中断IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BASE,0x0);//中断响应后复位,防⽌中断⼀直响应。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科实验报告
课程名称:智能仪器
实验项目:按键控制数码管显示实验地点:
专业班级:学号:
学生:
指导教师:吕青
2015年10月25日
实验一按键控制数码管显示
一、实验目的
二、实验要求
本实验要求设计四个按键,从而控制数码管的显示。
四个按键的具体功能为:第一个按键为复位功能、第二个按键为移位功能、第三个按键为加1功能、第四个按键为减1功能。
三、设计方案
本实验中,数码管采用Proteus部已经封装好的四位数码管显示器,该显示器输入端口由位信号和段信号组成。
该数码管部采用共阳极接法。
除此之外,位信号可由端口直接给,不需要增加端口的驱动能力。
段信号由P0口提供,位信号有P2口的低四位提供。
P0口接段信号时,需要加上拉电阻。
四、实验设计
1、整体电路图
整体电路图
2、单片机选型
单片机选型
本次实验选择的单片机为AT89C51型号,段信号由P0口提供,位信号有P2口的低四位
提供。
AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C51是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
3、时钟电路
系统的时钟电路如下图所示。
时钟电路
4、系统复位电路
电阻给电容充电,电容的电压缓慢上升直到VCC,没到VCC时芯片复位脚近似低电平,于是芯片复位,接近VCC时芯片复位脚近高电平,于是芯片停止复位,复位完成。
系统复位
5、按键电路
其与单片机的具体连接方式如下:
按键电路
当按键没有按下时,所有的输入端都是高电平,代表无键按下。
一旦有键按下,则输入端就会被拉低,这样,通过读入输入端的状态就可得知是否有键按下了。
6、数码管显示电路
数码管显示电路
五、实验调试
由于本次设计并没有进行实际硬件的制作,所以本次对硬件的调试过程仅仅局限于电路图的仿真调试。
调试的结果如下图所示。
通过上图,证明了原理图以及编程的正确性,实现了本次实验要求的全部功能。
六、程序清单
#include<reg52.h>
#include<math.h>
sbit KEY_fw=P1^0;
sbit KEY_CHANGE=P1^1;
sbit KEY_ADD=P1^2;
sbit KEY_DEC=P1^3; // 定义按键输入端口
#define DataPortduan P0 // 定义数据端口程序中遇到
#define DataPortwei P2
unsigned char cou;
int num;
unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
// 显示段码值0~9
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7}; // 对应相应的数码管点亮,即位码unsigned char TempData[4]; // 存储显示值的全局变量
void DelayUs2x(unsigned char t); //函数声明
void DelayMs(unsigned char t);
void Display(unsigned char FirstBit,unsigned char Num);
void change( unsigned char s) ;
void main (void)
num=0;
cou=0;
KEY_ADD=1;
KEY_DEC=1;
KEY_CHANGE=1; // 按键输入端口电平置高
while (1) // 主循环
{
if(!KEY_ADD) // 如果检测到低电平,说明按键按下{
if(!KEY_ADD) // 再次确认按键是否按下,没有按下则退出
{
while(!KEY_ADD)Display(0,4); // 如果确认按下按键等待按键释放,
// 没有释放则一直等待
{
if(num<9999)
num=num+pow(10.0,cou); // 按键时数字加
else
num=0;
}
}
}
if(!KEY_fw) // 如果检测到低电平,说明按键按下
{
DelayMs(10); // 延时去抖,一般10-20ms
if(!KEY_fw) // 再次确认按键是否按下,没有按下则退出{
while(!KEY_fw); // 如果确认按下按键等待按键释放,没有释放则一直等待{
num=0; // 复位
}
}
}
if(!KEY_DEC) // 如果检测到低电平,说明按键按下{
if(!KEY_DEC) // 再次确认按键是否按下,没有按下则退出
{
while(!KEY_DEC)Display(0,4); // 如果确认按下按键等待按键释放,
// 没有释放则一直等待
{
if(num>0)
num=num-pow(10.0,cou); // 按键时数字减
}
}
}
if(!KEY_CHANGE)
{
if(!KEY_CHANGE) // 再次确认按键是否按下,没有按下则退出{
while(!KEY_CHANGE)Display(0,4); // 如果确认按下按键等待按键释放,
// 没有释放则一直等待{
if(cou<3) // 移位操作
cou++;
else
cou=0;
}
}
}
TempData[0]=dofly_DuanMa[num/1000];
TempData[1]=dofly_DuanMa[(num%1000)/100];
TempData[2]=dofly_DuanMa[((num%1000)%100)/10];
TempData[3]=dofly_DuanMa[((num%1000)%100)%10];
Display(0,4);
// 主循环中添加其他需要一直工作的程序
}
}
void DelayUs2x(unsigned char t)
{
while(--t);
}
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
void Display(unsigned char FirstBit,unsigned char Num) {
unsigned char i;
for(i=0;i<Num;i++)
{
DataPortwei=dofly_WeiMa[i+FirstBit];
DataPortduan=TempData[i];
DelayMs(2);
}
}
七、实验收获。