单片机串口通讯 数码管显示

合集下载

单片机数码管显示实验总结

单片机数码管显示实验总结

单片机数码管显示实验总结单片机数码管显示实验总结一、实验目的本次实验旨在通过单片机控制数码管显示,掌握数码管的工作原理、编程控制方法以及单片机与数码管的接口技术。

通过实验,提高自己的动手能力和编程技能,为今后的学习和实际工作打下坚实的基础。

二、实验原理数码管是一种常用的电子显示器件,它由多个LED组成,通过控制各个LED的亮灭来显示不同的数字或字符。

本次实验采用的是共阴极数码管,它由8个LED组成,通过单片机控制每个LED的亮灭状态来显示不同的数字或字符。

三、实验步骤1.硬件准备(1)选择合适的单片机开发板,如Arduino、STM32等。

(2)购买数码管及相应的驱动电路。

(3)准备杜邦线、电阻、电容等电子元件。

2.硬件连接(1)将数码管与单片机开发板连接起来。

(2)根据数码管驱动电路的要求,连接电源、地线和控制信号线。

(3)连接电源后,打开开发板电源,观察数码管的显示效果。

3.编程控制(1)在开发板上编写程序,控制数码管显示不同的数字或字符。

(2)使用相应的编译器将程序编译成可执行文件,上传到开发板上。

(3)观察数码管的显示效果,调试程序,使其达到预期效果。

4.测试与评估(1)在不同情况下测试数码管的显示效果,如按键输入、传感器数据等。

(2)对程序进行优化和改进,提高程序的效率和稳定性。

(3)总结实验过程中的问题和解决方法,为今后的学习和实际工作提供参考。

四、实验结果及分析1.实验结果在实验过程中,我们成功地实现了对数码管的编程控制,使其能够根据不同的输入显示不同的数字或字符。

同时,我们也发现了一些问题,如数码管的亮度不够、显示的数字不清晰等。

经过调试和改进,我们解决了这些问题,使数码管的显示效果更加理想。

2.结果分析通过本次实验,我们深入了解了数码管的工作原理和编程控制方法,掌握了单片机与数码管的接口技术。

同时,我们也发现了一些问题,如数码管的亮度不够、显示的数字不清晰等。

这些问题的出现可能与硬件连接、编程控制等方面有关。

单片机数码管显示实验

单片机数码管显示实验

实验一数码管实验一、实验目的1. 了解数码管的显示原理;2. 掌握JXARM9-2440 中数码管显示编程方法二、实验仪器JXARM9-2440教学实验箱、ADT1000仿真器和ADT IDE集成开发环境、串口连接线、PC机。

三、实验原理7段LED由7个发光二极管按“日”字形排列,所有发光二极管的阳极连在一起称共阳极接法,阴极连在一起称为共阴极接法。

LED显示器的接口一般有静态显示与动态显示接口两种方式。

本实验中采用的是动态显示接口,其中数码管扫描控制地址为0x20007000,位0-位5每位分别对应一个数码管,将其中某位清0 来选择相应的数码管,地址0x20006000 为数码管的数据寄存器。

数码管采用共阳方式,向该地址写一个数据就可以控制LED 的显示,数据中的1对应的不亮,0对应的亮,数码管各位从高到低排列为dp-g-f-e-d-c-b-a,例如当数据寄存器是11111111时则不亮,当是01111111时则显示8,其原理图如图所示。

四、实验内容1、编程实现:六个数码管同时正向显示0-F ,然后反向显示F-0。

2、编程实现:在六个数码管上依次显示与自己姓名有关的内容,可分辨出轮流显示。

3、编程实现:在六个数码管上依次显示与自己姓名有关的内容,分辨不出轮流显示。

4*、编程实现:在每个数码管上递增显示0—9 。

5*、自行开发。

五、实验程序1,/****************************************************************************//*文件名称:LEDSEG7.C */ /*实验现象:数码管依次显示出0、1,2、……9、a、b、C、d、E、F */ /****************************************************************************/#define U8 unsigned charunsigned char seg7table[16] = {/* 0 1 2 3 4 5 6 7*/0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,/* 8 9 A B C D E F*/0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,};void Delay(int time);/****************************************************************************//* 函数说明: JXARM9-2410 7段构共阳数码管测试*/ /* 功能描述: 依次在7段数码管上显示0123456789ABCDEF */ /* 返回代码: 无*/ /* 参数说明: 无*/ /****************************************************************************/void T est_Seg7(void) {int i;*((U8*)0x20007000)=0x00; /*6个数码管都亮*/for(;;){/*数码管从0到F依次将字符显示出来*/ for(i=0;i<0x10;i++){*((U8*)0x20006000)=seg7table[i];Delay(10000);}/*数码管从F到0依次将字符显示出来*/ for(i=0x0f;i>0x00;i--){*((U8*)0x20006000)=seg7table[i];Delay(10000);}}// TODO}/****************************************************************************//* Function name : 循环延时子程序*/ /* Description : 循环'time' 次*//* Return type :void *//* Argument : 循环延时计数器*/ /****************************************************************************/void Delay(int time) {int i;int delayLoopCount=10000;for(;time>0;time--);for(i=0;i<delayLoopCount;i++);}2,/****************************************************************************//*文件名称:LEDSEG7.C */ /*实验现象:数码管依次显示ZHAngg,并能看出轮流显示*//****************************************************************************/#define U8 unsigned charunsigned char seg7table[16] = {/* Z H A n g g 6 7*/0xa4, 0x89, 0x88, 0xc8, 0x90, 0x90, 0x82, 0xf8,/* 8 9 A B C D E F*/0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,/* H I N*/0x89, 0xcf, 0x48};void Delay(int time);/****************************************************************************//* 函数说明: JXARM9-2410 7段构共阳数码管测试*/ /* 功能描述: 在六个数码管上分别显示字母,与姓名有关*/ /* 返回代码: 无*/ /* 参数说明: 无*/ /****************************************************************************/void T est_Seg7(void) {int i;*((U8*)0x20007000)=0x00;for(;;){*((U8*)0x20007000)=0x1f;*((U8*)0x20006000)=seg7table[0];Delay(10000);*((U8*)0x20007000)=0x2f;*((U8*)0x20006000)=seg7table[1];Delay(10000);*((U8*)0x20007000)=0x37;*((U8*)0x20006000)=seg7table[2];Delay(10000);*((U8*)0x20007000)=0x3b;*((U8*)0x20006000)=seg7table[3];Delay(10000);*((U8*)0x20007000)=0x3d;*((U8*)0x20006000)=seg7table[4];Delay(10000);*((U8*)0x20007000)=0x3e;*((U8*)0x20006000)=seg7table[5];Delay(10000);}// TODO}/***************************************************************************//* Function name : 循环延时子程序*/ /* Description : 循环'time' 次*//* Return type :void */ /* Argument : 循环延时计数器*/ /****************************************************************************/void Delay(int time) {int i;int delayLoopCount=10000;for(;time>0;time--);for(i=0;i<delayLoopCount;i++);}3,/****************************************************************************//*文件名称:LEDSEG7.C */ /*实验现象:数码管依次显示出ZHAngg,并看不出轮流显示*//****************************************************************************/#define U8 unsigned charunsigned char seg7table[16] = {/* Z H A n g g 6 7*/0xa4, 0x89, 0x88, 0xc8, 0x90, 0x90, 0x82, 0xf8,/* 8 9 A B C D E F*/0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,/* H I N*/0x89, 0xcf, 0x48};void Delay(int time);/****************************************************************************//* 函数说明: JXARM9-2410 7段构共阳数码管测试*/ /* 功能描述: 在六个数码管上分别显示字母,与姓名有关*//* 返回代码: 无*/ /* 参数说明: 无*/ /****************************************************************************/void T est_Seg7(void) {int i;*((U8*)0x20007000)=0x00;for(;;){*((U8*)0x20007000)=0x1f;*((U8*)0x20006000)=seg7table[0];Delay(10000);*((U8*)0x20007000)=0x2f;*((U8*)0x20006000)=seg7table[1];Delay(10000);*((U8*)0x20007000)=0x37;*((U8*)0x20006000)=seg7table[2];Delay(10000);*((U8*)0x20007000)=0x3b;*((U8*)0x20006000)=seg7table[3];Delay(10000);*((U8*)0x20007000)=0x3d;*((U8*)0x20006000)=seg7table[4];Delay(10000);*((U8*)0x20007000)=0x3e;*((U8*)0x20006000)=seg7table[5];Delay(1);}// TODO}/***************************************************************************//* Function name : 循环延时子程序*/ /* Description : 循环'time' 次*//* Return type :void */ /* Argument : 循环延时计数器*/ /****************************************************************************/void Delay(int time) {int i;int delayLoopCount=10000;for(;time>0;time--);for(i=0;i<delayLoopCount;i++);}4,/****************************************************************************//*文件名称:LEDSEG7.C */ /*实验现象:数码管依次显示出0、1,2、……9、a、b、C、d、E、F */ /****************************************************************************/#define U8 unsigned charunsigned char seg7table[16] = {/* 0 1 2 3 4 5 6 7*/0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,/* 8 9 A B C D E F*/0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, };void Delay(int time);/****************************************************************************//* 函数说明: JXARM9-2410 7段构共阳数码管测试*/ /* 功能描述: 依次在7段数码管各自递增显示0—9 *//* 返回代码: 无*/ /* 参数说明: 无*/ /****************************************************************************/void T est_Seg7(void) {int i;for(;;){for(i=0;i<=0x09;i++){*((U8*)0x20007000)=0x1f;*((U8*)0x20006000)=seg7table[i];Delay(10000);}for(i=0;i<=0x09;i++){*((U8*)0x20007000)=0x2f;*((U8*)0x20006000)=seg7table[i];Delay(10000);}for(i=0;i<=0x09;i++){*((U8*)0x20007000)=0x37;*((U8*)0x20006000)=seg7table[i];Delay(10000);}for(i=0;i<=0x09;i++){*((U8*)0x20007000)=0x3b;*((U8*)0x20006000)=seg7table[i];Delay(10000);}for(i=0;i<=0x09;i++){*((U8*)0x20007000)=0x3d;*((U8*)0x20006000)=seg7table[i];Delay(10000);}}// TODO}/****************************************************************************//* Function name : 循环延时子程序*//* Description : 循环'time' 次*//* Return type :void *//* Argument : 循环延时计数器*/ /****************************************************************************/void Delay(int time) {int i;int delayLoopCount=10000;for(;time>0;time--);for(i=0;i<delayLoopCount;i++);}六、实验结果与分析实验一结果:六个数码管同时显示相同的符号,从0-F再由F-0之间的循环变换。

单片机控制数码管动态扫描显示原理

单片机控制数码管动态扫描显示原理

P02 P03 P04 P05 P06
11 P01
P00
7 4 2 110
3
a b c d e f g dp
DPY
a
a
a
a
f g bf g bf g bf g b
e
ce
ce
ce
c
d
d
d
d
dp
dp
dp
dp
DPY 4 -LED
P20 P21 6 C0 P22 8 C2 P23 9 C3
12 C4
LED
U1
一、工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的 工作方式,低四位用于T0,高四位用于T1。其格式 如下:
GATE:门控位。GATE=0时,只要用软件使TCON中的 TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时, 要用软件使TR0或TR1为1,同时外部中断引脚INT0/1也为 高电平时,才能启动定时/计数器工作。即此时定时器的启 动条件,加上了INT0/1引脚为高电平这一条件。
VCC GND RXD TXD ALE/ P PSEN
40 20 10 11 30 29
P 14 P 15 P 16 P 17
8 K9 C K13
9 K10 D K14
A K11 E K15
B F
动态显示
动态显示的特点是将所有位数码管的段选线并联在 一起,由位选线控制是哪一位数码管有效。这样一来, 就没有必要每一位数码管配一个锁存器,从而大大地简 化了硬件电路。选亮数码管采用动态扫描显示。所谓动 态扫描显示即轮流向各位数码管送出字形码和相应的位 选,利用发光管的余辉和人眼视觉暂留作用,使人的感 觉好像各位数码管同时都在显示。动态显示的亮度比静 态显示要差一些,所以在选择限流电阻时应略小于静态 显示电路中的。

单片机数码管静态显示实验

单片机数码管静态显示实验

实验五串行口静态显示一.实验目的1.学习用单片机的串行口扩展74LS164 实现静态显示方法。

2.学习用单片机I/O 口模拟串口工作实现静态显示的编程方法。

3.掌握静态显示的编程方法和数码管显示技术。

二.实验任务1.根据共阳数码管的功能结构,自编一组0~F 的笔形码,并按顺序存放建立程序数据表格。

2.利用单片机串行口扩展74LS164,完成串--并转换输出,实现静态显示:要求循环显示0~F这数字,即输出数字“0”时,四位同时显示0,显示1 秒后再输出数字“1”,即四位同时显示1,依次类推,相当于数字自检循环显示。

3.利用单片机串行口(RXD、TXD)编写静态显示程序,在数码显示器上30H、31H 单元的内容,30H、31H 单元为任意的十六进制数。

4.用P1.6、P1.7 分别替代RXD、TXD 做模拟串口完成任务3 的静态显示程序。

三.实验电路静态显示实验电路连线方法:静态显示只要连接2 根线:单片机的RXD 与DAT 节点连接,TXD 与CLK 接点连接,要把电源短路片插上。

PW11 是电源端。

四.实验原理说明1.静态显示实际上动态的过程,静态的显示,单片机串行口输出的数据通过74LS164 串并转换输出,每输出一个数据,把原先的的数据推挤到下一个显示位上显示。

实验时,单片机串行口应工作在方式0,RXD(P3.0)输出串行数据,TXD(P3.1)输出移位时钟,在移位时钟的作用下,串行口发送缓冲器的数据一位一位地从RXD 移入到74LS164 中,并把后面送入的数据推挤原先的数据到下一个级联的74LS164 中输出,每输出一个数据可以延时1ms。

实验时,通过改变延时时间,可以更清楚地观察到数据推挤的过程。

2.串行口工作在方式0 时,串行传输数据为8 位,只能从RXD 端输入输出。

TXD 端用于输出移位同步时钟信号,其波特率固定为振荡频率的1/12,由软件置位串行控制寄存器SCON 的REN位才能启动串行接收。

单片机实验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

单片机8位数码管动态显示数据

单片机8位数码管动态显示数据
i++;j++;
if(8==i) //检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位
i=0;
if(j==500) //检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化
{
j=0;
num++;
if(num==9)
num=0;
}
}
}
/*------------------------------------------------
}
单片机8位数码管动态显示数据单片机数码管动态显示单片机数码管显示程序单片机数码管显示0到9单片机数码管显示单片机数码管静态显示单片机数码管显示原理单片机数码管显示电路单片机数码管移位显示单片机数码管显示时间
单片机8位数码管动态显示数据
编写:szjcdz
日期:2010.9
内容:8位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值
unsigned int j;
while(1)
{
DataPort=WeiMa[i]; //取位码
LATCH2=1; //位锁存
LATCH2=0;
DataPort=DuanMa[num+i]; //取显示数据,段码
LATCH1=1; //段锁存
LATCH1=0;
Delay(200); //扫描间隙延时,时间太长会闪烁,太短会造成重影
延时函数,含有输入参数unsigned int t,无返回值
unsigned int是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/

单片机串口以16进制发送0-65535间的数-单片机收到后在数码管上显示

单片机串口以16进制发送0-65535间的数-单片机收到后在数码管上显示

// 以 16进制发送一个 0-65535(两字节)数据之间的任一数,当单片机收到后在数码管上动态显示出来,波特率自定。

// 选择单片机串口方式 1 时,有效数据位只有 8 位(二进制) 65535 转化为二进制需要 16 位(且 16 位全为 1),换为十六进制也就是 4 位。

串口助手一次发送都是二位十六进制数发送的。

由于这些原因,我们需要分两次传送数据。

先传 16 进制的前两位,再传后两位。

#include<reg52.h>#define uchar unsigned char#define uint unsigned intuint a1,a2,num;uchar num1,flag;sbit dula=P2A6; // 申明 U1 锁存器的锁存端sbit wela=P2A7; // 申明 U2 锁存器的锁存端uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};void delay(uint xms)uint i,j;for(j=110;j>0;j--); }void display(uint value) // 显示子函数{uchar wan,qian,bai,shi,ge; //定义万千百十个位wan=value/10000;qian=value%10000/1000;bai=value%1000/100;shi=value%100/10;ge=value%10;dula=1;P0=table[wan];dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(2);dula=1;P0=table[qian];dula=0; for(i=xms;i>0;i --)//i=xms 即延时约 xms 毫秒P0=0xff;wela=1;P0=0xfd; wela=0; delay(2);dula=1;P0=table[bai]; dula=0;P0=0xff;wela=1;P0=0xfb; wela=0; delay(2);dula=1;P0=table[shi]; dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(2);dula=1;P0=table[ge];dula=0;P0=0xff;wela=1;P0=0xef;wela=0;delay(2);}void init() // 初始化函数{TMOD=0x20; // 设置定时器 1 工作方式TH1=0xfd;TL1=0xfd;TR1=1;SM0=0;SM1=1;REN=1;EA=1;ES=1;void main(){init();while(1){display(num);}}void ser() interrupt 4{// 串口中断函数{num1++; // 设置循环变量 num1if(num1==1) //num1=1, 也就是传送数据的前两位{a1=SBUF; // 将第一次传送的数据给 a1RI=0; //置RI为0以便接收下一个数据}if(num1==2) r //num1=2, 也就是传送数据的后两位{a2=SBUF; // 将第二次传送的数据给 a2位空出,通过或运算将a2储存在num的最低位//置RI为0以便接收下一个数据nu m1=0;实验:例如,下面通过串口助手单片机发送16进制数B09B(也就是十进制数的45211)给单片机,通过数码管显示出来。

单片机数码管显示实验总结(范本)

单片机数码管显示实验总结(范本)

单片机数码管显示实验‎总结单片机数码管显‎示实验总结‎篇一:‎单片机c语‎言版数码管动态显示实‎验报告数码管动态显‎示实验一、实‎验要求1. ‎在Prteus软件中‎画好51单片机最小核‎心电路,包括复位电路‎和晶振电路‎2. 在电路中增加四‎个7段数码管(共阳/‎共阴自选),将P1口‎作数据输出口与7段数‎码管数据引脚相连‎,P2.0~P‎2.3引脚输出‎选控制信号‎3. 在Keil软件‎中编写程序,采用动态‎显示法,实现数码管显‎示变量unsigne‎d int sh_v‎a lue的值(sh_‎v alue的值范围为‎0000~9999)‎,即把sh_valu‎e的千百十个位的值用‎数码管显示出来。

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

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

‎在算相关数据时,由‎于要显示个十百千的不‎同数字,要调用dis‎p函数,disp[‎0]=sh/1000‎; //显示千位的值‎disp[1]=s‎h%1000/100‎; //显示百位的值‎disp[2]=s‎h%100/10; ‎//显示十位的值 d‎i sp[3]=sh%‎10; //显示个位‎的值本实验需要用到‎I E寄存器与TCN寄‎存器。

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

单片机数码管动态显示1234-9999

单片机数码管动态显示1234-9999

一、实验目的1.掌握Keil软件的基本使用2.学习和掌握C语言编写程序的一般格式3.了解数码管与单片机的接口方法;4.了解数码管性能及动态显示编程方法;5.了解并掌握单片机系统中定时器中断控制的基本方法;二、实验内容用定时器中断实现四位数码管动态显示从1234-9999。

三、实验原理3.1基础知识介绍A.数码管是LED的升级,每位数码管里面继承了8个LED,点亮数码管就是点亮数码管里面的LED。

要在数码管上面显示相应的值,就是点亮不同位置的LED。

数码管有共阴和共阳两种,共阴数码管公共端是所有LED的负极连接在一起,相反共阳数码管公共端是所有LED的正极连接在一起。

一般公共端称作“位选”,控制每一个LED的称为“段选”。

数码管主要是利用视觉暂留的效果,通过快速循环点亮数码管方式,将数据呈现出来。

数码管如图1.2所示1.2数码管1.3数码管实物图/B.定时器定时器也可看作是对计算机机器周期的计数器。

因为每个机器周期包含12个振荡周期,故每一个机器周期定时器加1,可以把输入的时钟脉冲看成机器周期信号。

故其频率为晶振频率的1/12。

如果晶振频率为12MHz,则定时器每接收一个输入脉冲的时间刚好为1μs。

定时器有两种工作模式,分别为计数模式和定时模式。

对Px,y 的输入脉冲进行计数为计数模式。

定时模式,则是对MCU的主时钟经过12分频后计数。

因为主时钟是相对稳定的,所以可以通过计数值推算出计数所经过的时间。

计数器的计数值存放于特殊功能寄存器中。

T0(TL0-0x8A, TH0-0x8C), T1(TL1-0x8B, TH1-0x8D)定时器工作原理如下图由上图可见与定时器相关的寄存器主要有下面这几个:TMOD、TCON、TL0、TH0、TL1、TH1。

下面介绍一下这几个寄存器16位加法计数器:是定时计数器的核心,其中TL0、TH0、是定时计数器0的底八位和高八位;TL1、TH1是定时计数器1的底八位和高八位;并且高八位和底八位可单独使用。

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

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

单片机数码管动态显示实验报告单片机数码管动态显示实验程序(汇编)单片机数码管动态显示实验程序org 00hajmp headorg 0030hhead:mov sp,#0070hnum equ p0 ;p0口连接数码管reset:mov dptr ,#tabmov r0,#4sh:acall show_tabcall dptr_adddjnz r0,shmov r0 ,#4sjmp resetdptr_add:inc dptrinc dptrinc dptrinc dptrrettab :db0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH;;;;;;;;;;;;;;;;;;;;; 函数的功能是用来动态显示dptr上的四个数据 ;;;;;;;;;;;;;;;;;;;;;; show_tab:clr amov r2,#0mov r3,#148mov p2,#238loop:movc a,@a+dptrmov num ,aacall delay_5msinc r2mov a,r2;调用片选函数前注意A的变化acall select_movcjne r2,#4,loopmov r2,#0clr adjnz R3,loopret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;select_mov:;p2的初值238push 0e0hmov a,p2rl amov p2,apop 0e0hretdelay_5ms:mov r6,#5signed_5ms:call delay_1msdjnz r6,signed_5msret篇二:单片机动态数码显示设计实验报告微机原理与接口技术实验报告实验题目:指导老师:班级:计算机科学与技术系姓名:动态数码显示设计2014年 12月3日实验十三动态数码显示设计一、实验目的1.掌握动态数码显示技术的设计方法。

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

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

单片机实验报告,数码管显示实验目的1、掌握数码管动态扫描显示的原理和编程实现方法;2、掌握软件延时程序的使用。

实验任务利用数码管动态显示,设计一个两位秒表,计时0-59,时间到了显示“FF”,使用软件延时实现。

实验原理数码管动态显示的连接方式是将所有数码管的段码a、b、c、d、e、f、g、dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。

所谓动态扫描显示,即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

具体过程是:当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以只要将需要显示的数码管的位选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示过程中每位数码管的点亮时间为2ms左右,由于人的视觉暂留现象及发光极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

实现延时通常有两种方法:一种是硬件延时,这需要用到单片机的定— 1 —时器,这种方法可以提高CPU的工作效率,也能做到精确控制时间,此方法将在实验四中再学习;另一种方法是软件延时,这种方法主要采用循环体进行。

可以采用for循环以及for循环嵌套的方式达到粗略的长时间延时,利用Keil软件可以调试和观察for语句的延时时间。

实验结果:总结:本次实验我很好的复习了有关C语言的相关语句知识点,合理的运用到了单片机的程序编码中去,但实验过程中,也出现了很多问题。

比如在运行过程中,数码管会乱码,检查后发现是扫描信号端口错误,将扫描信号端口顺序调换,重新运行则解决了乱码问题。

共阴数码管电路0到15的显示参数代码表要记清楚。

串行接口数码管显示电路

串行接口数码管显示电路

1.MCS51芯片的串行输入/输出口1.1 串行输入/输出口概述计算机与它的外围设备之间的基本通信模式有两种:并行通信模式和串行通信模式。

采用并行通信模式时,例如通过并行输入/输出口P1控制交通灯,所有数据位同时通过并行输入/输出口进行传送。

并行通信模式的优点是数据传送速度快,所有的数据位同时传输;缺点是电路复杂,一个并行的数据有多少位,就需要多少条传输线。

采用串行通信模式时,所有的数据位按一定的顺序、通过一条传输线逐个地进行传送。

串行通信模式的优点是电路简单,仅需要一条传输线;缺点是数据传送速度慢。

串行通信模式又可以再分为两种模式:同步通信模式和异步通信模式。

AT89S51单片机提供同步通信模式和异步通信模式两种串行通信模式。

异步通信模式工作在UART(Universal Asynchronous Receiver and Transmitter),可以同时进行数据的发送和接收。

AT89S51单片机串行通信的接收部分具有缓冲能力,即已经接收到的第一个字节在被读取之前就可以开始接收第二个字节。

但是应当注意,如果第二个字节完成接收,而第一个字节仍没有被读取,一个字节的数据将被丢失。

串行输入/输出具有独立的发送和接收缓冲寄存器,它们共同被称作为串行数据缓冲寄存器(SBUF),并占用特殊功能寄存器的同一个地址(99H)。

发送缓冲寄存器只能写入不能读出,接收缓冲寄存器只能读出不能写入,因此它们的区分可以通过指令来实现。

串行输入/输出的数据使用管脚RXD(管脚10)和管脚TXD(管脚11)可以同时接收和发送数据。

管脚RXD和管脚TXD也就是管脚P3.0和管脚P3.1,这里它们被按P3口的第二功能来使用。

1.2 串行输入/输出口的工作方式AT89S51串行口的工作可以被分为4种工作方式。

这4种工作方式的简述如下:■工作方式0串行口工作方式0为同步移位寄存器方式。

在这种方式下,串行数据的发送和接收都是通过管脚RXD进行,管脚TXD用来传送同步移位脉冲。

单片机串口以16进制发送0-65535间的数-单片机收到后在数码管上显示

单片机串口以16进制发送0-65535间的数-单片机收到后在数码管上显示

// 以 16进制发送一个 0-65535(两字节)数据之间的任一数,当单片机收到后在数码管上动态显示出来,波特率自定。

// 选择单片机串口方式 1 时,有效数据位只有 8 位(二进制) 65535 转化为二进制需要 16 位(且 16 位全为 1),换为十六进制也就是 4 位。

串口助手一次发送都是二位十六进制数发送的。

由于这些原因,我们需要分两次传送数据。

先传 16 进制的前两位,再传后两位。

#include<reg52.h>#define uchar unsigned char#define uint unsigned intuint a1,a2,num;uchar num1,flag;sbit dula=P2A6; // 申明 U1 锁存器的锁存端sbit wela=P2A7; // 申明 U2 锁存器的锁存端uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};void delay(uint xms)uint i,j;for(j=110;j>0;j--); }void display(uint value) // 显示子函数{uchar wan,qian,bai,shi,ge; //定义万千百十个位wan=value/10000;qian=value%10000/1000;bai=value%1000/100;shi=value%100/10;ge=value%10;dula=1;P0=table[wan];dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(2);dula=1;P0=table[qian];dula=0; for(i=xms;i>0;i --)//i=xms 即延时约 xms 毫秒P0=0xff;wela=1;P0=0xfd; wela=0; delay(2);dula=1;P0=table[bai]; dula=0;P0=0xff;wela=1;P0=0xfb; wela=0; delay(2);dula=1;P0=table[shi]; dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(2);dula=1;P0=table[ge];dula=0;P0=0xff;wela=1;P0=0xef;wela=0;delay(2);}void init() // 初始化函数{TMOD=0x20; // 设置定时器 1 工作方式TH1=0xfd;TL1=0xfd;TR1=1;SM0=0;SM1=1;REN=1;EA=1;ES=1;void main(){init();while(1){display(num);}}void ser() interrupt 4{// 串口中断函数{num1++; // 设置循环变量 num1if(num1==1) //num1=1, 也就是传送数据的前两位{a1=SBUF; // 将第一次传送的数据给 a1RI=0; //置RI为0以便接收下一个数据}if(num1==2) r //num1=2, 也就是传送数据的后两位{a2=SBUF; // 将第二次传送的数据给 a2位空出,通过或运算将a2储存在num的最低位//置RI为0以便接收下一个数据nu m1=0;实验:例如,下面通过串口助手单片机发送16进制数B09B(也就是十进制数的45211)给单片机,通过数码管显示出来。

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

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

单片机实验报告二-数码管显示实验摘要:本实验使用单片机控制数码管的显示,在实验过程中通过学习单片机的GPIO口的编程,调试程序、调节电路来达到正确的显示效果。

最终按照要求实现了单片机控制数码管的计数器。

关键词:单片机、数码管、GPIO口、计数器一、实验介绍数码管是一种介于机械仪表和液晶显示器之间的电子显示器件,广泛应用于计时器、计数器、仪表等电子产品中。

本实验旨在通过单片机控制数码管的显示来加深对GPIO口的使用和调试程序的理解,同时了解数码管的原理。

本实验主要分为两部分:数码管显示基础实验和数码管控制开关实验。

通过这两部分的实验可以了解数码管的工作原理和单片机的基本控制方式。

二、实验原理2.1 数码管的基本原理数码管显示器将数字显示为一组符号,例如“0”到“9”。

表示不同数字的符号被编码成一个数字码。

七段数码管用一个七段数码字母来表示数字,如下表所示:| 数字 | a | b | c | d | e | f | g || ---- | - | - | - | - | - | - | - || 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 || 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 || 2 | 1 | 1 | 0 | 1 | 1 | 0 | 1 || 3 | 1 | 1 | 1 | 1 | 0 | 0 | 1 || 4 | 0 | 1 | 1 | 0 | 0 | 1 | 1 || 5 | 1 | 0 | 1 | 1 | 0 | 1 | 1 || 6 | 0 | 0 | 1 | 1 | 1 | 1 | 1 || 7 | 1 | 1 | 1 | 0 | 0 | 0 | 0 || 8 | 1 | 1 | 1 | 1 | 1 | 1 | 1 || 9 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |通过控制数码管的七个LED灯的亮灭,可以实现不同符号显示。

简述单片机控制数码管动态显示的工作原理

简述单片机控制数码管动态显示的工作原理

简述单片机控制数码管动态显示的工作原理一、概述数码管动态显示是一种常见的技术,它通过单片机控制多个数码管以实现同时显示多路数据。

这种技术广泛应用于各种电子设备中,如数字仪表、电子时钟、智能仪表等。

单片机作为一种低功耗、低成本、高集成度的芯片,成为了实现数码管动态显示的核心器件。

二、工作原理1.硬件连接数码管动态显示通常需要连接多个数码管和单片机。

每个数码管需要一个行驱动器,用于控制数码管的亮灭。

单片机通过串行接口与行驱动器相连,以控制多个数码管的显示。

同时,单片机还需要连接一个时钟电路,以实现定时刷新数码管的数据。

在实际应用中,行驱动器通常采用共阳极接法,而单片机则采用串行数据传输方式与行驱动器进行通信。

此外,为了实现数码管的动态显示,通常还需要连接多个限流电阻和限位电阻等元器件。

2.显示方式数码管动态显示主要有静态显示和动态显示两种方式。

静态显示是指每个数码管轮流显示,实现多路数据的依次显示,但由于需要为每个数码管分配单独的接口,因此适用于数据量较小的场景。

而动态显示则是通过控制数码管的行驱动器轮流导通,实现多个数码管的依次显示,从而适用于数据量较大的场景。

行驱动器通常采用轮流导通的方式控制多个数码管,以达到同时显示多路数据的目的。

3.控制方式单片机通过串行接口向行驱动器发送控制信号,包括数据信号和时钟信号。

数据信号用于传输要显示的数据,时钟信号则用于定时刷新数据。

此外,单片机还可以通过中断控制方式,根据需要实时更新显示内容。

在实际应用中,为了提高刷新速度和显示效果,通常需要优化单片机的处理速度和行驱动器的驱动能力。

此外,单片机还可以通过PWM(脉宽调制)控制行驱动器的电流大小,以实现更好的亮度调节和动态效果。

4.刷新速度数码管动态显示的刷新速度取决于单片机的处理速度和行驱动器的驱动能力。

为了获得更好的显示效果和更长的使用寿命,通常需要较高的刷新速度和适当的行驱动器驱动电流。

此外,可以通过优化软件算法和代码来实现更高的刷新速度和更好的显示效果。

单片机实训报告键盘和数码管显示(WORD档)

单片机实训报告键盘和数码管显示(WORD档)

单片机实训报告(一)班级:测控 9 0 1学号:姓名实验名称:键盘和数码管显示实验目的:熟悉掌握ZLG7289的功能和特性,ZLG7289芯片各引脚名称及功能和ZLG7289与微控制器的接口,ZLG7289的SPI接口和控制指令。

同时进一步熟悉掌握keil软件的操作和编程。

实验原理:ZLG7289是一款数码显示驱动和键盘扫描管理的芯片。

主要有如下的特性:1.直接驱动8位共阴式数码管或64只独立的LED;2.管理多达64只按键,自动消除抖动;3.段电流可达15mA以上,位电流可达100mA;4.具有左移、右移、闪烁、消隐、段点亮等多种功能;5.与微控制器之间采用三线SPI总线接口,占用I/O资源少。

电路主要由芯片ZLG7289、8位共阴极数码管、64键的键盘矩阵以及单片机构成。

ZLG7289的控制电路图:电路的工作原理:当ZLG7289接收到单片机发出的指令(包括纯指令)后,经过读取、分析和处理,将会在数码管上显示相对应的操作指令。

当ZLG7289检测到有效的按键时,KEY脚将从高电平变为低电平,并一直保持到按键结束。

在此期间,如果ZLG7289接收到“读键盘数据指令”,则输出当前按键的键盘代码。

ZLG7289芯片各引脚名称及功能:引脚名称说明1、2 RTCC、Vcc 接电源3、5 NC 悬空4 Vss 接地6 /CS 片选输入端,低电平时,可向其发指令或读键盘。

ZLG7289使用SPI串行总线与微控制器接口。

SPI接口SPI串行总线是Motorola公司推出的一种同步串行接口。

通常它需要四条线,就可与微控制器之间实现全双工的同步串行通讯。

SPI串行总线主要有如下的特性:1.采用主从模式(Master Slave)架构,支持多Slave模式,一般只支持单Master,Master 控制时钟。

2.采用四线,实现全双工通信。

图1 SPI接口连线示意图SPI的数据传输时序模式SPI接口定义了四种数据传输的时序模式。

串口通信任意数字显示

串口通信任意数字显示
{ቤተ መጻሕፍቲ ባይዱ
STR[numb]=temp-0x30;
numb++;
flag=0;
}
EA=1;
}
void display(uchar m)//显示接收数字函数
{
uchar i;
for(i=0;i<m;i++)
{
P2 = 0x00;
P1 = WULA[i];
P2 = SEG[STR[i]];
delay(1);
}
}
void display(uchar m);//显示函数,,显示由串口输入的值
void judge(void);//判断函数,判断数据是否传送完成
uchar STR[8];//用于存放接收的数据
uchar SEG[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段选
uchar WULA[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};//位选
uchar numb,flag,blag;//全局变量
void initial()
{
TMOD=0x20;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
EA=1;
ES=1;
TR1=1;
while(1)
{
judge();
if(flag)
{
display(blag);
}
}
}
void judge(void)//判断数据是否接收函数
{
uchar play;
play=numb;
delay(10);

51单片机 PC机 通信 数码管 0-9

51单片机 PC机 通信 数码管 0-9
{
unsigned chari=100;
while(i--);
}
void init()//定时器及串口的初始化
{
SCON=0x40; //串口模式1,
TMOD=0x20; //T1工作模式2(8为自动重装)。通信用已成固定模式
PCON=0x00; //波特率不倍增
TH1=0xfd;//设置计数初值(波特率为9600b/s)
init();//初始化定时器和串口
while(1)
{if(K1==0) //判按键是否按下fasong(); //如果按键按下向乙机发送灯亮的状态
xianshi();//数码管显示接收的数字
}
}
}
voidxianshi()//数码管显示从已机接收的数字
{
SMG_q=0;//选择千位数码管
P0=table[num];//显示接收的数字
delay();//加入短暂延时
P0=0XFF;//清除数码管显示,因是共阳型,所以不是0
SMG_q=1;//关闭千位数码管
}
void main()//主程序
{
TL1=0xfd;
TR1=1;//启动定时器
IE=0x90; //开串口中断和总中断
}
voidfasong()//发送
{
while(K1==0);//按键恢复时执行下面的(等待按键释放)
SBUF=++num;
if(num>9)
num=0;
while(TI==0);//甲机发送采用查询的方式
TI=0;//清除中断
signed char num=-1;//数字的初始值
sbitSMG_q= P1^0;//定义数码管阳级控制脚(千位)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
dat = SBUF; //接收数据SBUF赋与dat
RI=0; //RI 清零。
SBUF = dat; //在原样把数据发送回去(接收数据为发送数据的ASCII码,如发送q显示为113)
}
display(dat) ;
}
}
unsigned char code seg[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7};//{0,1,2,3,4,5,6,7};//分别对应相应的数码管点亮,即位码
sbit w,shi,ge;
/********************延时子函数******************/
P2=seg[1];
delay(3); //短暂延时
wela=1;
P0=dofly[ge] ;
P2=seg[2];
delay(3); //短暂延时
}
/*******串口初始化 波特率9600 方式一*********/
void Init_Com(void)
{
TMOD = 0x20;//定时 自动重装 8为
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
/********主程序********************/
void main()
{
Init_Com();//串口初始化
while(1)
{
if(RI) //RI=1时申请中断,要求CPU取走数据。在任何工作方式中,该位必须由软件清0
void delay(unsigned int xms) //xms表示延时的秒数
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=113;j>0;j--);
}
/*********************显示函数******************/
void display(dat)
{
bai=dat/100;
shi=(dat%100)/10;
ge=dat%10;
wela=1;
P0=dofly[bai];
P2=seg[0];
delay(3); //短暂延时
wela=1;
P0=dofly[shi];
#include <reg52.h> //包函8052 内部资源的定义
#define uchar unsigned char
#define uint unsigned int
unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xff,0xef};// 显示段码值01234567
相关文档
最新文档