51单片机控制8个数码管并显示1-8
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机控制8个数码管并显示1-8相关的知识,希望对你有一定的参考价值。
数码管段选连接到单片机P0口,位选连接到P2口
ORG 0000h
MAIN:
CALL DISPLAY
AJMP MAIN
DISPLAY:
MOV R0,#0
MOV R1,#0x01
MOV DPTR,#TAB
LOOP:
INC R0
MOV A,R0
MOVC A,@A+DPTR
MOV P0,#0 ;消隐
MOV P0,A ;送段码
CALL DELAY
MOV A,R1 ;送位码
RL A ;移位
MOV P2,A
MOV R1,A
CALL DELAY
CJNE R0,#8,LOOP ;判断8次是否循环完成
RET
DELAY:
MOV R6,#25
DD: MOV R7,#50
DJNZ R7,$
DJNZ R6,DD
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
参考技术A 8个按钮开关控制数码管显示1-7,8个按键,显示7个数,哪个键不显示吗,应该显示1-8才对呀。数码管在按钮没有按下的时候显示数字。按下后显示相应数字,不按也显示数字,按下也显示数字,都是数字,有什么区别,难道是外国的数字?
这叫什么题目吗?
51单片机——数码管静态显示
51单片机——数码管静态显示
1、由原理图找到对应控制端口
这次是想要在数码管上显示出数值。同样的,先在开发板原理图中找到数码管对应的控制端口
发现要让数码管起作用的话,LEDS0要为低电平,则在74LS138译码器中,输入A2A1A0的值分别为000。而P0口可以控制数码管的显示。
2、程序部分
需要用到的对应控制端口找完,开始写程序。先写个简单一点数码管静态显示。
程序如下:
#include <reg52.h>
sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;
sbit ENLED=P1^4;
void delay(unsigned char x);
unsigned char code duan[]=
0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; //²é±í·¨
void main()
unsigned char i;
ADDR0=0; //按原理图端口初始化
ADDR1=0;
ADDR2=0;
ADDR3=1;
ENLED=0;
while(1)
for(i=0;i<9;i++)
P0=duan[i];
delay(250);
void delay(unsigned char x)
unsigned char n;
while(--x)
for(n=0;n<250;n++);
开发板显示如下:
以上是关于51单片机控制8个数码管并显示1-8的主要内容,如果未能解决你的问题,请参考以下文章
51单片机 3个IO口 + TM1638+24个独立按键扫描+驱动8位共阳数码管显示+Proteus仿真