静态数码管显示程序

合集下载

实验4 LED数码管静态显示电路的设计与仿真

实验4  LED数码管静态显示电路的设计与仿真

实验项目四 LED数码管静态显示电路的设计与仿真[实验目的]1.掌握LED数码管编码方法2.掌握LED数码管静态显示电路的设计3.掌握对LED数码管静态显示的控制方法[实验原理][实验仪器]PC机一台[Proteus用到器件的关键词]单片机(at89c52)、数码管(7seg-com-cathode)、排阻(respack-7)[实验内容与步骤]1.用Proteus软件设计出LED数码管显示电路原理图。

2.由于单片机P0口内部无上拉电阻,故使用时要外接上拉电阻,阻值为10KΩ。

3.用Keil编写程序让第二个数码管从0显示到F,然后再让从0开始显示;每当第二个数码管显示到F后,第一个数码管显示值加1一次,最后调试程序、编译后生成HEX文件。

4.将HEX文件装载到MCU AT89C52中,单击Start按钮开始动态仿真。

[实验数据记录];******两位数码管静态显示程序*******;ORG 0000HLJMP MAINORG 0050H MAIN: MOV R3,#0MOV P0,#3FHLP2: MOV DPTR,#0200H LP1: MOVC A,@A+DPTRMOV P2,ALCALL DELAYMOV R2,ACLR AINC DPTRCJNE R2,#6FH,LP1INC R3MOV DPL,R3MOVC A,@A+DPTRMOV P0,ACLR ACJNE R3,#10,LP2AJMP MAIN DELAY: MOV R0,#0FFHDL2: MOV R1,#0FFHDL1: NOPNOPNOPDJNZ R1,DL1DJNZ R0,DL2RETORG 0200HTAB: DB 3FH;0 DB 06H;1 DB 5BH;2 DB 4FH;3 DB 66H;4 DB 6DH;5 DB 7DH;6 DB 07H;7 DB 7FH;8 DB 6FH;9END[实验数据处理][实验结果及讨论]。

嵌入式技术与应用开发项项目三数码管显示设计与实现

嵌入式技术与应用开发项项目三数码管显示设计与实现
通常用的位段的编码规则如下图所示。 D7 D6 D5 D4 D3 D2 D1 D0 dp g f e d c b a
共阴极和共阳极数码管的字型编码是不同的,对于同一个字符, 共阴极和共阳极的字型编码是反相的。
认识数码管
数码管的显示方法:有静态显示和动态显示两种方法。
1. 静态显示
静态显示是指数码管显示某一字符时,相应的LED恒定导通或恒定截 止。
PC13_RTC
PC14-OSC32_IN
PB0
PC15-OSC32_OUT
PB1
PB2
PB3
OSCIN_PD0
PB4
OSCOUT_PD1
PB5
PD2
PB6
PB7
PB8
PB9
PB10
PB11
VBAT
PB12
PB13
PB14
PB15
BOOT0
7
8 9 10 11 24 25 37 38 39 40 51 52 53 2 3 4
① 代码区(0x0000_0000~0x1FFF_FFFF) 程序可以在代码区、内部SRAM区以及外部RAM区中执行,通常是把程序放
到代码区,从而使取指和数据访问各自使用自己的总线(指令总线与数据总 线是分开的)。 ② SRAM区(0x2000_0000~0x3FFF_FFFF) 这个区域用于片内SRAM,是用于让芯片制造商连接片上的SRAM,这个区通 过系统总线来访问。 在SRAM区的底部,还有一个 1MB的位带区,这个位带区还有一个对应的 32MB的“位带别名(alias)区”。也就是说,位带别名区里面的每个字对应 位带区的一个bit位,每个位变量是32位(既1个字4个字节)。 位带操作只适用于数据访问,不适用于取指。通过位带的功能,我们访问一 个bit位,可以从位带别名区中,像访问普通内存一样操作。

基础实验(数码管显示)含代码

基础实验(数码管显示)含代码

实验一基础实验(数码管显示)一、实验内容使用MCS-51汇编语言编写程序,完成如下功能:1. 使用三个数码管显示十进制数值(001~999,可任意设置);2. 每隔1秒,该数值自动减一,直到归零;3. 归零后的下一秒,显示一个新的十进制数值(001~999,可任意设置);4. 每隔1秒,新数值继续自动减一,直到再次归零;5. 重新执行步骤1,循环往复。

6. 当开关S1按下时,暂停计数;S1松开时,恢复计数。

二、数码管显示原理如图所示,三段式数码管由三片74HC164级联控制三个数码管的显示,其中使用单片机P4.5作为模拟串口数据,使用P4.4模拟串口时钟,CLR端接高电平。

使用上一个74HC164的Q7作为下一个74HC164的输入端。

要想输出一个字形码,就需要从高位到低位依次向移位寄存器输出8个比特。

移位寄存器的数据线和时钟线分别接到单片机的P4.5和P4.4管脚,可以使用MCS-51里面的位操作指令进行输出。

连续输出3个字形,24个bit之后,欲显示的字形将稳定地显示在数码管上,程序可以转而执行其他工作。

三、实验流程图1.主程序流程图开始初始化定义计数器R6,R5,R4定义码表TAB 0-9根据R6偏移从TAB取数送到算术寄存器A中调用SHOW子程序根据R5偏移从TAB取数送入算术寄存器A中调用SHOW子程序根据R4偏移从TAB取数送入算术寄存器A中调用SHOW子程序调用延时子程序S1按下?是循环延时否R6减一即个位减一R6为-1?是R5减一即十位减一重新初始化R6否R5为-1?否是R4减一即百位减一重新初始化R5R4为-1?重新初始化R4否2.显示子程序SHOW 流程图3.延时子程序DELAY 流程图子程序SHOW 开始R0初始化计数时钟置0右移AC 标志位送入DATA时钟置1,上跳R0=0?是RET否子程序DELAY 开始RI 初始化为80R3减一R3为0?是R2减一R2为0?是R1减一是R1为0?否R2初始化为200R3初始化为250否否是四、程序源代码 0000H2.LJMP START 0050H4.START:5.P4 EQU 0C0H6.P4SW EQU 0BBH7.CLK EQU P4.48.DAT EQU P4.59.SW EQU P3.610.MOV P4SW, #70H11.LP:12. MOV R6, #913. MOV R5, #914. MOV R4, #915.LOOP:16. MOV DPTR, #TAB17. MOV A,R618. MOV DPTR,#TAB19. MOVC A,@A+DPTR20. LCALL SHOW21.22. MOV A,R523. MOV DPTR,#TAB24. MOVC A,@A+DPTR25. LCALL SHOW26.27. MOV A,R428. MOV DPTR,#TAB29. MOVC A,@A+DPTR30. LCALL SHOW31. LCALL DELAY32.33.PAUSE:34. NOP35. JNB SW,PAUSE36. DEC R637. CJNE R6,#-1,LOOP38.39. DEC R540. MOV R6,#941. CJNE R5,#-1,LOOP42. DEC R443. MOV R5,#944. CJNE R4,#-1,LOOP45. MOV R4,#946. LJMP LOOP47.48.SHOW:49. MOV R0,#850.SLP:51. CLR CLK52. RLC A53. MOV DAT,C54. SETB CLK55. DJNZ R0,SLP56. RET57.58.DELAY:59. MOV R1,#8060.SD:61. MOV R2,#20062.SD1:63. MOV R3,#25064.SD2:65. DJNZ R3,SD266. DJNZ R2,SD167. DJNZ R1,SD68.RET69.70.TAB:71. DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H72.73.74.END75.TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H五、思考题1.MCS51中有哪些可存取的单元,存取方式如何?它们之间的区别和联系有哪些?答:MCS51单片机中,包含程序存储器ROM、数据存储器RAM和特殊功能寄存器(SFRs),其中数据存储器还包含内部RAM,内部扩展RAM和片外RAM。

实验二 数码管显示

实验二 数码管显示

实验二数码管显示本实验的目的是掌握数码管的工作原理与使用,实现数码管的静、动态显示。

静态数码管我们先看看什么是数码管,上图就是各种长相各种样子的数码管了,肯定很眼熟了吧。

不管将几位数码管连在一起,数码管的显示原理都是一样的,都是靠点亮内部的发光二极管来发光,下面就来我们讲解一个数码管是如何亮起来的。

数码管内部电路如下图所示,从右图可看出,一位数码管的引脚是10个,显示一个8字需要7个小段,另外还有一个小数点,所以其内部一共有8个小的发光二极管,最后还有一个公共端,生产商为了封装统一,单位数码管都封装10个引脚,其中第3和第8引脚是连接在一起的。

而它们的公共端又可分为共阳极和共阴极,中间图为共阴极内部原理图,右图为共阳极内部原理图。

上图展出了常用的两种数码管的引脚排列和内部结构。

总所周知,点亮发光二极管就是要给予它足够大的正向压降。

所以点亮数码管其实也就是给它内部相应的发光二极管正向压降。

如上图左(一共a、b、c、d、e、f、g、DP 八段),如果要显示“1”则要点亮b、c 两段LED;显示“A”则点亮a、b、c、e、f、g 这六段LED;我们还知道,既然LED 加载的是正向压降,它的两端电压必然会有高低之分:如果八段LED 电压高的一端为公共端,我们称之为共阳极数码管(如上图中);如果八段LED 电压低的一段为公共端,则称之为共阴极数码管(上图右)。

所以,要点亮共阳极数码管,则要在公共端给予高于非公共端的电平;反之点亮共阴极数码管,则要在非公共端给予较高电平。

对共阴极数码来说,其8个发光二极管的阴极在数码管内部全部连接在一起,所以称“共阴”,而它们的阳极是独立的,通常在设计电路时一般把阴极接地。

当我们给数码管的任意一个阳极加一个高电平时,对应的这个发光二极管就点亮了。

如果想要显示出一个8字,并且把右下角的小数点也点亮的话,可以给8个阳极全部送高电平,如果想让它显示出一个0字,那么我们可以除了给第“g, dp”这两位送低电平外,其余引脚全部都送高电平,这样它就显示出0字了。

数码管显示(全面)

数码管显示(全面)

• 程序设计内容
由于显示的数字0-9的字形码没有规律可循,只能采用 查表的方式来完成P0口对数码管的控制。方法是找出 共阴极数码管显示0-9的字形码,按着数字0-9的顺序, 把这十个字形码放入数组table[]中。
• C语言源程序 • 调试与仿真
4.3 I/O口应用实例与仿真
例4.6 动态数码管显示的proteus仿真及C语言 程序设计
4.3 I/O口应用实例与仿真
• 程序设计内容
(1)动态扫描方法:动态扫描采用各数码管循环轮流 显示的方法,本例中,先让左边第一位数码管显示数 字“1”,延时一定时间后,第二位显示“2”,以此类 推,到第五位显示“5”后,又从“1”开始循环显示。 当循环显示频率较高时,利用人眼的暂留特性,我们 看到这五位数码管仿佛在同时显示,而看不出闪烁显 示现象。这种显示需要一个接口完成字形码的输出 (字形选择),另一接口完成各数码管的轮流点亮 (数位选择)。需要注意一点,由于电路的特性,在 点亮每一位数码管之前,一定要对整个数码管清屏 (场消隐),即让所有位选信号都处于不被选中状态。
g f GND a b a a f e d g b c dp b c d e f g dp a b c d e f g dp
+5V
·
e d GND c dp
(a)
共阴极
(b)
共阳极
使用LED显示器时,要注意区分这两种不同的接法。为了显 示数字或字符,必须对数字或字符进行编码。七段数码管加上一 个小数点,共计8段。因此为LED显示器提供的编码正好是一个字 节。TX-1B实验板用共阴LED显示器,根据电路连接图显示16进制
数码管是如何显示出字符的 数码管静态显示与动态显示原理
显示器及其接口

实验28255七段数码管静动态显示

实验28255七段数码管静动态显示

微机实验报告书同组名单:实验日期:2012.12.21实验题目:七段数码管的静态显示实验目标:掌握数码管显示数字的原理(功能:键盘输入一位十进制数字(0~9),用七段数码管显示。

)解题思路:1.静态显示:按图10 (a)连接好电路,将8255的A口 PAO-PA鲂别与七段数码管的断码驱动输入端a-g项链,位码驱动输入端S1接+5V, SO dp2.动态显示:按图10 (b)连接好电路,七段数码管段码连接不变,位码驱动输入端S1, S0接8255C口的PC1, PCQ编程在两个数码管上显示“56” 程序框图:静态显示见图11( a),动态显示见图11 (b)。

学号:_______ 姓名: 班级:________S 10琵接电路图图11流程图关键问题分析(静态显示):1、按键判断和程序结束判断按键来说,由于程序中必须输入数字,所以没有必要对是否按键进行判断, 只需要判断按键是否在0-9之间即可。

用以下程序即可:条件转移指令,即在小于时转移 条件转移指令,即在大于时转移程序中还要用到“ cmp'即比较指令,用来比较输入数与0、9的大小关系 程序结束:如若输入的数字小于0或者大于9,必须直接跳出程序,即结束指令必 须单独占用一个程序段,这样,程序顺序执行完毕也可以顺利返回DOS 2、七段码显示。

始丿将所得字符的 ASCII 码减如H1查表求出对应的盅码将段码自8药5A 口输出(b)cmp al,'0'jl exit; jl,cmp al,'9' 从键盘接收字符实验指导书中给出了七段码的字型代码。

这样一来, 七段码的显示只需要用换码 指令“XLAT 便可以轻松实现。

前提是必须将七段码字型编成数码表以字符串的 形式写进程序中。

3、数字键ASCII 码与数值间的转换。

因为0的ASCII 码为30H,所以数字键ASCII 码与数值间的转换时只需减去30F 即可, 可用下列语句实现:sub al,30h 程序清单:静态显示:data segmentioport equ 0c800h-0280hio8255aequ ioport+288h io8255b equ ioport+28bhled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhmesg1 db dataends codesegment0dh,0ah,'Input a num (0--9h):',0dh,0ah,'$' assume cs:code,ds:datastart: mov ax,data mov ds,ax mov dx,io8255b从键盘接收字符 是否小于 0 如若小于 0,则跳转到 exit 退岀程序 是否大于 9 如若大于 9,则跳转到 exit 退岀程序 将所得字符的ASCII 码减30H,数字键ascii 码同数值转换 为数码表的起始地址 求岀相应的段码 从8255的A 口输岀 转 zbymov al,80hout dx,al ;10000000B ,控制字PA 以方式0输岀 使8255的A 口为输岀方式zby: mov dx,offset mesg1 ;mov ah,09h int 21h movah,01 ;int 21h cmp al,'0' ;jl exit ;cmp al,'9'; jg exit ;sub al,30h ; movbx,offset led ;bxxlat ;mov dx,io8255a ; outdx,al jmp zby ;exit: mov ah,4ch ; 显示提示信息 返回 DOSint 21h code ends end start动态显示:data segmentioport equ 0c800h-0280hio8255a equ ioport+28ahio8255b equ ioport+28bhio8255c equ ioport+288hled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ; 段码buffer1 db 5,6 ; 存放要显示的个位和十位bz dw ? ; 位码data endscode segmentassume cs:code,ds:datastart: mov ax,data mov ds,ax mov dx,io8255bmov al,80h ;10000000B out dx,almov di,offset buffer1 ;loop2: mov bh,02 zby: mov byte ptr bz,bhpush di dec di add di, bz movbl,[di] ;bl pop di mov al,0 movdx,io8255a out dx,al mov bh,0mov si,offset led ; add si,bx ;mov al,byte ptr [si] movdx,io8255c ;out dx,al mov al,byte ptr bz ;mov dx,io8255a out dx,al movcx,3000delay: loop delay ;,控制字PA以方式0输岀设di 为显示缓冲区为要显示的数置led 数码表偏移地址为SI 求岀对应的led 数码自8255A的口输岀使相应的数码管亮延时将8255设为A口输岀mov bh,byte ptr bzshr bh,1jnz zbymov dx,0ffhmov ah,06int 21hje loop2 ; 有键按下则退出mov dx,io8255amov al,0 ; 关掉数码管显示out dx,almov ah,4ch ; 返回int 21hcode endsend start运行结果:静态显示:在键盘上输入一个 0-9 的任意数字,会显示在数码管上。

实验2:8255七段数码管静动态显示

实验2:8255七段数码管静动态显示

微机实验报告书学号:姓名:班级:同组名单:实验日期: 2012.12.21实验题目:七段数码管的静态显示实验目标:掌握数码管显示数字的原理(功能:键盘输入一位十进制数字(0~9),用七段数码管显示。

)解题思路:1.静态显示:按图 10(a)连接好电路,将8255的A口PA0-PA6分别与七段数码管的断码驱动输入端a-g项链,位码驱动输入端S1接+5V,S0、dp接地。

编程从键盘输入一位十进制数字,在七段数码管上显示出来。

2.动态显示:按图10(b)连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0接8255C口的PC1,PC0。

编程在两个数码管上显示“56”。

程序框图:静态显示见图11(a),动态显示见图11(b)。

关键问题分析(静态显示):1、按键判断和程序结束判断按键来说,由于程序中必须输入数字,所以没有必要对是否按键进行判断,只需要判断按键是否在0-9之间即可。

用以下程序即可:cmp al,'0'jl exit ; jl,条件转移指令,即在小于时转移cmp al,'9'jg exit ;jg, 条件转移指令,即在大于时转移程序中还要用到“cmp”即比较指令,用来比较输入数与0、9的大小关系。

程序结束:如若输入的数字小于0或者大于9,必须直接跳出程序,即结束指令必须单独占用一个程序段,这样,程序顺序执行完毕也可以顺利返回DOS。

2、七段码显示。

实验指导书中给出了七段码的字型代码。

这样一来,七段码的显示只需要用换码指令“XLAT”便可以轻松实现。

前提是必须将七段码字型编成数码表以字符串的形式写进程序中。

3、数字键ASCII码与数值间的转换。

因为0的ASCII码为30H,所以数字键ASCII码与数值间的转换时只需减去30H即可,可用下列语句实现:sub al,30h程序清单:静态显示:data segmentioport equ 0c800h-0280hio8255a equ ioport+288hio8255b equ ioport+28bhled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhmesg1 db 0dh,0ah,'Input a num (0--9h):',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8255b ;使8255的A口为输出方式mov al,80h ;10000000B,控制字PA以方式0输出out dx,alzby: mov dx,offset mesg1 ;显示提示信息mov ah,09hint 21hmov ah,01 ;从键盘接收字符int 21hcmp al,'0' ;是否小于0jl exit ;如若小于0,则跳转到exit退出程序cmp al,'9' ;是否大于9jg exit ; 如若大于9,则跳转到exit退出程序sub al,30h ;将所得字符的ASCII码减30H,数字键ascii码同数值转换mov bx,offset led ;bx为数码表的起始地址xlat ;求出相应的段码mov dx,io8255a ;从8255的A口输出out dx,aljmp zby ;转zbyexit: mov ah,4ch ;返回DOSint 21hcode endsend start动态显示:data segmentioport equ 0c800h-0280hio8255a equ ioport+28ahio8255b equ ioport+28bhio8255c equ ioport+288hled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 5,6 ;存放要显示的个位和十位bz dw ? ;位码data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8255b ;将8255设为A口输出mov al,80h ;10000000B,控制字PA以方式0输出out dx,almov di,offset buffer1 ;设di为显示缓冲区loop2: mov bh,02zby: mov byte ptr bz,bhpush didec diadd di, bzmov bl,[di] ;bl为要显示的数pop dimov al,0mov dx,io8255aout dx,almov bh,0mov si,offset led ;置led数码表偏移地址为SIadd si,bx ;求出对应的led数码mov al,byte ptr [si]mov dx,io8255c ;自8255A的口输出out dx,almov al,byte ptr bz ;使相应的数码管亮mov dx,io8255aout dx,almov cx,3000delay: loop delay ;延时mov bh,byte ptr bzshr bh,1jnz zbymov dx,0ffhmov ah,06int 21hje loop2 ;有键按下则退出mov dx,io8255amov al,0 ;关掉数码管显示out dx,almov ah,4ch ;返回int 21hcode endsend start运行结果:静态显示:在键盘上输入一个0-9的任意数字,会显示在数码管上。

静态数码管显示程序

静态数码管显示程序

/************************************************************************** ****** 实验名 : 静态数码管实验* 使用的IO : 数码管使用P0,键盘使用P3.0、P3.1、P3.2、P3.3* 实验效果 : 按下K1键,显示0,按下K2键,显示9,按下K3键,显示减1,按下K4键,*显示加1。

* 注意:由于P3.2口跟红外线共用,所以做按键实验时为了不让红外线影响实验*效果,最好把红外线先取下来。

*************************************************************************** ****/#include<reg51.h>#include<intrins.h>#define GPIO_DIG P0sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;sbit K1=P3^1;sbit K2=P3^0;sbit K3=P3^2;sbit K4=P3^3;unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9的值void Delay10ms(); //延时10ms/************************************************************************** ****** 函数名 : main* 函数功能 : 主函数* 输入 : 无* 输出 : 无*************************************************************************** ****/void main(void){unsigned int i,j;LSA=0;LSB=0;LSC=0;while(1){if(K1==0) //检测按键K1是否按下{Delay10ms(); //消除抖动if(K1==0){j=0;}while((i<50)&&(K1==0)) //检测按键是否松开{Delay10ms();i++;}i=0;}if(K2==0) //检测按键K2是否按下{Delay10ms();if(K2==0){j=9;}while((i<50)&&(K2==0)){Delay10ms();i++;}i=0;}if(K3==0) //检测按键K3是否按下{Delay10ms();if(K3==0){j--;if(j>9)j=9;}while((i<50)&&(K3==0)){Delay10ms();i++;}i=0;}if(K4==0) //检测按键K4是否按下{Delay10ms();if(K4==0){j++;if(j>9)j=0;}while((i<50)&&(K4==0)){Delay10ms();i++;}i=0;}GPIO_DIG=DIG_CODE[j];}}/************************************************************************** ****** 函数名 : Delay10ms* 函数功能 : 延时函数,延时10ms* 输入 : 无* 输出 : 无*************************************************************************** ****/void Delay10ms(void) //误差 0us{unsigned char a,b,c;for(c=1;c>0;c--)for(b=38;b>0;b--)for(a=130;a>0;a--);}(资料素材和资料部分来自网络,供参考。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void main(void)
{
unsigned int i,j;
LSA=0;
LSB=0;
LSC=0;
while(1)
{
if(K1==0)//检测按键K1是否按下
{
Delay10ms();//消除抖动
if(K1==0)
{
j=0;
}
while((i<50)&&(K1==0))//检测按键是否松开
{
Delay10ms();
i++;
}
i=0;
}
if(K2==0)//检测按键K2是否按下
{
Delay10ms();
if(K2==0)
{
j=9;
}
while((i<50)&&(K2==0))
{
Delay10ms();
i++;
}
i=0;
}
if(K3==0)//检测按键K3是否按下
{
Delay10ms();
if(K3==0)
{
j--;
*输出:无
*******************************************************************************/
void Delay10ms(void) //误差0us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
#include<intrins.h>
#define GPIO_DIG P0
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit K1=P3^1;
sbit K2=P3^0;
sbit K3=P3^2;
sbit K4=P3^3;
unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9的值
/*******************************************************************************
*实验名:静态数码管实验
*使用的IO:数码管使用P0,键盘使用P3.0、P3.1、P3.2、P3.3
*实验效果:按下K1键,显示0,按下K2键,显示9,按下K3键,显示减1,按下K4键,
i++;
}
i=0;}ຫໍສະໝຸດ GPIO_DIG=DIG_CODE[j];
}
}
/*******************************************************************************
*函数名: Delay10ms
*函数功能:延时函数,延时10ms
*输入:无
*显示加1。
*注意:由于P3.2口跟红外线共用,所以做按键实验时为了不让红外线影响实验
*效果,最好把红外线先取下来。
*******************************************************************************/
#include<reg51.h>
void Delay10ms(); //延时10ms
/*******************************************************************************
*函数名: main
*函数功能:主函数
*输入:无
*输出:无
*******************************************************************************/
if(j>9)
j=9;
}
while((i<50)&&(K3==0))
{
Delay10ms();
i++;
}
i=0;
}
if(K4==0)//检测按键K4是否按下
{
Delay10ms();
if(K4==0)
{
j++;
if(j>9)
j=0;
}
while((i<50)&&(K4==0))
{
Delay10ms();
相关文档
最新文档