单片机c语言版数码管动态显示实验报告

合集下载

单片机数码管实验报告

单片机数码管实验报告

单片机数码管实验报告单片机数码管实验报告引言:单片机作为一种重要的嵌入式系统,被广泛应用于各个领域。

在本次实验中,我们将探索单片机与数码管的结合,通过编程控制数码管的显示,实现不同的功能。

本文将详细介绍实验的背景、目的、方法和结果,并对实验过程中遇到的问题进行讨论和总结。

一、实验背景数码管是一种常见的输出设备,用于显示数字和字母等信息。

而单片机则是一种集成了微处理器、存储器和输入输出接口等功能的芯片,具有高度集成、灵活性强的特点。

将单片机与数码管结合起来,可以实现对数字的显示和控制,为实际应用提供了很大的便利。

二、实验目的本次实验的目的是通过编程控制单片机,实现对数码管的显示和控制。

具体包括以下几个方面:1. 学习单片机的基本原理和编程方法;2. 掌握数码管的工作原理和接口电路;3. 理解数码管的编码方式和显示原理;4. 实现基本的数码管显示功能,如显示数字、字母、符号等;5. 探索数码管的扩展应用,如时钟、计时器等。

三、实验方法1. 实验器材准备:本次实验所需的器材包括单片机开发板、数码管、连接线等。

2. 实验步骤:(1)搭建实验电路:将数码管与单片机开发板连接,并根据实验要求进行接线。

(2)编写程序:使用C语言编写程序,通过单片机的GPIO口控制数码管的显示。

(3)下载程序:将编写好的程序下载到单片机开发板上。

(4)实验验证:通过观察数码管的显示情况,验证程序的正确性。

四、实验结果经过实验验证,我们成功实现了对数码管的显示和控制。

通过编写不同的程序,我们可以实现以下几种功能:1. 显示数字:通过控制数码管的不同段点亮,可以显示0-9的数字。

2. 显示字母:通过控制数码管的不同段点亮,可以显示A-Z的字母。

3. 显示符号:通过控制数码管的不同段点亮,可以显示一些常见的符号,如"+"、"-"、"*"等。

4. 显示动画:通过快速切换数码管的显示内容,可以实现简单的动画效果,如闪烁、滚动等。

数码管动态显示实训报告

数码管动态显示实训报告

一、实训目的本次实训旨在通过实际操作,让学生掌握数码管动态显示的原理,了解数码管动态扫描显示电路的设计方法,提高学生使用Verilog HDL进行层次化设计电路的能力。

通过实训,学生能够理解并应用动态扫描显示数码管、数据选择器及其信号分配方法,同时熟悉使用可编程芯片(如FPGA/CPLD)控制多位动态扫描数码管的显示。

二、实训环境1. 实训设备:FPGA开发板、数码管、信号源、示波器等。

2. 软件工具:Quartus II、ModelSim等。

3. 实训教材:相关电子设计教材、Verilog HDL编程指南。

三、实训原理数码管动态显示技术是利用人眼的视觉暂留效应,通过快速切换显示不同的数码管,使观察者感觉多个数码管同时显示。

具体原理如下:1. 数码管结构:数码管由若干个LED段组成,通过点亮不同的段来显示数字或字符。

2. 共阳/共阴数码管:数码管分为共阳和共阴两种类型。

共阳数码管的阳极连接在一起,共阴数码管的阴极连接在一起。

3. 动态扫描:通过控制每个数码管的点亮和熄灭,实现多位数码管的动态显示。

4. 数据选择器:用于选择要显示的数字或字符对应的段编码。

四、实训过程1. 设计3位数码管动态扫描显示电路:- 使用Verilog HDL设计数码管显示模块,包括段编码生成、位选控制、时钟分频等。

- 设计数据选择器,用于选择要显示的数字或字符对应的段编码。

- 设计主控制器,用于控制动态扫描的时序。

2. 实现显示功能:- 将学号的后3位数字输入到数码管显示电路中。

- 使用可编程芯片(如FPGA/CPLD)实现电路的编译和下载。

3. 提高性实验:- 增加一个功能切换控制开关,实现数码管显示数字的自动循环移位。

- 设计其他显示功能,如显示不同的字符或图案。

4. 实验测试:- 使用示波器观察数码管显示电路的时序信号,确保电路正常工作。

- 使用Quartus II进行仿真测试,验证电路的功能。

五、实验结果与分析1. 3位数码管动态扫描显示电路:- 成功实现了学号后3位数字的动态显示。

数码管显示实训报告模板

数码管显示实训报告模板

1. 理解数码管的工作原理及显示方法。

2. 掌握单片机与数码管之间的接口连接方法。

3. 学会使用C语言编写单片机控制程序,实现数码管的动态显示。

4. 提高动手实践能力和分析问题、解决问题的能力。

二、实训器材1. 单片机开发板(如STC89C52RC、AT89C51等)2. 数码管(共阴极或共阳极)3. 电阻、电容等电子元件4. 连接线、面包板等5. 编译器(如Keil、IAR等)6. Proteus仿真软件三、实训原理数码管是一种用于显示数字和字符的半导体显示器件。

根据显示段数的不同,可分为七段数码管和十六段数码管。

本实训采用七段数码管,由七个发光二极管(LED)组成,分别代表数字0-9。

数码管的显示原理:通过控制数码管各个段对应的引脚的高低电平,使相应的LED点亮或熄灭,从而显示数字或字符。

四、实训内容1. 数码管识别与测试2. 单片机与数码管的连接3. 编写单片机控制程序4. 实现数码管的动态显示5. Proteus仿真与调试1. 数码管识别与测试(1)识别数码管的段码,共阴极数码管的段码为1,共阳极数码管的段码为0。

(2)测试数码管各段LED的正负极,确定段码。

2. 单片机与数码管的连接(1)将数码管的段引脚与单片机的I/O口相连。

(2)将数码管的共阴极或共阳极引脚与单片机的地或正电源相连。

3. 编写单片机控制程序(1)定义数码管段码,如共阴极数码管的段码为0x3F(01111111B)。

(2)编写延时函数,实现延时功能。

(3)编写显示函数,根据需要显示的数字,选择相应的段码。

(4)编写主函数,实现数码管的动态显示。

4. 实现数码管的动态显示(1)初始化数码管,设置段码和位选。

(2)循环遍历数码管,依次显示每个数字。

(3)根据需要调整显示速度。

5. Proteus仿真与调试(1)打开Proteus软件,新建一个项目,添加单片机和数码管。

(2)连接单片机与数码管的引脚。

(3)编写Proteus仿真程序,实现数码管的动态显示。

数码显示控制实验报告(3篇)

数码显示控制实验报告(3篇)

第1篇一、实验目的1. 熟悉数码显示模块的结构和工作原理;2. 掌握51单片机控制数码显示模块的方法;3. 学会使用移位寄存器实现数码显示的动态扫描;4. 提高单片机编程能力和实践操作能力。

二、实验原理数码显示模块是一种常见的显示器件,主要由7段LED组成,可以显示0-9的数字以及部分英文字符。

51单片机通过控制数码显示模块的段选和位选,实现数字的显示。

移位寄存器是一种常用的数字电路,具有数据串行输入、并行输出的特点。

在本实验中,使用移位寄存器74HC595实现数码显示的动态扫描。

三、实验仪器与材料1. 51单片机实验板;2. 数码显示模块;3. 移位寄存器74HC595;4. 电阻、电容等电子元件;5. 电路连接线;6. 编译软件Keil uVision;7. 仿真软件Proteus。

四、实验步骤1. 电路连接(1)将51单片机的P1口与数码显示模块的段选端相连;(2)将74HC595的串行输入端Q(引脚14)与单片机的P0口相连;(3)将74HC595的时钟端CLK(引脚11)与单片机的P3.0口相连;(4)将74HC595的锁存端LR(引脚12)与单片机的P3.1口相连;(5)将数码显示模块的位选端与74HC595的并行输出端相连。

2. 编写程序(1)初始化51单片机的P1口为输出模式,P3.0口为输出模式,P3.1口为输出模式;(2)编写数码显示模块的段码数据表;(3)编写74HC595的移位和锁存控制函数;(4)编写数码显示模块的动态扫描函数;(5)编写主函数,实现数码显示模块的循环显示。

3. 编译程序使用Keil uVision编译软件将编写的程序编译成hex文件。

4. 仿真实验使用Proteus仿真软件进行实验,观察数码显示模块的显示效果。

五、实验结果与分析1. 编译程序后,将hex文件下载到51单片机实验板上;2. 使用Proteus仿真软件进行实验,观察数码显示模块的显示效果;3. 通过实验验证,数码显示模块可以正常显示0-9的数字以及部分英文字符;4. 通过实验,掌握了51单片机控制数码显示模块的方法,学会了使用移位寄存器实现数码显示的动态扫描。

单片机动态显示实训报告

单片机动态显示实训报告

一、实训背景随着科技的不断发展,单片机在电子设备中的应用越来越广泛。

动态显示作为一种重要的显示方式,在嵌入式系统中具有广泛的应用前景。

本次实训旨在通过学习单片机动态显示技术,掌握其基本原理和实现方法,提高实际动手能力和创新意识。

二、实训目的1. 了解单片机动态显示的基本原理和实现方法。

2. 掌握单片机动态显示程序的设计与编写。

3. 提高单片机在实际应用中的编程能力和调试技巧。

4. 培养团队协作和创新能力。

三、实训内容1. 动态显示基本原理动态显示是指通过快速切换显示模块,使显示内容呈现出连续变化的效果。

在单片机动态显示中,通常采用扫描法来实现。

扫描法包括逐行扫描和逐列扫描两种方式。

2. 动态显示实现方法(1)硬件电路设计硬件电路主要包括单片机、显示模块、驱动电路等。

以LCD为例,硬件电路设计如下:①单片机:选用AT89C52单片机作为核心控制器。

②显示模块:选用LCD显示屏,如12864LCD。

③驱动电路:选用74HC595芯片作为LCD的行驱动器,选用74HC138芯片作为LCD的列驱动器。

(2)软件设计软件设计主要包括主程序和中断服务程序。

①主程序:主要负责初始化硬件资源,设置定时器中断,循环调用显示函数。

②中断服务程序:负责接收外部事件,如按键输入,控制显示内容。

3. 动态显示程序设计以逐行扫描方式为例,动态显示程序设计如下:(1)初始化初始化LCD显示模块,设置显示参数,如字体、背景色等。

(2)显示函数编写显示函数,实现字符、图形的显示。

显示函数主要包括以下步骤:①根据需要显示的内容,将数据存储在显示缓冲区中。

②逐行扫描显示缓冲区,实现动态显示。

(3)定时器中断设置定时器中断,实现显示刷新。

定时器中断函数负责调用显示函数,刷新显示内容。

四、实训结果与分析1. 实训结果通过本次实训,成功实现了单片机动态显示功能。

显示内容包括字符、图形等,动态效果良好。

2. 实训分析(1)动态显示原理掌握程度:通过本次实训,对动态显示原理有了深入理解,掌握了扫描法的实现方法。

单片机实验3 数码管控制实验-动态显示

单片机实验3  数码管控制实验-动态显示
/**********实验二数码管控制实验-动态显示**************/
;实验名称:数码管动态显示
;功能:4位数码管循环显示“0123”“4567”“89AB”“CDEF”,间隔0.5S。
;编写人:陈建泽
;编写时间:2010年11月2日
/**********************程序代码************************/
D1MS: MOV R2,#250 ;250*(1+1+2)=1000us=1ms
L1:NOP
NOP
DJNZ R2,L1
RET
/*****************中断服务子程序*****************/
T0_INT:MOV TH0,#(65536-50000)/256
MOV TL0,#(65536-50000)MOD 256
MOV A,R4
CJNE A,#16,L3
AJMP MAIN
L3:MOV R5,A
AJMP L1
DIS:MOV P2,R6;用A作为中间寄存器,因后面要循环显示
MOV A,R5
ACALL SQR ;查表
MOV P0,A
ACALL D1MS ;1ms
INC R5
MOV A,R6
RL A;指向下一位
MOV R6,A
RET;子程序返回
TAB: DB 0C0H,0F9H,0A4H,0B0H ;共阳极字型码表0、1、2、3
DB 99H, 92H, 82H, 0F8H;共阳极字型码表4、5、6、7
DB 80H, 90H, 88H, 83H;共阳极字型码表8、9、A、B
DB 0C6H,0A1H,86H, 8EH;共阳极字型码表C、D、E、F

51单片机数码管显示实验报告

51单片机数码管显示实验报告

51单片机数码管显示实验实验内容:1)编写程序让8只数码管初始显示0,每隔大约1s加1显示(可以用延时函数实现),到数码管显示9后,再从0开始显示,如此循环反复。

2)C语言程序#include<reg52.h>#define uint unsigned intvoid display();void num();int i;unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F编码表void delayms(uint);void main(){while(1){num();display();}}void display(){P2=0xff;//消隐P0连接段选,P1节位选P1=0x00;//8个数码管同时显示P2=table[i];//数码管显示数码0 delayms(1000);//延时5ms}void num(){if(i<9)i++;elsei=0;}void delayms(uint x){uint i,j;for(i=0;i<x;i++)for(j=0;j<110;j++);}3)汇编语言:ORG 0000HLJMP MAINORG 0100H;P2连接段选,P1节位选MAIN: MOV P1,#00H ;所有的数码管都显示MOV R2,#00H ;从0开始显示LOOP: MOV A,R2 ;为下面的基址加变址寄存器寻址方式做准备MOV DPTR,#TAB1 ;把数组的首地址赋给DPTRMOVC A,@A+DPTR ;取数组中的数字MOV P2,A ;把取得的值送给P0口显示ACALL DELAY ;延时一会INC R2 ;为取下一个数加一CJNE R2,#10,LOOP ;只要数小于10就继续循环显示MOV R2,#00H ;如果加到10后重新从0开始LJMP LOOP ;进入循环函数;****************************************** TAB1: DB 0C0H,0F9H,0A4H,0B0H,99H; 数组DB 92H,82H,0F8H,80H,90HRET;****************************************** DELAY: MOV R3,#3 ;延时函数DE1: MOV R4,#0FFHDE2: MOV R5,#0FFHDJNZ R5,$DJNZ R4,DE2DJNZ R3,DE1RET;*************************************************END(3)编写程序学习数码管的动态显示,让8只数码管从从左往右显示1、2、3……8。

单片机数码管显示实验报告

单片机数码管显示实验报告

单片机数码管显示实验报告篇一:单片机应用实验报告 2键盘、LED 数码管显示实验西华大学实验报告(理工类)开课学院及实验室:机械工程与自动化学院计算机机房实验时间 : 2014年 5月20 日一、实验目的二、实验内容三、实验电路四、实验程序#includereg52.hsbit key0=P2 ;sbit key1=P2 ;sbit key2=P2 ;sbit red=P1 ;sbit yell=P1 ;sbit gre=P1 ;sbit LED1=P2 ;sbit LED2=P2 ;int num=0;unsigned char code dispcode[]={0x30,0xfc,0xa2,0xa4,0x6c,0x25,0x21,0xbc,0x20,0x24};void init(){key0=1;key1=1;key2=1;}void delayms(int a) { int b=0;for(a;a0;a--)for(b=110;b0;b--); }int judge(){if(key0==0){delayms(100);if(key0==0){red=0;yell=1;gre=1;num++;if(num==10)num=0;}}if(key1==0) {delayms(5);if(key1==0) {red=1;yell=0;gre=1;}}if(key2==0) {delayms(5);if(key2==0) {red=1;yell=1;gre=0;}}return 0;}void xianshi(){delayms(5);P0=dispcode[num];LED1=0;LED2=1;delayms(5);}int main(){init();while(1){judge();xianshi();}return 0;}五、实验步骤六、附录篇二:单片机实验两位数码管显示报告一、实验目的1、在之前单键实验和中断控制数码管“静态”显示实验的基础上,把单键判断、数码管显示和中断结合起来编写中断程序实现单键控制一位数码管;2、在实现控制一位数码管显示的基础上用单键控(转载于: 池锝网:单片机数码管显示实验报告)制两位数码管显示。

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

数码管动态显示实验
一、实验要求
1.在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路
2.在电路中增加四个7段数码管(共阳/共阴自选),将P1口作数据输出口与7段数码
管数据引脚相连,P2.0~P2.3引脚输出选控制信号
3.在Keil软件中编写程序,采用动态显示法,实现数码管显示变量unsigned int
show_value的值(show_value的值范围为0000~9999),即把show_value的千百
十个位的值用数码管显示出来。

二、实验目的
1.巩固Proteus软件和Keil软件的使用方法
2.学习端口输入输出的高级应用
3.掌握7段数码管的连接方式和动态显示法
4.掌握查表程序和延时等子程序的设计
三.实验说明
(条理清晰,含程序的一些功能分析计算)
如下图(五)所示,由P1口将要显示的数字输给七段数码管;再由P2第四位输给数码管的公共端,作为扫描输入信号;用外部中断P3.2和P3.3分别接PB1与PB2,实现数字的增减。

所要实现的功能是,开始运行电路功能图时,四个数码管分别显示0000,按下PB1增1,直到9999回到0000,相反按下PB2减1,直到0000回到9999。

在算相关数据时,由于要显示个十百千的不同数字,要调用disp函数,
disp[0]=show/1000; //显示千位的值 disp[1]=show%1000/100; //显示百位的值
disp[2]=show%100/10; //显示十位的值 disp[3]=show%10; //显示个位的值
本实验需要用到IE寄存器与TCON寄存器。

四、硬件原理图及程序设计
(一)硬件原理图设计
图(五)
开始运行proteus,四个数码管显示0000,按下PB1数码管增1,按下PB2数码管减1。

(二)程序流程图设计
三)程序设源代码
#include<reg51.h> //定义8051寄存器头文件
#define SEG7P P1 // 定义数码管输入信号接P1 #define SCANP P2 //定义数码管扫描信号接P2 char code TAB[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, //数字0~4 0x92, 0x83, 0xf8, 0x80, 0x98 };//数字5~~9 char disp[4]={0,0,0,0}; //显示数组
void delay_ms(int x); //声明延迟函数char scan[4]={0xfe,0xfd,0xfb,0xf7}; //声明输入扫描信号char i,j; //声明变量
void display(); //显示数组diso的内容int show=0000; //定义初始值
void get_disp(); //声明返回diap main() //主程序开始
{
IE=0X85; //开IE寄存器,允许INT0和INT1中断
TCON=0X05; //开INT0,INT1
while(1) //无穷循环
{
get_disp();
display();
}
}
void delay_ms(int x) //声明延迟函数
{ int i,j; //定义变量
for (i=0;i<x;i++) //开始计数,计数x次
for (j=0;j<120;j++); //计数120次,延迟1ms }
void display() //声明显示函数
{
for(i=0;i<4;i++) //开始计数,计数4次{ j=disp[3-i]; //diap的值附到变量j SCANP=scan[i]; //显示扫描信号
SEG7P=TAB[j]; //显示数字到数码管
delay_ms(4); //延迟4ms
}
}
void INT0_ISR(void) interrupt 0 //INT0中断子程序开始 {
if(show<9999) //如果显示数值小于9999
show++; //显示数值自增1
else show=0; //否则显示数值0
}
void_INT1_ISR(void) interrupt 2 //INT1中断子程序开始
{
if(show>0) //如果显示数值大于0
show--; //显示数值自减1
else show=9999; //否则显示数值9999
}
void get_disp ()
{
disp[0]=show/1000; //显示千位的值disp[1]=show%1000/100; //显示百位的值
disp[2]=show%100/10; //显示十位的值
disp[3]=show%10; //显示个位的值
}
五.实验总结
实验过程中遇到的问题及解决方法、体会
问题1:运行电路原理图时,数码管都不亮。

解决方法:定义IE寄存器时,没有开启总开关EA,导致数码管不能正常显示数字。

问题2:按下PB1或PB2,数码管乱码。

解决方法:因为使用了两个外部中断,所以INT0和INT1都要开启,在声明INT0和INT1时,起初写成if(show<9999);show--;if(show>0);show++;而应该是if(show<9999);show++;if(show>0);show--;最电路原理图能正常显示0000~9999。

体会:科学的魅力太强大了,从之前的一个数码管亮0~9,现在只要你想要几个数码管亮就可以接几个,写入正确的程序,就能实现你想要的效果。

程序一直在增多,实现的功能也在无穷的变换着,越来越觉得单片机实现的功能,在生活中也随处可见。

相关文档
最新文档