单片机控制数码管显示1

合集下载

3.2 单片机控制LED数码管的显示

3.2 单片机控制LED数码管的显示

5.3.2 LED数码管的静态显示与动态显示
2. 动态显示方式
图5-9 4位LED数码管动态显示示意图
5.3.2 LED数码管的静态显示与动态显示
2. 动态显示方式
各位数码管轮流点亮的时间间隔(扫描间隔)应根据实 际情况定。发光二极管从导通到发光有一定的延时,如果点 亮时间太短,发光太弱,人眼无法看清;时间太长,产生闪 烁现象,且此时间越长,占用单片机时间也越多。另外,显 示位数增多,也将占用单片机大量时间,因此动态显示实质 是以执行程序时间来换取I/O端口减少。下面是动态显示实 例。
void main(void)
ห้องสมุดไป่ตู้
{
P0=0xa4;
//将数字"2"的段码送P0口
P1=0xf8;
//将数字"7"的段码送P1口
while(1)
//无限循环
;
}
5.3.2 LED数码管的静态显示与动态显示
2. 动态显示方式
显示位数较多时,静态显示所占的I/O口多,这时常 采用动态显示。为节省I/O口,通常将所有显示器段码 线相应段并联在一起,由一个8位I/O口控制,各显示位 公共端分别由另一单独I/O口线控制。
// 如段码为0x01,表明一个循环显示已结束 } }
5.3.1 LED数码管显示原理
void delayms(uint j) { uchar i; for(;j>0;j--)
{ i=250; while(--i); i=249; while(--i);
} }
// 延时函数
5.3.1 LED数码管显示原理
图5-10 8只数码管分别滚动显示单个数字1~8
5.3.2 LED数码管的静态显示与动态显示

一位数码管的动态数字显示(实验报告)

一位数码管的动态数字显示(实验报告)

实验名称一位数码管显示变化数字一、实验目的1.通过AT89C52单片机控制数码管显示数字0到9。

2.用Protues设计、仿真以AT89C52为核心的数码管变化数字显示电路。

3.理解led七位数码管的显示控制原理。

二、实验任务让一位数码管能够从0不断显示到9。

三、实验设备微机1台、Proteus软件1套、GL10型51单片机学习开发板1台。

四、实验电路绘制五、汇编语言程序设计1.设计原理该led数码管为8段显示,每一段对应一个发光二极管,根据查询发现GL10给力者单片机是共阴数码管,当某个发光二极管的阳极为高电平时,发光二极管点亮相应的段被显示。

2.程序框图3.汇编程序$NOMOD51$INCLUDE (8051.MCU)ORG 0000HAJMP MAINORG 0030HMAIN:MOV R4, #00H ;记录码表的值MOV DPTR, #TABLE ;把地址送DPTRSTRAT:MOV A, R4MOVC A, @A+DPTR ;取码MOV P2, A ;显示INC R4 ;自增,取下个值做准备CALL DELAY ;调用CJNE R4, #16, STRAT ;判断是否显示完16个数值AJMP MAINDELAY: MOV R6, #1DELAY4:MOV R1, #10DELAY3:MOV R2, #100DEALY1:MOV R3, #250DEALY2:NOPNOPDJNZ R3,DEALY2DJNZ R2, DEALY1DJNZ R1, DELAY3DJNZ R6, DELAY4RET;码表TABLE:DB<span style="white-space:pre"></span>0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6FEND六、Proteus软件模拟仿真七、GL10单片机仿真系统1.实验板连线2.实验操作步骤先用杜邦线连接一位数码管模块和89c51芯片的p2口,然后用usb连接线将整个单片机与电脑相连,打开烧录软件,选中数码管动态显示变化数字的hex 文件,点击下载,按下单片机的电源开关,程序将烧录到单片机中,数码管就会从0显示到9,并循环。

解析单片机控制数码管的动态显示

解析单片机控制数码管的动态显示

Science &Technology Vision 科技视界0引言在高职单片机教学中,“显示”这一部分占了很重要的位置,“显示”部分主要学习数码管的静态显示和动态显示,其中动态显示的应用更为广泛。

本文就教学过程中动态显示的原理及一些注意事项进行了分析。

1动态显示的原理动态显示原理图如图1所示,用AT89C51单片机的P0口控制数码管的段选,用P20和P21控制2位数码管的位选,7407起端口驱动作用。

在这种电路中,单片机分时的对各数码管进行扫描输出,只要扫描速度足够快,利用人的“视觉占留”特性,我们就会发现各数码管好像都在“同时”显示。

其实,在这个过程中我们有三点需要把握:第一,分时扫描,也就是说任意时刻只有一个数码管被选通;第二,人的“视觉暂留”特性,(光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,视觉的这一现象则被称为“视觉暂留”),两位数码管实质是在轮流显示,但由于视觉暂留特性,给人感觉像是在同时显示;第三,循环刷新,我们只有不断的做到不停的位选和送断码,数码管才能维持显示同一字符。

2实验按照动态显示原理,如图1所示,做这样一个实验,让数码管显示字符“10”,很多学生这样编写程序:#include<reg51.h>Unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};//共阴数码管的字符码sbit p20=P2^0;sbit p21=P2^1;unsigned char wcnt,timecnt,second;void delay(unsigned char t)//延时函数{unsigned char i;while(t--){for(i=0;i<=110;i++);}}void main(){while(1){p20=0;//开第1位数码管位选p21=1;//关第2位数码管位选P0=table[1];//送字符码delay(10);p20=1;p21=0;P0=table[0];delay(10);}}通过protues 仿真,本希望看到的2位数码管的显示为如图1所示。

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

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

一、实验目的1、在之前单键实验和中断控制数码管“静态”显示实验的基础上,把单键判断、数码管显示和中断结合起来编写中断程序实现单键控制一位数码管;2、在实现控制一位数码管显示的基础上用单键控制两位数码管显示。

二、实验所需器材与软件硬件:电脑、传输线、AT89S52单片机软件:编程软件Keil uVision3;读写软件MePro V5.02三、实验程序的及其分析:1、单键控制一位数码管显示主要设计思路:在中断主程序后加入单键判断键按下情况判断语句,把数码管显示程序放在中断子程序中。

当有键按下且有中断请求时,重新给数码管显示偏移地址赋值,从而改变显示内容。

程序:ORG 0000HAJMP MAIN ;转向主程序ORG 001BH ;中断矢量地址AJMP T_INT ;转向中断服务程序MAIN: ;主程序标号MOV R3,#0 ;表偏移地址MOV DPTR,#TAB ;把表头地址赋值给寄存器DPTRMOV TMOD,#10H ;设定定时器工作于模式1MOV TH1,#0FEH ;定时器赋初值MOV TL1,#0EHSETB ET1 ;开中断SETB EASETB TR1 ;启动定时器LOOP1:JNB P1.4, LOOP4AJMP LOOP1LOOP4:ACALL DELAYJNB P1.4, LOOP_ADD 单键按下判断程序LOOP_ADD:INC R3CJNE R3,#10,LOOP8MOV R3,#0LOOP8: AJMP LOOP1T_INT: MOV TH1,#0FEHMOV TL1,#0EHMOV A,R3 中断程序内嵌的数码管显示程序MOVC A,@A+DPTRMOV P0,AMOV P2,#11111110BRETITAB:DB 0C0H,0F9H,0A4H,0B0H ,99H,92H,82H,0F8H ;表内容DB 80H,90HDELAY:MOV R5,#64HLOOP5:MOV R7,#0FFHLOOP6:NOPNOP 用于单键按下防抖动的延时程序DJNZ R7,LOOP6DJNZ R5,LOOP5RET2、单键控制两位数码管显示设计思路:用两个寄存器分别存放数码管显示的个位和十位,并且在数码管显示程序中用移位指令对数码管的位码进行移位,使每次执行中断程序时显示一位数,循环两次中断程序后“静态”显示两位数字。

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。

单只数码管循环显示0~9

单只数码管循环显示0~9

单只数码管循环显示0-9报告设计题目:单只数码管循环显示0~9设计要求:单片机控制1只数码管,循环显示0~9需求分析:本设计要求单只数码管循环显示0~9,这里采用的是共阴极数码管。

让数码管显示数字的步骤为:1)使数码管的公共端接地(共阴极)上。

2)将显示码送到单片机的P0口,向数码管的各个段输出不同的电平,使单个数码管循环显示0-9这10个数字。

复位电路:在上电或复位过程中,控制CPU的复位状态:这段时间让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。

无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。

而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。

许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。

基本的复位方式单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。

89系列单片机的复位信号是从RST引脚输入到芯片的施密特触发器中的。

当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。

设计原理:一、数码管显示原理我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。

所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。

数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。

而共阳极就是将八个LED的阳极连在一起。

其原理图如下。

其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。

一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。

单片机四位数码管阳极管1 ,2,3,4

单片机四位数码管阳极管1 ,2,3,4

单片机四位数码管阳极管1 ,2,3,4通常用于控制数码管的显示。

这些阳极管用于选择要显示的数码管,以便单片机可以向其发送相应的数据。

具体来说,单片机通过控制阳极管的导通或截止,来选择要显示的数码管。

例如,如果单片机想要显示数字“1”,它会控制阳极管1、2、3、4都处于截止状态,而阳极管5、6、7、8处于导通状态。

这样,数码管1就会被选通,并显示数字“1”。

此外,阳极管也可以通过编程来实现复用,以便同时控制多个数码管。

这样,单片机可以通过控制阳极管的导通和截止,来同时控制多个数码管的显示。

需要注意的是,具体的控制方式可能会因不同的单片机型号和数码管型号而有所不同。

因此,在使用单片机控制数码管时,需要参考相关的技术文档和数据手册,以确保正确的连接和控制方式。

单片机控制数码管显示

单片机控制数码管显示
常量表达式:可以是常量或符号常量;表示数组元素的个数 (也称数组长度)。不允许对数组大小作动态定义。
单片机应用技术
一维数组的初始化
一般格式:
数据类型 数组名[常量表达式]={初值表} 1.定义时赋初值;int score[5]={1,2,3,4,5}; 2.给一部分元素赋值;int score[5]={1,2}; 3.不对数组全部元素赋值,则全部元素被赋值为0; int score[5]; 4.给全部数组元素赋初值时,可以不指定数组长度; int score[]={1,2,3,4,5};
单片机应用技术
一维数组的查表功能
数组的一个非常有用的功能之一就是查表。表可以事 先计算后装入程序存储器中。 如: unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90}; //定义数组tab[],并初始化
单片机应用技术
思考:用单片机系统可控制 LED 可实现信 号灯的不同效果显示,那么能不能用单片 机系统控制LED来实现字符显示呢?
单片机应用技术
学习情境2
数码管显示系统设计
单片机应用技术
【教学目标】
1、终极目标:
制作在数码管上显示任意字符的单片机控制系统。
2、促成目标:
(1) 掌握单片机查表程序的设计方法; (2) 掌握单片机的LED显示接口电路工作原理及其应用; (3) 掌单片机LED显示接口的程序设计方法; (4) 初步掌握单片机应用系统分析和软硬件设计的基本方 法,建立单片机系统设计的基本概念;
39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 2 3 4 5 6 7 8 9 19 1

单片机 1个八段数码管循环显示0-f 汇编语言

单片机 1个八段数码管循环显示0-f 汇编语言

【概述】单片机是一种集成了微处理器、存储器和输入输出设备的微型计算机系统,广泛应用于电子产品中。

八段数码管是一种常见的显示器件,可以显示0-9和A-F共16个字符。

本文将以汇编语言为例,介绍如何利用单片机控制一个八段数码管循环显示0-F的过程。

【正文】1. 了解八段数码管八段数码管是由8个LED灯组成,可以显示16种不同的字符。

每个LED代表一个数码,通过控制LED的亮灭来显示相应的字符。

在汇编语言中,我们可以通过控制单片机的输出引脚来实现对八段数码管的控制。

2. 开发环境准备我们需要准备好单片机的开发环境,包括单片机开发板、编程软件等。

常用的单片机有51系列、AVR系列等,在使用之前需要熟悉其指令集和寄存器等相关知识。

3. 控制八段数码管在汇编语言中,我们可以通过对单片机的输出引脚进行控制来操作八段数码管。

具体的操作包括设置引脚状态、发送数据等。

通过编写相应的汇编语言程序,我们可以实现循环显示0-F的功能。

4. 编写汇编语言程序我们需要定义八段数码管每个数字对应的LED亮灭状态。

在主程序中编写循环语句,通过不断改变LED的状态来实现循环显示的效果。

在编写程序时,需要考虑到八段数码管的工作原理和时序要求,以确保程序的稳定性和准确性。

5. 调试和优化在编写完汇编语言程序后,我们需要进行调试和优化。

通过单步调试等手段来检查程序的运行情况,找出可能存在的问题。

可以根据实际情况对程序进行优化,提高程序的执行效率和稳定性。

6. 实际应用完成汇编语言程序的编写和调试后,我们可以将程序烧录到单片机中进行测试。

通过连接八段数码管和单片机的引脚,我们可以观察到八段数码管循环显示0-F的效果。

这个简单的实例展示了如何利用汇编语言控制八段数码管,为我们进一步深入了解单片机的应用奠定了基础。

【总结】通过本文的介绍,我们了解了如何利用汇编语言控制单片机实现八段数码管的循环显示。

汇编语言作为一种底层语言,对于理解单片机的工作原理和功能有着重要的作用。

单片机-4x4个矩阵按键控制数码管显示数字程序

单片机-4x4个矩阵按键控制数码管显示数字程序

单⽚机-4x4个矩阵按键控制数码管显⽰数字程序1 #include "8051.h"2 typedef unsigned char u8;3 typedef unsigned int u16;4 u8 smgduan[]= {5/*0 1 2 3 4 5 6 7 */60x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,7/*8 9 A B C D E F */80x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};910// P0⼝为数码管的位选的8位输⼊引脚11// P0 = 0x00;121314void Delayms(u16 ms);15void shumaguan(u8 n);16void DigDisplay();17void KeyTest();18void smg(u8 n, u8 m);19void key_4x4();2021void main()22 {23while(1)24 {25 key_4x4();26 }27 }2829// 不精确的延时函数30void Delayms(u16 ms)31 {32 unsigned int i, j;33for(i = ms; i > 0; i--)34for(j = 110; j > 0; j--);35return;36 }3738// 数码管根据74HC138译码器选择对应的段(选择哪个数码管显⽰)39void shumaguan(u8 n)40 {41switch(n)42 {43case0:44 LSA = 0;LSB = 0;LSC = 0;break;45case1:46 LSA = 1;LSB = 0;LSC = 0;break;47case2:48 LSA = 0;LSB = 1;LSC = 0;break;49case3:50 LSA = 1;LSB = 1;LSC = 0;break;51case4:52 LSA = 0;LSB = 0;LSC = 1;break;53case5:54 LSA = 1;LSB = 0;LSC = 1;break;55case6:56 LSA = 0;LSB = 1;LSC = 1;break;57case7:58 LSA = 1;LSB = 1;LSC = 1;break;59 }60 }6162// 数码管显⽰数字,并以⼗进制递增63void DigDisplay()64 {65 u8 i1 = 0;66 u8 i2 = 0;67 u8 i3 = 0;68 u8 i4 = 0;69 u8 i5 = 0;70 u8 i6 = 0;71 u8 i7 = 0;72 u8 i8 = 0;7374757677for (i8 = 0; i8 < 10; i8++)78for (i7 = 0; i7 < 10; i7++)79for (i6 = 0; i6 < 10; i7++)80for (i5 = 0; i5 < 10; i5++)81for (i4 = 0; i4 < 10; i4++)82for (i3 = 0; i3 < 10; i3++)83for (i2 = 0; i2 < 10; i2++)84for (i1 = 0; i1 < 10; i1++)85 {86 u16 cnt = 10;87while (cnt--)88 {89 shumaguan(0); //选中第⼀个数码管90 P0 = smgduan[i1]; //给他送⼀个数字91 Delayms(1); //稍微延时⼀下下92 shumaguan(1); //然后切换到第⼆个数码管。

(单片机实验教学资料)5.数码管动态显示

(单片机实验教学资料)5.数码管动态显示
实验效果与注意事项
实验效果上,学生能够通过实际操作掌握数码管动态显示 的方法,提高对单片机的应用能力。在实验过程中,需要 注意避免数码管亮度过高导致视觉疲劳,以及保证程序的 稳定性,避免出现闪烁或乱码现象。
展望
技术发展与新应用
教学改进与新方法
个人能力提升与拓展
随着技术的不断发展,数码管动态显 示技术将会有更多的应用领域。例如 ,在智能家居、物联网等领域中,数 码管动态显示可以作为人机交互界面 ,实现更加直观、高效的信息展示。
或字符。
数码管内部通常有8个LED段, 分别表示数字0-9和字母A-F。
当给某个LED段加上正向电压时, 该段点亮;反之,则熄灭。
动态显示与静态显示的区别
静态显示
每个数码管在某一时刻只显示一 个字符,需要使用多路复用技术 来控制多个数码管。
动态显示
通过轮流点亮不同的数码管,使 多个数码管同时显示不同的字符 ,实现多位显示。
实验结果展示
结果1
数码管成功显示数字或字母,无闪烁 或错位现象。
结果2
数码管显示效果不理想,存在闪烁或 错位现象。
结果分析
分析1
程序编写正确,数码管连接无误,因此数码管能够正确显示数字或字母。
分析2
程序中存在延时函数设置不当或数码管连接存在问题,导致数码管显示效果不 理想。
05
总结与展望
总结
发送控制信号
02
根据需要显示的内容,编写程序代码以向数码管发送相应的控
制信号。
刷新显示
03
在需要动态显示的情况下,编写程序代码以实现数码管的刷新
显示。
数码管驱动程序的编写
确定驱动程序功能
根据实际需求,确定驱动程序应具备的功能,如显示数字、字母 或自定义字符等。

按键控制1位LED数码管显示0-9

按键控制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 数码显示器有共阳极和共阴极两种结构形式。

由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。

51单片机hc595控制一位数码管

51单片机hc595控制一位数码管

/*用hc595控制数码管,显示键盘的值*/#include<reg52.h>#define unchar unsigned char#define unint unsigned intunchar temp,num;sbit scl=P3^6;sbit sda=P3^4;sbit rclk=P3^5; //寄存器时钟unchar code table[]={0x40,0xf9,0x24,0x30,0x99,0x12,0x02,0xf8,0x00,0x10,0xbf,0xb9,0xb6,0}; //数码管编码void delay1()//短延时{;;}void delay(int z) //长延时{int a,b;for(a=0;a<110;a++)for(b=0;b<z;b++);}void init()//初始化{scl=1;sda=1;rclk=0;}void start()//开始条件{scl=1;delay1();sda=1;delay1();sda=0;delay1();}void stop()//停止{scl=1;delay1();sda=0;delay1();sda=1;delay1();}void write(unsigned char temp)//写{int i;start();for(i=0;i<8;i++){scl=0;rclk=0;delay1();sda=(bit)(temp&0x80);delay1();scl=1;delay1();delay1();temp<<=1;} rclk=1;stop();}//键盘扫描unchar scan(){// unchar num,temp;// num=17;P2=0xfd;temp=P2;temp=temp&0xf0;while(temp!=0xf0){P2=0xfd;temp=P2;temp=temp&0xf0;delay(10);while(temp!=0xf0){temp=P2;temp=temp&0xf0;switch(temp){case 0xe0:num=1;break;case 0xd0:num=2;break;case 0xb0:num=3;break;case 0x70:num=4;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}// display(num-1);}}P2=0xfb;temp=P2;temp=temp&0xf0;while(temp!=0xf0){P2=0xfb;temp=P2;temp=temp&0xf0;delay(10);while(temp!=0xf0){temp=P2;switch(temp){case 0xeb:num=5;break;case 0xdb:num=6;break;case 0xbb:num=7;break;case 0x7b:num=8;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}//display(num-1);}}P2=0xf7;temp=P2;temp=temp&0xf0;while(temp!=0xf0){P2=0xf7;temp=P2;temp=temp&0xf0;delay(10);while(temp!=0xf0){temp=P2;switch(temp){case 0xe7:num=9;break;case 0xd7:num=10;break;case 0xb7:num=11;break;case 0x77:num=12;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}// display(num-1);//delay(100);}}return num;}/*void display(unchar num) {P0=table[num-1];delay(10);} */void main()//主函数{init();delay1();while(1)//大循环{write(table[scan()]);}}。

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

C1
30pF
R1
GND VCC 10k
9
RST
C3
10uF 29 30 31 PSEN ALE EA
R2
4.7k
1 2 3 4 5 6 7 8
P1.0/T2 P1.1/T2EX P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C52
GND
2 3 4 5 6 7 8 9
S1 S2 S3 S4 S5 S6
单片机应用技术
#include <REG51.H> unsigned char code table1[]={0x06,0x5b,0x4f,0x66,0x6d};//1-5的字形码 unsigned char code table2[]={0x76,0x79,0x38,0x38,0x3f};//HELLO的字形码 unsigned char code table3[]={0xfe,0xfd,0xfb,0xf7,0xef};//位选码 unsigned char i,a; sbit button=P1^7;//位定义,不能直接用P1^7
管 外 形 和 电 路 结 构
数码管引脚顺序
单片机应用技术
数码管段码图
单片机应用技术
【教学目标】
1、终极目标:
制作在数码管上显示任意字符的单片机控制系统。
2、促成目标:
(1) 掌握单片机查表程序的设计方法; (2) 掌握单片机的LED显示接口电路工作原理及其应用; (3) 掌单片机LED显示接口的程序设计方法; (4) 初步掌握单片机应用系统分析和软硬件设计的基本方 法,建立单片机系统设计的基本概念;
R1
10k
C2
30pF
9
RST
C3
10uF 29 30 31 PSEN ALE EA
R2
10k
1 2 3 4 5 6 7 8
P1.0/T2 P1.1/T2EX P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89S52
2 3 4 5 6 7 8
单片机应用技术 静态显示的概念 静态显示是指显示驱动电路具有输出锁存功能,待 显示的字符编码被CPU送出后,数码管会一直显示该字符 不变,CPU不需要再控制数码管,如果要显示新的字符, CPU只要再次送出即可。 采用静态显示方式,较小的电流就可以获得较高的 亮度,且占用CPU时间较少,编程简单,显示便于检测和 控制,但其占用的I/O口线较多,硬件电路复杂,成本高 ,只适合显示位数较少的场合。
单片机应用技术
思考:用单片机系统可控制 LED 可实现信 号灯的不同效果显示,那么能不能用单片 机系统控制LED来实现字符显示呢?
单片机应用技术
学习情境2
数码管显示系统设计
单片机应用技术
单片机应用技术
数字型数码管应用
电子万年历
的士计价器
电子秤
电梯外呼器
制 数 码 管 显 示 数 字 ?
单片机应用技术


单片机应用技术
任务2 0-99计数器
利用AT89c52单片机来制作一个 0~99计时器, 并且通过两个共阴数码管显示计数结果,数码管 显示采用静态显示方式。
单片机应用技术 0-99计数器电路设计
RP1
4.7k-7
C1
1
30pF
U1 X1
19 XTAL1 CRYSTAL 18 XTAL2 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 P20 P21 P22 P23 P24 P25 P26 P20 P21 P22 P23 P24 P25 P26
单片机应用技术
一维数组的查表功能
数组的一个非常有用的功能之一就是查表。表可以事 先计算后装入程序存储器中。 如: • unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90}; //定义数组tab[],并初始化
五、单片机控制 数码管显示
代码如下:
#include <reg51.h> void main() { while(1) { P2=0x3F; } }
单片机应用技术
对于共阳极数码管而言,要想显示数字或字母,首先 应该选中该数码管,然后相应字段被点亮。例如:显 示一个“3”字,那么应当是a亮、b亮、c亮、d亮、e 不亮、f不亮、g亮、dp不亮。那么可以列出数码管显 示数字的段码表如表2.1所示。
unsigned char k; while(1) { for(k=0;k<10;k++) { P2 = tab[k]; // 查表取数
单片机应用技术
4.LED数码管显示方式
根据LED显示的硬件设计方法的不同, LED显示驱动分为静态法和动态法两种方法。
单片机应用技术 静态显示方式
连接
所有 LED 的位选均共同连接到 +VCC 或 GND ,每个LED 的 8 根段选 线分别连接一个 8 位并行 I/O 口,从该 I/O 口送出相应的字型码显 示字型。
单片机应用技术
A B C D E F G DP
RP1
VCC 1kx8
C2
1
3ห้องสมุดไป่ตู้pF
U1 X1
19 XTAL1 12M 18 XTAL2 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 S1 S2 S3 S4 S5 S6 A B C D E F G DP

• •
特点
• 原理简单;显示亮度强,无闪烁;占用I/O资源较多。
单片机应用技术
动态显示方式
连接
所有LED的段选线共同连接在一起共用一个 8位I /O 口,而每个 LED 的位选分别由一根相应的 I/O 口线控 制。因此必须采用动态扫描显示方式,每一个时刻只 选通其中一个 LED ,同时在段选口送出该位 LED 的字型 码。
三、共阴极数 码管如何显示 其他数字
单片机应用技术
单片机应用技术
四、电路连 接
单片机应用技术
五、程序语句
要让数码管显示数字0,只需要将单片机的P2端口输出数 字0对应的段码0x3F即可,程序语句为P2=0x3F 同理显示数字1,程序语句为P2=0x06 同理显示数字9,程序语句为P2=0x6F
单片机应用技术
单片机应用技术
0-99计时器显示c语言程序
void main(void) { Count=0; //计数变量初始为0 For(Count=0; Count<100; Count++) { P0=table[Count/10]; //显示十位数 P2=table[Count%10]; //显示个位数
单片机应用技术
定义段码表
• unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90}; 查表语句
unsigned char k; while(1) { for(k=0;k<10;k++) { P2 = tab[k]; // 查表取数 …
82H
F8H 80H 90H
单片机应用技术 如表2.1所示,由于数码管显示的数字“0~9”的字型码 “0C0H、0F9H、0A4H、0B0H、99H、92H、82H、0F8H、 80H、90H”没有规律可循,只能采用查表的方式来完成我们所需 的要求。在程序设计中可以设计一个变量,每隔一定时间在 “0~9”之间变化,然后按照这个数据去查找段码表,把查到的 数据送到P2口。 所谓表格是指在程序中定义的一串有序的常数,如平方表、 字形码表、键码表等。因为程序一般都是固化在程序存储器(通 常是只读存储器ROM类型)中,因此可以说表格是预先定义在 程序的数据区中,然后和程序一起固化在ROM中的一串常数。 在程序设计中,有时需要预先把非线性数据以表格的形式存 放在存储器中,然后使用程序读出,这种能读出数据表格的程序 就称为查表程序。 查表程序的关键是表格的定义和如何实现查表。
单片机应用技术
0-99计数显示c语言程序
• • • • • • • • • • •
#include <AT89X52.H> //包含AT89X52.H头文件 /*定义0~9十个数字的字型码表*/ unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char Count; //定义变量放置计数数值 void delay10ms(void) //定义10ms延时函数 { unsigned char i,j; for(i=20;i>0;i--) for(j=248;j>0;j--); }
相关文档
最新文档