Proteus软件设计单片机控制单个数码管

合集下载

单片机原理及应用——C51编程+Proteus仿真(第3版)课件第5章 开关键盘显示器接口设计

单片机原理及应用——C51编程+Proteus仿真(第3版)课件第5章 开关键盘显示器接口设计
11
在【例5-1】基础上,编写控制发光二极管反复循环点亮的流水灯。 【例5-2】电路仍采用图5-2,制作由上至下再由下至上反复循环点亮显
示的流水灯,3种方法实现。
(1)数组的字节操作实现 建立1个字符型数组,将控制8个LED显示的8位数据作为数组元素,依
次送P1口。参考程序:
#include <reg51.h> #define uchar unsigned char uchar tab[ ]={ 0xfe , 0xfd , 0xfb , 0xf7 , 0xef , 0xdf , 0xbf , 0x7f , 0x7f ,
// 读入P1口的状态,送入state // 屏蔽P1口的高6位 // 判P1口低2位开关状态
{
case 0: P2=0x01; break; case 1: P2=0x02; break; case 2: P2=0x04; break; case 3: P2=0x08; break;
// 点亮P2.0脚LED //点亮P2.1脚LED // 点亮P2.2脚LED //点亮P2.3脚LED
} }
//左移初值赋给temp
// temp中的数据取反后送P1口 // 延时 // temp 中数据左移一位 // 赋右移初值给temp
// temp中的数据取反后送P1口 // 延时 // temp 中数据右移一位
15
程序说明: 注意使用移位运算符“>>”、“<<”与使用循环左移函数 “_crol_”和循环右移函数“_cror_” 区别。左移移位运算“<<”是将高位 丢弃,低位补0 ;右移移位运算、“>>”是将低位丢弃,高位补0。而循环 左移函数“_crol_” 是将移出的高位再补到低位,即循环移位;同理循环 右移函数“_cror_” 是将移出的低位再补到高位。

proteus1 单片机控制一盏灯

proteus1  单片机控制一盏灯
2、电路控制程序讲解
单片机控制单个发光二极管发光的C语言程序如下所示:
#include<reg51.h>//51单片机C语言包含的头文件,在这个文件中定义了管脚、寄存器等一些硬件信息。
sbit led=P1^0;//为P1.0管脚定义一个变量。
void main()//C语言的主函数,在C语言中一定要一个main函数。
{
led=0;//P1.0输出低电平,即使发光二极管发光。
}
3、程序运行验证
编写好程序文件后,生成hex文件,在Proteus的单片机中加载该hex文件,点击“运行”按钮,发光二极管会发光。
教学反思
单片机原理及应用课程教案
课题
单片机控制1位发光二极管亮
授课人
课程类型
一体化课程
范围及性质
普通(校级、市级公开课)
班级
15电子1、2班
课时
2课时
上课时间
2016-2017学年第一学期
上课地点
4A-512
教学目标
知识与技能:具备基础的单片机知识,能够读懂电路原理图
过程与方法:培养学生查询资料的能力和团结协作的意识
ห้องสมุดไป่ตู้时间
(一)复习引入
通过前面的学习,我们已经了解了单片机的结构以及单片机IO口的分布情况,也对编程软件和仿真软件有了一定的掌握,下面我们引入一个现实的例子来学习如何控制一位发光二极管的亮或者灭。
(二)新课内容
1、电路原理图设计
控制单个发光二极管的亮与灭的电路设计如上图所示,P1.0为低电平,发光二极管发光,P1.0为高电平,发光二极管熄灭。与发光二极管相连接的电阻R2,起到限流作用,防止发光二极管因电流过大被烧坏。单片机管脚19(XTAL1)、18(XTAL2)、9(RST)、31(EA)所连接的电路是使单片机正常工作的最小硬件系统。

8按键控制单数码管显示

8按键控制单数码管显示

8按键控制单数码管显⽰单⽚机存储器扩展设计题⽬名称 8按键控制单数码管显⽰学院化学化⼯学院专业过程装备与控制⼯程班级 12级过控(2)班姓名韩勇学号 2012421208指导⽼师杜俊完成⽇期 2014年11⽉21号8按键控制单数码管显⽰(韩勇 12级过控2班)摘要:利⽤单⽚机实现8按键控制数码管显⽰。

单⽚机是所有微处理机中性价⽐最⾼的⼀种,随着种类的不断全⾯功能不断完善,其应⽤领域也迅速扩⼤。

单⽚机在智能仪表、实时控制机电⼀体化、办公机械、家⽤电器等⽅⾯都有相当的应⽤领域。

当前8位单⽚机主要⽤于⼯业控制,如温度、压⼒、流量、计量和机械加⼯的测量和控制场合;⾼效能的16位单⽚机(如MCS-96、MK-68200)可⽤在更复杂的计算机⽹络。

可以说,微机测控技术的应⽤已渗透国民经济的各个部门,微机测控技术的应⽤是产品提⾼档次和推陈出新的有效途径。

关键字:按键,显⽰。

⼀、设计任务8按键控制器:有8个按键(k1-k8),当按键未按下去时,输出为“0”,当按下k1时,数码管显⽰1,按下k2时,数码管显⽰2,依次直⾄按下k8时,数码管显⽰8,循环结束;如果同时有2个或2个以上的按键按下去时,则数码管不作任何处理,保持原显⽰状态。

⼆、硬件设计1.显⽰部分电路显⽰采⽤动态扫描⽅式,显⽰器件选⽤共阴极数码管,它的断码段通过电阻与p0⼝相连,受p0⼝低七位管脚控制,由p0⼝输出要显⽰的内容,其中p0⼝要接上拉电阻RP1起限制电流的保护作⽤。

2.按键部分电路8个独⽴按键k1-k8与p2⼝直接相接,每个按键占⽤⼀根I/O端线,可以控制p2⼝的8个管脚输⼊的电平⾼低,按下键时,相应管脚输⼊低电平,不按键时,输⼊⾼电平,因此可以直接通过观察相应的端⼝的电平⾼低来判断是否有按键按下。

3.⼯作原理单⽚机的p2⼝为位选控制端,且低电平有效,当按键按下后,其输出低电平,信号经p2⼝传⼊单⽚机的CPU中,CPU将信号传⼊p0⼝,由p0⼝将信号输出并显⽰在数码管上,其中按键编号与数码管显⽰的数字⼀致,当按下k1时,数码管显⽰1,按下k2时,数码管显⽰2,依次直⾄按下k8时,数码管显⽰8。

数码显示控制实验报告(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单片机控制数码显示模块的方法,学会了使用移位寄存器实现数码显示的动态扫描。

proteus控制数码管增减课设报告

proteus控制数码管增减课设报告

一、任务说明1、按照设计要求自行定义电路图纸尺寸;2、设计任务如下:利用51单片机和2位共阴极数码管及2个按键等器件,设计一个控制数码管增减的单片机系统,数码管显示范围为00-99。

3、按照设计任务在Proteus 6 Professional中绘制电路原理图;4、根据设计任务的要求编写程序,在Proteus下进行仿真,实现相应功能。

二、应用PROTEUS软件绘制原理图的过程1、进入proteus7 professional。

2、设置图纸尺寸。

单击system,再单击set sheet sizes,将尺寸设置A4,单击OK。

如图1所示。

图1 设置图纸尺寸3、选择原理图所需要元件。

点击左侧栏第二个图标,再点击P,在搜索栏输入需要的元件名称。

数码管为7seg,排阻为respack-8,按键为button,单片机为89c51,晶振为crystal,电阻为res,电容有两种,分别为cap-elec,capacitor。

如图2所示。

图2选择原理图所需要元件4、选择电源及地线。

单击左侧栏第8个图标,选择电源VCC,地线GROUND。

如图3所示。

图3 选择电源及地线5、设置元件参数。

双击需要改变参数的元件,按需要修改参数。

6、连接时钟电路部分。

鼠标单击需要连接的一段,这时鼠标变成连线,再将鼠标落在需要连接的另一端即可将原理图完成。

如图4所示。

图4 时钟电路部分7、连接共阴极数码管部分。

因为数码管为共阴极,所以在连接P0口同时,与1k欧姆排阻相连,排阻另一端接5V直流电源,通过P2.6和P2.7控制数码管。

如图5所示。

图5 数码管部分连接电路8、连接按键部分。

通过P3口第二功能放置按键。

用外部中断源0,1控制按键1,2。

按键1,2的功能分别为控制计数的加减,如图6所示。

图6 按键部分原理图9、原理图连接完成。

三、应用PROTEUS软件对原理图进行仿真的步骤以及过程结果1、在keil中编写程序。

由于设计任务是用按键控制正计数和倒计数,则利用两个外部中断分别控制。

单片机控制数码管

单片机控制数码管

一、任务说明利用51单片机、1个独立按键及1位7段数码管等器件,设计一个单片机输入显示系统,要求每按一下独立按键数码管显示数据加1(数码管初始值设为0,计到9后再加1 ,则数码管显示0)。

本次设计采用12MHz的晶体振荡器为单片机提供振荡周期,外加独立按键、复位电路和显示电路组成。

二、原理图本次设计主要用到单片机AT89C51、晶振时序电路。

AT89C51是一种带4KB闪烁可编程可擦出只读存储器的低电压、高性能CMOS微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微处理器,为很多嵌入式控制系统提供了一种灵活性高且廉价的方案,AT89C51的管脚分配。

AT89C51单片机主要由4个输入输出端口(P0口、P1口、P2口、P3口)及个控制引脚组成的,本次设计用到P1、P2的部分引脚,及18、19脚外接晶振电容为单片机提供时钟,9管脚为复位引脚,外接复位电路。

晶振时序电路:XTAL1和XTAL2分别为片内反相放大器的输入和输出端,当单片机采用外部时钟信号时,前者接地,后者引入外部输入信号,本次设计采用12M的石英晶体振荡器为单片机提供时钟。

三、流程图绘制以及说明主程序设计说明主程序主要分为四部分,包括复位电路部分、独立按键的判别部分、单片机控制主程序部分和译码显示部分,模块流程图如图6所示:图6 主程序流程图结束返回重新检测按键将单片机处理的数据进行显示单片机主控制电路向单片机申请显示0计数加1,向单片机申请显示该数值。

Y是否按键? 开始N附录II 源程序清单#include<reg52.h>#define uchar unsigned charsbit key=P1^0; //独立按键的位定义uchar code duan[]={~0x3F,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f};//此数组为!!! 0~9 !!!uchar num; //记录按键的次数void display(uchar); //显示函数声明void delay(uchar); //延时函数声明void main(){uchar num=0;while(1) //while大循环{if(key==0){delay(80); //按键消抖if(key==0) //重新检测{if(num==9)num=0;elsenum++;while(!key); //等待松手,松手后才能送去显示}}display(num);}}void display(uchar x){P2=duan[x];delay(1); //在1位数码管上显示}void delay(uchar a){uchar y,z;for(y=a;y>0;y--)for(z=150;z>0;z--);}附录III 元器件清单元件标号元件名称所在库AT89C51 51单片机MCS8051 74HC245 数据缓冲器74HC 7SEG 7段数码管DISPLAY RES 电阻DEVICE BUTTON 按键ACTIVE CAP 电容DEVICE CRYSTAL 晶振DEVICE。

Proteus软件设计单片机控制单个数码管

Proteus软件设计单片机控制单个数码管
7
程序设计
比较:控制LED设计 → 控制数码管设计
(3)多个LED VS 多个数位(查表方式) : 复述:P1控制一个LED闪烁的程序结构 问题:如果改成控制数码管的某个数位?
8
实验
1、用Proteus设计:单片机P1口控 制一个共阳极数码管的电路 2、编写程序: (1)控制一个7SEG的一个数位的 闪烁; (2)从0~9、A、B、C、D、E、F 的循环显示;
DJNZ R5,$ DJNZ R4,D1 RET END
一个共阳数码管一个码位的闪烁程序 ORG 0000H
START:MOV P1,#0C0H ACALL DELAY MOV P1,#0FFH ACALL DELAY SJMP START
DELAY:MOV R4,#0FFH D1: MOV R5,#0FFH
e
c
d
dp
e d GND c dp
R8 a b c d e f g dp
共阴极连接
2
Proteus中的数码管
共阳极
7SEG-MPX1-CA
共阴极
7SEG-MPX1-CC
? 数字形式的编码
3
十六进制数字型代码表
字型 0 1 2 3 4 5 6 7 8
共阳极代码 共阴极代码
C0H
3FH
F9H
06H
分 DELAY:MOV R7,#0FFH 析 D1: MOV R6,#0FFH
D2: DJNZ R6,D2
D2: DJNZ R6,D2
TAB:
DJNZ R7,D1 RET DB 11111110B ……. DB 0FFH
DJNZ R7,D1
RET
TAB: DB 0C0H,0F9H,0A4H

单只数码管循环显示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)连在一起,而各自的公共端称为位选线。

单片机C语言程序设计实训100例——基于8051+Proteus仿真(前25题)

单片机C语言程序设计实训100例——基于8051+Proteus仿真(前25题)

单片机C语言程序设计实训100例——基于8051+ Proteus仿真01 闪烁的LED/*名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P10;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02从左到右的流水灯/*名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}038只LED左右来回点亮/*名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/ #include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i<7;i++){P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04花样流水灯/*名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}05LED模拟交通灯/* 名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。

1位数码管Proteus仿真实验方法

1位数码管Proteus仿真实验方法
4
MAIN: MOV R0,#0 MOV DPTR,#TABLE MAIN1: MOV A,R0 MOVC A,@A+DPTR MOV P2,A CALL DELAY INC R0 CJNE R0,#10,MAIN1 MOV R0,#0 JMP MAIN
DELAY: MOV R2,#20 X2:MOV R3,#40 X1:MOV R4,#250 DJNZ R4,$ DJNZ R3,X1 DJNZ R2,X2 RET
TABLE: DB 0C0H, 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END 通过对比上述两个程序,可以发现,其实第二个程序没有第一个程序短太多, 但是第二个程序的拓展性比第一个程序好,只要修改程序中的几个参数,程序行 没有增加,就可以将显示内容修改为 0-9、A-F。而程序 1 如果想实现相同的功 能,只能继续增加程序行。因此在进行编程的时候,一定要根据程序的特点,选 择不同的编程形式,选择了恰当的编程形式,能够很大程度上的简化程序。 也可以使用 C 语言进行编程,其编程思路与汇编语言类似,这里不再赘述。 参考程序如下: #include <reg52.h> #define uchar unsigned char
DELAY: MOV R2,#20 X2:MOV R3,#40 X1:MOV R4,#250 DJNZ R4,$ DJNZ R3,X1 DJNZ R2,X2 RET
END 这种编程方法的优点是,程序简单,适合新手使用。程序修改容易,可以直 接进行任意修改以及增加。其缺点是程序冗长,显示内容较多时,程序书写工作 量大。 另外一种编程方法是查表发,将需要显示的内容预先写入单片机片内 ROM 中,当需要哪个段码直接从 ROM 中读取,并送至 I/O 口进行显示。这种方法编 写的程序较上述程序要简单很多。参考程序如下: ORG 0H JMP MAIN ORG 30H

《基于Proteus的Arduino可视化编程应用技术》教学课件—03LED数码管的应用

《基于Proteus的Arduino可视化编程应用技术》教学课件—03LED数码管的应用

完善的SETUP结 构流程图
3.3.3 TimeUpdate和TimeDisplay结构 流程图绘制
1)TimeUpdate结构流程图绘制
2)TimeDisplay结构流程图绘制
3.3.4 LOOP结构流程图的绘制
3.3.5 OnTimeISR结构流程图绘制
1)放置“事件块”
拖动“事件块”到图 纸空白处。双击“事 件”图框,弹出“编 辑事件块”对话框
拖动“init”(初 始化)图框到 SETUP结构流程 图
2)拖动“setBrightness”( 亮度)图框到 SETUP结构流程图,双击弹出“编辑I/O块 ”对话框
(2)“timer1”(定时器1)初始化设 置
2)拖动“initialize”图框到SETUP结构流 程图中,双击弹出“编辑I/O块”对话框
电路中的Grove 4-Digit Display模块连接号为 D2,对应的1、2管脚和单片机的IO2、IO3管脚 连接。双击电路中Grove 4-Digit Display模块的连 接号“D2”弹出“编辑与元件”对话框如图3-46所示 ,在“Connector ID”下拉列表中选择“D3”、 “D4”等选项,相应的和单片机的连接管脚为IO3 、IO4和IO4、IO5等,依次类推
DP
g
f
e
d
c
b
a
I/O口输 出
0
0
1
1
1
1
1
3FH 1 (段
码)
LED显示器的字段码
显示字符
字段码 共阴极 共阳极
0 0011,1111 1100,0000
1 0000,0110 1111,1001 2 0101,1011 1010,0100 3 0100,1111 1011,0000 4 0110,0110 1001,1001 5 0110,1101 1001,0010 6 0111,1101 1000,0010 7 0000,0111 1111,1000 8 0111,1111 1000,0000 9 0110,0111 1001,0000

基于单片机4X4矩阵键盘控制数码管显示的Proteus仿真

基于单片机4X4矩阵键盘控制数码管显示的Proteus仿真

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 P2.6 28 P2.7
10 11 12 13 14 15 16 17
K0
K1
K4
K5
K8
K9
KC
KD
图 3-2:当按下 K4 键时,数码管显示数字‘4’
软件设计方面,我感觉到在编写循环嵌套程序时非常容易出错,需要反复的查错 和耐心的调试。我虽然能够编写出程序,其可读性却有待于提高。
经过这次仿真设计,我对 51 系统的单片机内部构造的了解认识有了一定程度的提 高。我体会到做设计是一项细致的工作,必须要投入时间及精力,要有耐心有韧性。
我相信这几次的仿真设计会为我以后的发展打下一定的基础,我会更加努力,争取 自己在单片机的开发上有更深层次的提高,与此同时经过此次仿真,锻炼了团队协作 能力。
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 P2.6 28 P2.7
10 11 12 13 14 15 16 17
K0
K1
K2
K3
K4

以51单片机为核心的DS18B20的数码管显示温度程序+Proteus仿真

以51单片机为核心的DS18B20的数码管显示温度程序+Proteus仿真

//DS18B20的读写程序,数据脚P3.3 ////温度传感器18B20汇编程序,采用器件默认的12位转化////最大转化时间750微秒,显示温度-55到+125度,显示精度////为0.1度,显示采用4位LED共阳显示测温值////P0口为段码输入,P24~P27为位选///***************************************************/#include "reg51.h"#include "intrins.h" //_nop_();延时函数用#define Disdata P0 //段码输出口#define discan P2 //扫描口#define uchar unsigned char#define uint unsigned intsbit DQ=P3^3; //温度输入口sbit DIN=P0^7; //LED小数点控制uint h;uchar flag;//**************温度小数部分用查表法***********//uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//uchar code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//共阳LED段码表"0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" uchar code scan_con[4]={0x7f,0xbf,0xdf,0xef}; //列扫描控制字uchar data temp_data[2]={0x00,0x00}; //读出温度暂放uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //显示单元数据,共4个数据和一个运算暂用///////***********11微秒延时函数**********///void delay(uint t){for(;t>0;t--);}///***********显示扫描函数**********/scan(){char k;for(k=0;k<4;k++) //四位LED扫描控制{Disdata=0xff;Disdata=dis_7[display[k]];if(k==1){DIN=0;}discan=scan_con[k];delay(90);discan=0xff;}}/////***********18B20复位函数**********/ow_reset(void){char presence=1;while(presence){while(presence){DQ=1;_nop_();_nop_();DQ=0; //delay(50); // 550usDQ=1; //delay(6); // 66uspresence=DQ; // presence=0继续下一步}delay(45); //延时500uspresence = ~DQ;}DQ=1;}/////**********18B20写命令函数*********///向1-WIRE 总线上写一个字节void write_byte(uchar val){uchar i;for (i=8; i>0; i--) //{DQ=1;_nop_();_nop_();DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us DQ = val&0x01; //最低位移出delay(6); //66usval=val/2; //右移一位}DQ = 1;delay(1);}///*********18B20读1个字节函数********///从总线上读取一个字节uchar read_byte(void){uchar i;uchar value = 0;for (i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ = 0; //_nop_();_nop_();_nop_();_nop_(); //4usDQ = 1;_nop_();_nop_();_nop_();_nop_(); //4us if(DQ)value|=0x80;delay(6); //66us}DQ=1;return(value);}///***********读出温度函数**********///read_temp(){ow_reset(); //总线复位write_byte(0xCC); // 发Skip ROM命令write_byte(0xBE); // 发读命令temp_data[0]=read_byte(); //温度低8位temp_data[1]=read_byte(); //温度高8位ow_reset();write_byte(0xCC); // Skip ROMwrite_byte(0x44); // 发转换命令}///***********温度数据处理函数**********/ void work_temp(){uchar n=0;uchar doth,dotl;uchar flag3=1,flag2=1; //数字显示修正标记if((temp_data[1]&0xf8)!=0x00){temp_data[1]=~(temp_data[1]);temp_data[0]=~(temp_data[0])+1;n=1;flag=1;}//负温度求补码if(temp_data[0]>255){temp_data[1]++;}display[4]=temp_data[0]&0x0f;display[0]=ditab[display[4]];doth=display[0]/10;dotl=display[0]%10;display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x07)<<4); display[3]=display[4]/100;display[2]=display[4]/10%10;display[1]=display[4]%10;if(!display[3]){display[3]=0x0a;flag3=0;if(!display[2]){display[2]=0x0a;flag2=0;}}//最高位为0时都不显示if(n){display[3]=0x0b;//负温度时最高位显示"-"flag3=0;}}/////**************主函数****************/main(){Disdata=0xff; //初始化端口discan=0xff;for(h=0;h<4;h++){display[h]=8;}//开机显示8888ow_reset(); // 开机先转换一次write_byte(0xCC); // Skip ROMwrite_byte(0x44); // 发转换命令for(h=0;h<500;h++){scan();} //开机显示"8888"2秒while(1){read_temp(); //读出18B20温度数据work_temp(); //处理温度数据scan(); //显示温度值2秒}}////*********************结束**************************//。

基于proteus的51单片机仿真实例六十、8位数码管显示实例

基于proteus的51单片机仿真实例六十、8位数码管显示实例

基于proteus的51单片机仿真实例六十、8位数码管显示实例1、本例实现在8位数码管上同时显示多个不同字符。

2、本例使用了8只集成式7段共阳数码管(pruteus中元件标识为7seg-mpx8-ca-blu,共阳为ca,共阴为cc),所有8个数码管的段码引脚a,b,c,d,e,f,g,dp都是分别并联在一起,任何时候发送的段码均会传送到所有数码管上,所有的数码管的共阳极是独立的,本例中个数码管的共阳极分别与8只NPN三极管射极相连,程序运行时,任意时刻仅允许一只数码管的共阳极连接+5V,当向连接段码的端口发送段码值时,相应数字只会显示在某一只数码管上。

3、为了使不同数码管显示不同字符,本例使用的是集成式多位数码管常用的动态扫描显示技术,他利用了人的视觉暂留特征,选通第一只数码管时,发送1的段码;选通第二只数码管时,发送2的段码,...每次仅选通一只数码管,发送相应的段码,每次切换选通下一数码管并发送相应段码的时间间隔非常短,视觉惰性使人感觉不到字符是一个接一个显示在不同的数码管上的,而会觉得所有的字符很稳定的同时显示在不同数码管上。

在控制两位数码管选通的时间间隔时,要注意全屏的扫描频率要高于视觉暂留频率16-20Hz。

对于程序中的点亮一位数码管的延时时间,我们可以尝试将延时时间改为其他数值,观察会出现什么样的效果。

4、在keil c51中新建工程ex48,编写如下程序代码,编译并生成ex48hex文件/***************************************************************************** * LED数码管显示演示程序** 在8个LED数码管上依次显示1,2,3,4,5,6,7,8 ******************************************************************************** /#include <reg51.h> //包含头文件#include <intrins.h> //包含移位函数头文件//段码表unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off//毫秒级延时函数void delay(unsigned int x){unsigned char i;while(x--){for(i=0;i<120;i++);}}//主函数void main(){unsigned char k,m=0x80; //变量定义P0 = 0xff; //先关闭数码管P2 = 0x00; //while(1){for(k = 0;k < 8;k++) //循环8次{P2 = 0x00; //每显示一位都要关闭位选端口一次m=_crol_(m,1); //循环左移P2=m; //每次选通一个位选端口P0=dis_code[k+1]; //段码送P0口delay(2);}}}5、在proteus中新建仿真文件ex48.dsn,电路原理图如下所示6、将ex48.hex文件载入at89c51中,启动仿真,观察程序运行结果,下图是程序运行结果。

一位数码管两种驱动方法 原理图与程序(汇编+C语言)

一位数码管两种驱动方法 原理图与程序(汇编+C语言)

6
实验 2 汇编语言代码
ORG 0H JMP MAIN ORG 30H MAIN: MOV P2,#0 MOV R5,#10 X4: CALL DELAY INC P2 DJNZ R5,X4 JMP MAIN
DELAY: MOV R2,#20 X3:MOV R3,#40 X2:MOV R4,#250 DJNZ R4,$ DJNZ R3,X2 DJNZ R2,X3 RET END 注意:在上述程序中,直接对 P2 口进行了加 1 操作,P2 口的值从 0 开始,增加 10 次后,对 P2 口进行清零,P2 口的值经过 7446 译码后,驱动数码管显示指定
实验 1 汇编语言代码 2(直接赋值方法):
ORG 0H JMP MAIN ORG 30H MAIN: MOV P2,#0C0H CALL DELAY
3
MOV P2,#0F9H CALL DELAY MOV P2,#0A4H CALL DELAY MOV P2,#0B0H CALL DELAY MOV P2,#99H CALL DELAY MOV P2,#92H CALL DELAY MOV P2,#82H CALL DELAY MOV P2,#0F8H CALL DELAY MOV P2,#80H CALL DELAY MOV P2,#90H CALL DELAY JMP MAIN
void delay()
//延时函数
{ unsigned int i,j;
for(i=0;i<100;i++)
for(j=0;j<1000;j++)
_nop_;
4
} void main() { unsigned char a[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; unsigned m;

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

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

ATmega8-Protues仿真之二 LED 数码管

ATmega8-Protues仿真之二 LED 数码管

第二讲 LED数码管的学习提要:主要学习Atmega8通用数字I/O接口控制LED数码管的应用。

2.1 I/O口的结构及特点:Atmega8有23个I/O引脚,分成3个8位的端口B、C和D,其中C口只有7位。

I/O端口作为通用数字输入/输出口使用时,都具备真正的读-修改-写(R-M-W)特性。

每个I/O引脚采用推挽式驱动,不仅能提供大电流的输出驱动,而且也可以吸收20mA的电流,因而能直接驱动LED显示器。

Atmega8采用3个8位寄存器来控制I/O端口,它们分别是方向寄存器DDRx,数据寄存器PORTx 和输入引脚寄存器PINx(x为B或C或D,分别代表B口、C口或D口;n为0~7,代表寄存器中的位置),其中DDRx和PORTx是可读写寄存器,而PINx 为只读寄存器。

每个I/O引脚内部都有独立的上拉电阻电路,可通过程序设置内部上拉电阻是否有效。

方向寄存器DDRx中的每个位用于控制I/O口一个引脚的输入输出方向,即控制I/O口的工作模式为输出模式还是输入模式。

当DDRxn=1时,I/O的Pxn引脚处于输出模式。

此时当PORTxn=1时,I/O 引脚呈高电平,同时可提供输出20mA的电流;当PORTxn=0时,I/O引脚呈低电平,同时可吸收20mA的电流。

当DDRxn=0时,I/O的Pxn引脚处于输入模式。

此时引脚寄存器PINxn中的数据就是外部引脚的实际电平。

此时可通过PORTxn的设置可控制内部的上拉电阻使用或不使用。

表2-1 I/O口设置表(n=7,6,…,1,0)DDRxn PORTxn PUD I/O模式内部上拉电阻引脚状态说明0 0 X 输入无效三态(高阻)0 1 0 输入有效外部引脚拉低时输出电流0 1 1 输入无效三态(高阻)1 0 X 输出无效低电平推挽输出,吸收电流(≤20mA)1 1 X 输出无效高电平推挽输出,输出电流(≤20mA)通用I/O口主要特点:1 都具备真正的读-修改-写(R-M-W)。

单片机控制数码管

单片机控制数码管

一、任务说明利用51单片机、1个独立按键及1位7段数码管等器件,设计一个单片机输入显示系统,要求每按一下独立按键数码管显示数据加1(数码管初始值设为0,计到9后再加1 ,则数码管显示0)。

本次设计采用12MHz的晶体振荡器为单片机提供振荡周期,外加独立按键、复位电路和显示电路组成。

二、原理图绘制说明本次设计主要用到单片机AT89C51、晶振时序电路。

AT89C51是一种带4KB闪烁可编程可擦出只读存储器的低电压、高性能CMOS微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微处理器,为很多嵌入式控制系统提供了一种灵活性高且廉价的方案,AT89C51的管脚分配,如图1:图1 AT89C51芯片及管脚图AT89C51单片机主要由4个输入输出端口(P0口、P1口、P2口、P3口)及个控制引脚组成的,本次设计用到P1、P2的部分引脚,及18、19脚外接晶振电容为单片机提供时钟,9管脚为复位引脚,外接复位电路。

晶振时序电路:XTAL1和XTAL2分别为片内反相放大器的输入和输出端,当单片机采用外部时钟信号时,前者接地,后者引入外部输入信号,本次设计采用12M的石英晶体振荡器为单片机提供时钟,如图2:图2 AT89C51的晶振时序电路图本次设计的原理图是在PROTEUS ISIS中绘制的,其工作界面分为原理图编辑窗口(Editing window)、预览窗口(Overview window)和工具栏。

1、新建*.dsn打开绘图界面后,首先新建一个绘图文件,选择“【文件】——【新建设计】”,并保存成.dsn型文件。

2、绘制原理图(1)添加元器件:元件拾取共有两种办法,一种是按类别查找和拾取元件,另一种是直接查找和拾取元件。

我采用的是前一种方法,元件通常以其英文名称或器件代号在库中存放。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DJNZ R5,$ DJNZ R4,D1 RET END
11
程序设计对比分析
LED跑马灯的程序(1) ORG 0000H
START:MOV P1,#0FEH ACALL DELAY MOV P1,#0FDH ACALL DELAY
…… SJMP START
DELAY:MOV R4,#0FFH D1: MOV R5,#0FFH
A4H
5BH
B0H
4FH
99H
66H
92H
6DH
82H
7DH
F8H
07H
80H
7FH
字型 9 A B C D E F 灭
共阳极代码 90H 88H 83H C6H A1H 86H 84H FFH
共阳极代码 6FH 77H 7CH 39H 5EH 79H 71H 00H
思考:y、J、L、H的编码?
4
讨论
SEG7: MOV P1,A
程 序 设 计 :
ST1: CLR A ST2: MOVC A,@A+DPTR
CJNE A,#0FFH,SEG7 SJMP START SEG7: MOV P1,A
ACALL DELAY

ACALL DELAY
SJMP ST1

SJMP ST1
DELAY:MOV R7,#0FFH D1: MOV R6,#0FFH
分 DELAY:MOV R7,#0FFH 析 D1: MOV R6,#0FFH
D2: DJNZ R6,D2
D2: DJNZ R6,D2
TAB:
DJNZ R7,D1 RET DB 11111110B ……. DB 0FFH
DJNZ R7,D1
RET
TAB: DB 0C0H,0F9H,0A4H
……
DB 0FFH
DJNZ R5,$ DJNZ R4,D1 RET END
12
LED跑马灯的程序(查表) ORG 0000H
一个共阳数码管显示数码的程序(查表)
START:MOV DPTR,,#TAB
ORG 0000H
ST1: CLR A
START:MOV DPTR,#TAB
ST2: MOVC A,@A+DPTR CJNE A,#0FFH,SEG7 SJMP START
DJNZ R5,$ DJNZ R4,D1 RET END
一个共阳数码管显示数码的程序 ORG 0000H
START:MOV P1,#0C0H ACALL DELAY MOV P1,#0F9H ACALL DELAY
……
SJMP START DELAY:MOV R4,#0FFH D1: MOV R5,#0FFH→ 控制数码管设计
(3)多个LED VS 多个数位(查表方式) : 复述:P1控制一个LED闪烁的程序结构 问题:如果改成控制数码管的某个数位?
8
实验
1、用Proteus设计:单片机P1口控 制一个共阳极数码管的电路 2、编写程序: (1)控制一个7SEG的一个数位的 闪烁; (2)从0~9、A、B、C、D、E、F 的循环显示;
END
13
END
14
更复杂的问题
如何控制多个数码管:2个、4个?
15
DJNZ R5,$ DJNZ R4,D1 RET END
一个共阳数码管一个码位的闪烁程序 ORG 0000H
START:MOV P1,#0C0H ACALL DELAY MOV P1,#0FFH ACALL DELAY SJMP START
DELAY:MOV R4,#0FFH D1: MOV R5,#0FFH
思考:可以显示其它哪些字母?
9
前面的程序设计的答案
10
程序设计对比分析
一个LED的闪烁程序 ORG 0000H
START:MOV P1,#0FEH ACALL DELAY MOV P1,#0FFH ACALL DELAY SJMP START
DELAY:MOV R4,#0FFH D1: MOV R5,#0FFH
第5讲 软件设计-数码管控制
本讲内容:
书本第5章(P91-92)
介绍单片机控制数码管的硬件与软件
用Proteus画出单片机控制数码管的硬件图。 软件设计框图。软件设计。
观察:学会系统设计,特别是软件设计的细 节编程
实例:完成对单个、多个数码管的仿真设计。
1
数码管介绍
g f GND a b
a
f g
b
如何判断数码管的对应引脚? 画出单片机控制一个共阳极数码管 的电路图。
5
程序设计
比较:控制LED设计 → 控制数码管设计
(1)一个LED VS 某一数位: 复述:P1控制一个LED闪烁的程序结构 问题:如果改成控制数码管的某个数位?
6
程序设计
比较:控制LED设计 → 控制数码管设计
(2)多个LED VS 多个数位: 复述:P1控制一个LED跑马灯的程序结构 问题:如果改成控制数码管的多个数位?
e
c
d
dp
e d GND c dp
R8 a b c d e f g dp
共阴极连接
2
Proteus中的数码管
共阳极
7SEG-MPX1-CA
共阴极
7SEG-MPX1-CC
? 数字形式的编码
3
十六进制数字型代码表
字型 0 1 2 3 4 5 6 7 8
共阳极代码 共阴极代码
C0H
3FH
F9H
06H
相关文档
最新文档