任务一、1位LED数码管的显示
一、学习目标
1、了解七段LED数码管的结构、分类以及数码管的显示码。
2、学习1位LED数码管静态显示与动态显示的编程方法。
二、相关知识
1、七段LED数码管:
LED数码管是单片机控制系统中最常见的显示器件之一,一般用来显示处理结果以及输入输出信号的状态。
①LED数码管的结构:
LED数码管是由8个发光二极管中的7个长条形发光二极管(俗称7笔段)
按a、b、c、d、e、f、g顺序组成“8”字形,另一个点形的发光二极管dp放在右下方,用来显示小数点,如图3-1-1(a)所示。只要控制7笔段按一定的要求亮与灭,就能显示出十六进制0~F。
(a) (b) (c)
图3-1-1 LED数码管的结构 3-1-2 LED引脚
LED数码管按内部连接方式又分为“共阳极数码管”和“共阴极数码管”两种。若8个发光二极管的阳极连在一起接电源正极为共阳极数码管,如图3-1-1(b)所示。若8个发光二极管的阴极连在一起接地则为共阴极数码管,如图3-1-1(c)图所示。下文如不特别说明,所用LED数码管都为共阴极数码管。
共阴极数码管的引脚如图3-1-2所示,共有10只引脚,其中3、8引脚连通,作为公共端接地。
②数码管显示码:
数码管显示码是表述二进制数与数码管所显示字符的对应关系的。如表
3-1-3所示。
表3-1-3数码管显示码
2、一位LED数码管静态显示“6”
①硬件电路如图3-1-4所示。
图3-1-4 1位LED数码管显示电路图
为了保证LED数码管的正常运行,必须在连接P0口的基础上,各位串联一限流电阻R,阻值可取360。LED数码管的公共端通过限流电阻接P1.0,由P1.0的信号来选通LED数码管,当P1.0=0数码管选通,当P1.0=1数码管未选通。
②程序流程图如图3-1-5所示:
图3-1-5 程序流程图
③程序清单:“一位LED数码管静态显示6.a”
START: CLR P1.0 ; 选通个位LED数码管
MOV DPTR, #TABLE ; 存入表的起始地址
MOV A, #6 ; 将欲显示的数字6存入A
MOVC A, @A+DPTR ; 按地址取代码并存入A
MOV P0, A ; 将代码送P0转变数字显示
SJMP $ ; 程序运行在当前状态
TABLE: DB 3FH, 06H, 5BH, 4FH
DB 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH
DB 39H, 5EH, 79H, 71H ;代码表
END
3、一位LED数码管动态循环显示0~9。
①硬件电路如图3-1-4所示。
②程序流程图:
图3-1-6 程序流程图
③程序清单:“一位LED数码管动态循环显示0~9.a”
START: CLR P1.0 ;选通个位LED数码管
MOV DPTR, #TABLE ; 存表
MOV R0, #0 ; 设定初始值
LOOP : MOV A, R0
MOVC A, @A+DPTR ; 取表代码
MOV P0, A ; 送P0输出
ACALL DLY1S ; 调延时程序 存表取表
INC R0 ; R0值加1
CJNE R0, #10 , LOOP ; 不是10,循环
JMP START ; 重新开始 判断循环
DLY1S: MOV R5, #50 ;
D1: MOV R6, #100 ;
D2: MOV R7, #100 ;
DJNZ R7, $ ;
DJNZ R6, D2 ;
DJNZ R5, D1 ; 1秒延时
RET ; 子程序
TABLE: DB 3FH, 06H, 5BH, 4FH
DB 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH
DB 39H, 5EH, 79H, 71H ; 代码表
END ; 程序结束
三、实践操作:
用THDPJ-3型单片机开发综合实验箱完成单片机软硬件系统的调试。
(1)使用单片机最小应用系统。打开该模块电源,用扁平数据线连接单片机P0口与八位动态数码管段码模块,用扁平数据线连接单片机P1口与八位动态数码管位码模块。
(2)将THKL-C51仿真器的USB接口接入电脑,目的是给仿真器提供电源,
此时仿真器上的POWER灯点亮。用串行数据通信线连接计算机与仿真器。
(3)把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
(4)打开KeiluVision2仿真软件,首先建立本项目的项目文件,接着分别添加“一位LED数码管静态显示6.a”以及“一位LED数码管动态循环显示0~9.a”源程序,进行编译,直到编译无误。
(5)右击“Target 1”点击Options for Target‘Target 1’进行软件设置,选择Debug选项。点击“Use Keil Monitor-51 Driver进行硬件仿真。点击Settings按扭,选择串行口,设置波特率为38400,点击OK按扭。
(6)打开模块电源和总电源,点击开始调试按扭,点击RUN按钮 运行程序,观察LED数码管静态显示6以及动态循环显示0~9的情况。
任务二、2位LED数码管的显示
一、学习目标
1、学习2位LED数码管静态显示与动态显示的编程方法。
二、相关知识
1、两位LED数码管静态显示“34”。
①硬件电路如路3-2-1所示:
图3-2-1两位数码管显示电路
图中需注意上述两位LED数码管,他们的公共端通过限流电阻连接P2.0及P2.1。由P2.0与P2.1的信号来选通个位或十位LED数码管。
②程序流程如图3-2-2所示:
先选通个位LED |
送4的字形码 |
再选通十位LED |
送3的字形码 |
开 始 |
图3-2-2 程序流程图
③程序清单:“两位LED数码管静态显示3、4.a”
START: MOV DPTR, #TABLE ;存入查表启始地址
DISPLAY:MOV R3, #50 ; 设导通频率50次
LOOP1: MOV A, #4 ; 个位数显示
ACALL CHANG ; 调显示子程序
CLR P2.0 ;开个位显示
ACALL DLY10mS ; 调延时10ms程序
SETB P2.0 ; 关闭个位显示
MOV A, #3 ; 取十位数
ACALL CHANG ; 调取表显示子程序
CLR P2.1 ; 开十位显示
ACALL DLY10mS ; 调延时10ms程序 十位
SETB P2.1 ; 关闭十位显示
DJNZ R3, LOOP1 ; 100次没完,继续循环
JMP START ;
CHANG: MOVC A, @A+DPTR ;
MOV P0, A ;
RET ; 取表子程序
DLY10mS:MOV R6, #20 ;
D1: MOV R7, #248 ;
DJNZ R7, $ ;
DJNZ R6, D1 ; 延时10 m.S
RET ; 子程序
TABLE: DB 3FH, 06H, 5BH, 4FH
DB 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH
DB 39H, 5EH, 79H, 71H; 代码表
END ; 程序结束
P2.0=0时,与其相连的共阳极数码管显示器开始工作。P2.0=1时,与其相连的数码管显示器停止工作。同理,当P2.1=0时,与其相连的共阳极数码管显示器开始工作。P2.1=1时,与其相连的数码管显示器停止工作。
本程序采用了扫描方式,采描方式是指让两位数码管轮流工作,即个位显示时,十位关闭;十位显示时,个位关闭。这样做的目的一是省电,二是节省输出端口。在静态显示时,一个端口只能接一个数码管。而利用扫描方式一个端口可以接几个数码管,并由数码管公共阴极的P2.0与P2.1的信号来决定哪只数码管显示。
两位数码管是轮流工作的,可是人眼却感到同时在亮,这是由于人眼的视觉暂留,只要足够快,就能形成同时亮的感觉。
数码管显示的亮度及清晰度与每位点亮时间和每位显示的时间内轮换导通次数有关。
2、两位数码管动态循环显示00~99。
①硬件电路如路3-2-1所示:
②程序流程如图3-2-3所示:
图3-2-3 程序流程图
③程序清单:“两位数码管动态循环显示00~99.a”
START: MOV R0, #0 ;初始化计数器
MOV DPTR, #TABLE ;存入查表启始地址
LOOP: ACALL DISPLAY ; 调显示子程序
INC R0 ; 计数器加1
CJNE R0 ,#100, LOOP ; 没到100 循环
JMP START ; 到开始处
DISPLAY: MOV A, R0
MOV B, #10 ; 16进制换成10进制
DIV AB ; A÷B商存A,余数存B
MOV R1, A ; R1内存放十位数
MOV R2, B ; R2内存放个位数
MOV R3, #50 ; 设导通频率50次
LOOP1: MOV A, R2 ; 个位数显示
ACALL CHANG ; 调显示子程序
CLR P2.0 ;开个位显示
ACALL DLY10mS ; 调延时10ms程序
SETB P2.0 ; 关闭个位显示
MOV A, R1 ; 取十位数
ACALL CHANG ; 调取表显示子程序
CLR P2.1 ; 开十位显示
ACALL DLY10mS ; 调延时10ms程序 十位
SETB P2.1 ; 关闭十位显示
DJNZ R3, LOOP1 ; 100次没完,继续循环
RET ;
CHANG: MOVC A, @A+DPTR ;
MOV P0, A ;
RET ; 取表子程序
DLY10mS:MOV R6, #20 ;
D1: MOV R7, #248 ;
DJNZ R7, $ ;
DJNZ R6, D1 ; 延时10 m.S
RET ; 子程序
TABLE: DB 3FH, 06H, 5BH, 4FH
DB 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH
DB 39H, 5EH, 79H, 71H ; 代码表
END ; 程序结束
三、实践操作:
用THDPJ-3型单片机开发综合实验箱完成单片机软硬件系统的调试。
(1)使用单片机最小应用系统。打开该模块电源,用扁平数据线连接单片机P0口与八位动态数码管段码模块,用扁平数据线连接单片机P1口与八位动态数码管位码模块。
(2)将THKL-C51仿真器的USB接口接入电脑,目的是给仿真器提供电源,
此时仿真器上的POWER灯点亮。用串行数据通信线连接计算机与仿真器。
(3)把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
(4)打开KeiluVision2仿真软件,首先建立本项目的项目文件,接着分别添加“两位LED数码管静态显示“34”.a”以及“两位数码管动态循环显示00~99.a”源程序,进行编译,直到编译无误。
(5)右击“Target 1”点击Options for Target‘Target 1’进行软件设置,选择Debug选项。点击“Use Keil Monitor-51 Driver进行硬件仿真。点击Settings按扭,选择串行口,设置波特率为38400,点击OK按扭。
(6)打开模块电源和总电源,点击开始调试按扭,点击RUN按钮 运行程序,观察2位LED数码管静态显示34以及动态循环显示00~99的情况。
任务三、6位LED数码管的显示
一、学习目标
1、学习6位LED数码管静态显示的编程方法。
二、相关知识
1、6位LED数码管恒定显示“123456”
①硬件电路如图6-3-1所示:
图6-3-1 6位LED数码管恒定显示电路
单片机的P0端口通过限流电阻接6位LED数码管,每个数码管的段线并联在一起,由P0口控制。每个LED数码管的公共端(位选端)由P1.0、P1.1、P1.2、P1.3、P1.4、P1.5控制。当P1.5=0时,选通个位LED数码管,当P1.4=0时,选通十位LED数码管,以此类推,一直到当P1.0=0时,选通十万位LED数码管。
②程序流程如图6-3-2所示:
选通个位LED |
送6的字形码 |
选通十位LED |
送5的字形码 |
选通百位LED |
送4的字形码 |
选通千位LED |
送3的字形码 |
选通万位LED |
送2的字形码 |
选通十万位LED |
送1的字形码 |
开 始 |
图6-3-2 程序流程图
③程序清单:“6位LED数码管恒定显示“1、2、3、4、5、6.a”
START: MOV DPTR, #TABLE ;存入查表启始地址
DISPLAY:MOV R3, #50 ; 设导通频率50次
LOOP1: MOV A, #6 ; 个位数显示
ACALL CHANG ; 调显示子程序
CLR P1.5 ;开个位显示
ACALL DLY10mS ; 调延时10ms程序
SETB P1.5 ; 关闭个位显示
MOV A, #5 ; 取十位数
ACALL CHANG ; 调取表显示子程序
CLR P1.4 ; 开十位显示
ACALL DLY10mS ; 调延时10ms程序 十位
SETB P1.4 ; 关闭十位显示
MOV A, #4 ; 取百位数
ACALL CHANG ; 调取表显示子程序
CLR P1.3 ; 开百位显示
ACALL DLY10mS ; 调延时10ms程序 百位
SETB P1.3 ; 关闭百位显示
MOV A, #3 ; 取千位数
ACALL CHANG ; 调取表显示子程序
CLR P1.2 ; 开千位显示
ACALL DLY10mS ; 调延时10ms程序 千位
SETB P1.2 ; 关闭千位显示
MOV A, #2 ; 取万位数
ACALL CHANG ; 调取表显示子程序
CLR P1.1 ; 开万位显示
ACALL DLY10mS ; 调延时10ms程序 万位
SETB P1.1 ; 关闭万位显示
MOV A, #1 ; 取十万位数
ACALL CHANG ; 调取表显示子程序
CLR P1.0 ; 开十万位显示
ACALL DLY10mS ; 调延时10ms程序 十万位
SETB P1.0 ; 关闭十万位显示
DJNZ R3, LOOP1 ; 100次没完,继续循环
JMP START ;
CHANG: MOVC A, @A+DPTR ;
MOV P0, A ;
RET ; 取表子程序
DLY10mS:MOV R6, #20 ;
D1: MOV R7, #248 ;
DJNZ R7, $ ;
DJNZ R6, D1 ; 延时10 m.S
RET ; 子程序
TABLE: DB 3FH, 06H, 5BH, 4FH
DB 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH
DB 39H, 5EH, 79H, 71H ; 代码表
END ; 程序结束
三、实践操作:
用THDPJ-3型单片机开发综合实验箱完成单片机软硬件系统的调试。
(1)使用单片机最小应用系统。打开该模块电源,用扁平数据线连接单片机P0口与八位动态数码管段码模块,用扁平数据线连接单片机P1口与八位动态数码管位码模块。
教学设计:LED数码管的显示
任务一、1位LED数码管的显示
一、学习目标
1、了解七段LED数码管的结构、分类以及数码管的显示码。
2、学习1位LED数码管静态显示与动态显示的编程方法。
二、相关知识
1、七段LED数码管:
LED数码管是单片机控制系统中最常见的显示器件之一,一般用来显示处理结果以及输入输出信号的状态。
①LED数码管的结构:
LED数码管是由8个发光二极管中的7个长条形发光二极管(俗称7笔段)
按a、b、c、d、e、f、g顺序组成“8”字形,另一个点形的发光二极管dp放在右下方,用来显示小数点,如图3-1-1(a)所示。只要控制7笔段按一定的要求亮与灭,就能显示出十六进制0~F。
(a) (b) (c)
图3-1-1 LED数码管的结构 3-1-2 LED引脚
LED数码管按内部连接方式又分为“共阳极数码管”和“共阴极数码管”两种。若8个发光二极管的阳极连在一起接电源正极为共阳极数码管,如图3-1-1(b)所示。若8个发光二极管的阴极连在一起接地则为共阴极数码管,如图3-1-1(c)图所示。下文如不特别说明,所用LED数码管都为共阴极数码管。
共阴极数码管的引脚如图3-1-2所示,共有10只引脚,其中3、8引脚连通,作为公共端接地。
②数码管显示码:
数码管显示码是表述二进制数与数码管所显示字符的对应关系的。如表
3-1-3所示。
表3-1-3数码管显示码
2、一位LED数码管静态显示“6”
①硬件电路如图3-1-4所示。
图3-1-4 1位LED数码管显示电路图
为了保证LED数码管的正常运行,必须在连接P0口的基础上,各位串联一限流电阻R,阻值可取360。LED数码管的公共端通过限流电阻接P1.0,由P1.0的信号来选通LED数码管,当P1.0=0数码管选通,当P1.0=1数码管未选通。
②程序流程图如图3-1-5所示:
图3-1-5 程序流程图
③程序清单:“一位LED数码管静态显示6.a”
START: CLR P1.0 ; 选通个位LED数码管
MOV DPTR, #TABLE ; 存入表的起始地址
MOV A, #6 ; 将欲显示的数字6存入A
MOVC A, @A+DPTR ; 按地址取代码并存入A
MOV P0, A ; 将代码送P0转变数字显示
SJMP $ ; 程序运行在当前状态
TABLE: DB 3FH, 06H, 5BH, 4FH
DB 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH
DB 39H, 5EH, 79H, 71H ;代码表
END
3、一位LED数码管动态循环显示0~9。
①硬件电路如图3-1-4所示。
②程序流程图:
图3-1-6 程序流程图
③程序清单:“一位LED数码管动态循环显示0~9.a”
START: CLR P1.0 ;选通个位LED数码管
MOV DPTR, #TABLE ; 存表
MOV R0, #0 ; 设定初始值
LOOP : MOV A, R0
MOVC A, @A+DPTR ; 取表代码
MOV P0, A ; 送P0输出
ACALL DLY1S ; 调延时程序 存表取表
INC R0 ; R0值 加1
CJNE R0, #10 , LOOP ; 不是10,循环
JMP START ; 重新开始 判断循环
DLY1S: MOV R5, #50 ;
D1: MOV R6, #100 ;
D2: MOV R7, #100 ;
DJNZ R7, $ ;
DJNZ R6, D2 ;
DJNZ R5, D1 ; 1秒延时
RET ; 子程序
TABLE: DB 3FH, 06H, 5BH, 4FH
DB 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH
DB 39H, 5EH, 79H, 71H ; 代码表
END ; 程序结束
三、实践操作:
用THDPJ-3型单片机开发综合实验箱完成单片机软硬件系统的调试。
(1)使用单片机最小应用系统。打开该模块电源,用扁平数据线连接单片机P0口与八位动态数码管段码模块,用扁平数据线连接单片机P1口与八位动态数码管位码模块。
(2)将THKL-C51仿真器的USB接口接入电脑,目的是给仿真器提供电源,
此时仿真器上的POWER灯点亮。用串行数据通信线连接计算机与仿真器。
(3)把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
(4)打开KeiluVision2仿真软件,首先建立本项目的项目文件,接着分别添加“一位LED数码管静态显示6.a”以及“一位LED数码管动态循环显示0~9.a”源程序,进行编译,直到编译无误。
(5)右击“Target 1”点击Options for Target‘Target 1’进行软件设置,选择Debug选项。点击“Use Keil Monitor-51 Driver进行硬件仿真。点击Settings按扭,选择串行口,设置波特率为38400,点击OK按扭。
(6)打开模块电源和总电源,点击开始调试按扭 ,点击RUN按钮 运行程序,观察LED数码管静态显示6以及动态循环显示0~9的情况。
任务二、2位LED数码管的显示
一、学习目标
1、学习2位LED数码管静态显示与动态显示的编程方法。
二、相关知识
1、两位LED数码管静态显示“34”。
①硬件电路如路3-2-1所示:
图3-2-1两位数码管显示电路
图中需注意上述两位LED数码管,他们的公共端通过限流电阻连接P2.0及P2.1。由P2.0与P2.1的信号来选通个位或十位LED数码管。
②程序流程如图3-2-2所示:
先选通个位LED |
送4的字形码 |
再选通十位LED |
送3的字形码 |
开 始 |
图3-2-2 程序流程图
③程序清单:“两位LED数码管静态显示3、4.a”
START: MOV DPTR, #TABLE ;存入查表启始地址
DISPLAY:MOV R3, #50 ; 设导通频率50次
LOOP1: MOV A, #4 ; 个位数显示
ACALL CHANG ; 调显示子程序
CLR P2.0 ;开个位显示
ACALL DLY10mS ; 调延时10ms程序
SETB P2.0 ; 关闭个位显示
MOV A, #3 ; 取十位数
ACALL CHANG ; 调取表显示子程序
CLR P2.1 ; 开十位显示
ACALL DLY10mS ; 调延时10ms程序 十位
SETB P2.1 ; 关闭十位显示
DJNZ R3, LOOP1 ; 100次没完,继续循环
JMP START ;
CHANG: MOVC A, @A+DPTR ;
MOV P0, A ;
RET ; 取表子程序
DLY10mS:MOV R6, #20 ;
D1: MOV R7, #248 ;
DJNZ R7, $ ;
DJNZ R6, D1 ; 延时10 m.S
RET ; 子程序
TABLE: DB 3FH, 06H, 5BH, 4FH
DB 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH
DB 39H, 5EH, 79H, 71H; 代码表
END ; 程序结束
P2.0=0时,与其相连的共阳极数码管显示器开始工作。P2.0=1时,与其相连的数码管显示器停止工作。同理,当P2.1=0时,与其相连的共阳极数码管显示器开始工作。P2.1=1时,与其相连的数码管显示器停止工作。
本程序采用了扫描方式,采描方式是指让两位数码管轮流工作,即个位显示时,十位关闭;十位显示时,个位关闭。这样做的目的一是省电,二是节省输出端口。在静态显示时,一个端口只能接一个数码管。而利用扫描方式一个端口可以接几个数码管,并由数码管公共阴极的P2.0与P2.1的信号来决定哪只数码管显示。
两位数码管是轮流工作的,可是人眼却感到同时在亮,这是由于人眼的视觉暂留,只要足够快,就能形成同时亮的感觉。
数码管显示的亮度及清晰度与每位点亮时间和每位显示的时间内轮换导通次数有关。
2、两位数码管动态循环显示00~99。
①硬件电路如路3-2-1所示:
②程序流程如图3-2-3所示:
图3-2-3 程序流程图
③程序清单:“两位数码管动态循环显示00~99.a”
START: MOV R0, #0 ;初始化计数器
MOV DPTR, #TABLE ;存入查表启始地址
LOOP: ACALL DISPLAY ; 调显示子程序
INC R0 ; 计数器加1
CJNE R0 ,#100, LOOP ; 没到100 循环
JMP START ; 到开始处
DISPLAY: MOV A, R0
MOV B, #10 ; 16进制换成10进制
DIV AB ; A÷B商存A,余数存B
MOV R1, A ; R1内存放十位数
MOV R2, B ; R2内存放个位数
MOV R3, #50 ; 设导通频率50次
LOOP1: MOV A, R2 ; 个位数显示
ACALL CHANG ; 调显示子程序
CLR P2.0 ;开个位显示
ACALL DLY10mS ; 调延时10ms程序
SETB P2.0 ; 关闭个位显示
MOV A, R1 ; 取十位数
ACALL CHANG ; 调取表显示子程序
CLR P2.1 ; 开十位显示
ACALL DLY10mS ; 调延时10ms程序 十位
SETB P2.1 ; 关闭十位显示
DJNZ R3, LOOP1 ; 100次没完,继续循环
RET ;
CHANG: MOVC A, @A+DPTR ;
MOV P0, A ;
RET ; 取表子程序
DLY10mS:MOV R6, #20 ;
D1: MOV R7, #248 ;
DJNZ R7, $ ;
DJNZ R6, D1 ; 延时10 m.S
RET ; 子程序
TABLE: DB 3FH, 06H, 5BH, 4FH
DB 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH
DB 39H, 5EH, 79H, 71H ; 代码表
END ; 程序结束
三、实践操作:
用THDPJ-3型单片机开发综合实验箱完成单片机软硬件系统的调试。
(1)使用单片机最小应用系统。打开该模块电源,用扁平数据线连接单片机P0口与八位动态数码管段码模块,用扁平数据线连接单片机P1口与八位动态数码管位码模块。
(2)将THKL-C51仿真器的USB接口接入电脑,目的是给仿真器提供电源,
此时仿真器上的POWER灯点亮。用串行数据通信线连接计算机与仿真器。
(3)把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
(4)打开KeiluVision2仿真软件,首先建立本项目的项目文件,接着分别添加“两位LED数码管静态显示“34”.a”以及“两位数码管动态循环显示00~99.a”源程序,进行编译,直到编译无误。
(5)右击“Target 1”点击Options for Target‘Target 1’进行软件设置,选择Debug选项。点击“Use Keil Monitor-51 Driver进行硬件仿真。点击Settings按扭,选择串行口,设置波特率为38400,点击OK按扭。
(6)打开模块电源和总电源,点击开始调试按扭 ,点击RUN按钮 运行程序,观察2位LED数码管静态显示34以及动态循环显示00~99的情况。
任务三、6位LED数码管的显示
一、学习目标
1、学习6位LED数码管静态显示的编程方法。
二、相关知识
1、6位LED数码管恒定显示“123456”
①硬件电路如图6-3-1所示:
图6-3-1 6位LED数码管恒定显示电路
单片机的P0端口通过限流电阻接6位LED数码管,每个数码管的段线并联在一起,由P0口控制。每个LED数码管的公共端(位选端)由P1.0、P1.1、P1.2、P1.3、P1.4、P1.5控制。当P1.5=0时,选通个位LED数码管,当P1.4=0时,选通十位LED数码管,以此类推,一直到当P1.0=0时,选通十万位LED数码管。
②程序流程如图6-3-2所示:
选通个位LED |
送6的字形码 |
选通十位LED |
送5的字形码 |
选通百位LED |
送4的字形码 |
选通千位LED |
送3的字形码 |
选通万位LED |
送2的字形码 |
选通十万位LED |
送1的字形码 |
开 始 |
图6-3-2 程序流程图
③程序清单:“6位LED数码管恒定显示“1、2、3、4、5、6.a”
START: MOV DPTR, #TABLE ;存入查表启始地址
DISPLAY:MOV R3, #50 ; 设导通频率50次
LOOP1: MOV A, #6 ; 个位数显示
ACALL CHANG ; 调显示子程序
CLR P1.5 ;开个位显示
ACALL DLY10mS ; 调延时10ms程序
SETB P1.5 ; 关闭个位显示
MOV A, #5 ; 取十位数
ACALL CHANG ; 调取表显示子程序
CLR P1.4 ; 开十位显示
ACALL DLY10mS ; 调延时10ms程序 十位
SETB P1.4 ; 关闭十位显示
MOV A, #4 ; 取百位数
ACALL CHANG ; 调取表显示子程序
CLR P1.3 ; 开百位显示
ACALL DLY10mS ; 调延时10ms程序 百位
SETB P1.3 ; 关闭百位显示
MOV A, #3 ; 取千位数
ACALL CHANG ; 调取表显示子程序
CLR P1.2 ; 开千位显示
ACALL DLY10mS ; 调延时10ms程序 千位
SETB P1.2 ; 关闭千位显示
MOV A, #2 ; 取万位数
ACALL CHANG ; 调取表显示子程序
CLR P1.1 ; 开万位显示
ACALL DLY10mS ; 调延时10ms程序 万位
SETB P1.1 ; 关闭万位显示
MOV A, #1 ; 取十万位数
ACALL CHANG ; 调取表显示子程序
CLR P1.0 ; 开十万位显示
ACALL DLY10mS ; 调延时10ms程序 十万位
SETB P1.0 ; 关闭十万位显示
DJNZ R3, LOOP1 ; 100次没完,继续循环
JMP START ;
CHANG: MOVC A, @A+DPTR ;
MOV P0, A ;
RET ; 取表子程序
DLY10mS:MOV R6, #20 ;
D1: MOV R7, #248 ;
DJNZ R7, $ ;
DJNZ R6, D1 ; 延时10 m.S
RET ; 子程序
TABLE: DB 3FH, 06H, 5BH, 4FH
DB 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH
DB 39H, 5EH, 79H, 71H ; 代码表
END ; 程序结束
三、实践操作:
用THDPJ-3型单片机开发综合实验箱完成单片机软硬件系统的调试。
(1)使用单片机最小应用系统。打开该模块电源,用扁平数据线连接单片机P0口与八位动态数码管段码模块,用扁平数据线连接单片机P1口与八位动态数码管位码模块。
(2)将THKL-C51仿真器的USB接口接入电脑,目的是给仿真器提供电源,
此时仿真器上的POWER灯点亮。用串行数据通信线连接计算机与仿真器。
(3)把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
(4)打开KeiluVision2仿真软件,首先建立本项目的项目文件,接着分别添加“6位LED数码管恒定显示“1、2、3、4、5、6.a”源程序,进行编译,直到编译无误。
(5)右击“Target 1”点击Options for Target‘Target 1’进行软件设置,选择Debug选项。点击“Use Keil Monitor-51 Driver进行硬件仿真。点击Settings按扭,选择串行口,设置波特率为38400,点击OK按扭。
(6)打开模块电源和总电源,点击开始调试按扭 ,点击RUN按钮 运行程序,观察6位LED数码管静态显示123456的情况。
(2)将THKL-C51仿真器的USB接口接入电脑,目的是给仿真器提供电源,
此时仿真器上的POWER灯点亮。用串行数据通信线连接计算机与仿真器。
(3)把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
(4)打开KeiluVision2仿真软件,首先建立本项目的项目文件,接着分别添加“6位LED数码管恒定显示“1、2、3、4、5、6.a”源程序,进行编译,直到编译无误。
(5)右击“Target 1”点击Options for Target‘Target 1’进行软件设置,选择Debug选项。点击“Use Keil Monitor-51 Driver进行硬件仿真。点击Settings按扭,选择串行口,设置波特率为38400,点击OK按扭。
(6)打开模块电源和总电源,点击开始调试按扭,点击RUN按钮 运行程序,观察6位LED数码管静态显示123456的情况。