导航:首页 > 操作系统 > 单片机编程数码管

单片机编程数码管

发布时间:2022-06-25 16:20:46

‘壹’ 单片机编程:用数码管和led实现,用数码管倒计时10秒,LED左移闪烁一次,如此交替下去

#include<reg52.h>
#include<intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitled=P3^3;//P3^3--LED--电源,这样接法,即低电平点亮
//P0接数码管的段
//P2接数码管的位

//共阴数码管的段定义,0~9
//ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阳数码管的段定义,0~9
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

voidDelay(uintn){
while(n--)
//voidDelay1ms()//@11.0592MHz
{
unsignedchari,j;

_nop_();
i=2;
j=199;
do
{
while(--j);
}while(--i);
}
}

voidmain(void){
ucharj=10,m=0;
while(1){
P2=1;//共阳。如果共阴,要取反
P0=table[j/10%10];//j值的十位数
Delay(5);

P2=2;//共阳。如果共阴,要取反
P0=table[j%10];//j值的个位数
Delay(5);

m++;
if(m==97){//前面显示占用约10毫秒,所以100次就是1秒
if(j==0){//倒计时到0
P2=0;//关闭数码管
for(m=0;m<5;m++){//LED闪烁
led=0;
Delay(100);
led=1;
Delay(100);
}
j=11;
}
j--;
m=0;
}
}
}


//经过测试的。。。

‘贰’ 请教51单片机的数码管编程问题

有最后的 while (1);,你的单片机就不断循环空等,输出会保持,所以第一个数码管正确显示6。

没有最后的 while (1);,你的单片机会继续执行往下的代码(是没定义的或不确定的),也就是" 跑飞"了,
跑飞的后续结果通常是不确的,出现你描述的现象一点不奇怪

‘叁’ C51单片机数码管程序设计,

#include
#define
uchar
unsigned
char
uchar
code
table[11]
=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
//共阴
void
delay(uint
i)//延时时间约为
10ms
*
x
{
uchar
x;
for(x=0;x<=1827;x++);
}
void
main(void)
{
uchar
i
=
0;
for(i=0;i<11;i++)
{
p0
=
table[i];
//
i
值的
个位数
if(i==10)
p2=0x01;
//点亮最后一个数码管
p2
=
0x0f;
//点亮四个数码管
delay(100);
//
延时1s
}
}
说明:若接法不一样,则赋值也不一样。

‘肆’ 单片机编程 数码管0.5进位怎么编程

不太明了意图,但数码管显示时,一般都要设置显示暂存,例如:8位数码管显示时,程序里要有
unsigned char d[8];另外还有显示数据转换程序,以2位显示为例,待显示数N,则有d[1]=N/10;
d[0]=N%10;此时如果需要4舍5入时,程序如下:
***************
d[0]=N%10;

if(d[0]>=5)
{d[1]=(N/10)+1;d[0]=0;}
else

d[1]=N/10;
d[0]=N%10;
**************
还要根据数据类型定义N,如果是小数数据最好是放大成整数进行运算,而后再根据实际情况显示小数点。

‘伍’ 在单片机编程过程中,针对共阴极数码管0和1的字形码为什么

00111111b。单片机c语言编程是基于C语言的单片机编程。单片机的C语言采用C51编译器(简称C51)。在单片机编程共阴极数码管的字型编码应为:00111111b。

‘陆’ 51单片机四位一体共阳极数码管显示编程

不清楚你的电路构成如何,因此先按下面的假设执行段码及位码的输出;
其中,延时值可根据实验效果予以调整;
设 P0 为输出七段码(共阳极数据);
四位数码管有4个阳极,设位码分别与P2.4--P2.7对应,并且=1时表示可点亮数码管;
sbit wma1=b2^4; //对应左起第1个数码管的阳极

sbit wma2=b2^5; //对应左起第2个数码管的阳极
sbit wma3=b2^6;
sbit wma4=b2^7;
void main()
{
wma1=0; wma2=0; wma3=0; wma4=0;
while(1)
{
P0=table[0]; wma1=1; delay(10); wma1=0;
P0=table[1]; wma1=2; delay(10); wma2=0; P0=table[2]; wma1=3; delay(10); wma3=0; P0=table[3]; wma1=4; delay(10); wma4=0; P0=table[4]; wma1=1; delay(10); wma1=0; P0=table[5]; wma1=2; delay(10); wma2=0; P0=table[6]; wma1=3; delay(10); wma3=0; P0=table[7]; wma1=4; delay(10); wma4=0;
}
}

‘柒’ 51单片机c语言版,编写程序:单片机控制八位LED数码管显示20220204间隔两秒后显示2022

摘要 显示程序和硬件关联,如驱动方式、位数等,所以没有统一的程序,假定动态显示,大概思路如下:

‘捌’ 单片机数码管编程 汇编语言,急

U16INC	MACRO	U16,;;16位无符号型变量加1
LOCALZZ
INC U16+1
MOV A,U16+1
JNZ ZZ
MOV U16+1,#0
INC U16
ZZ:
ENDM

U16MOV MACRO U16,VAL;;16位无符号型变量赋值
MOV U16+1,#LOW(VAL)
MOV U16,#HIGH(VAL)
ENDM

U16DAYV MACRO U16,VAL,;;16位无符号型变量判断大小,最后根据Cy判断
MOV A,U16+1
CLR C
SUBB A,#LOW(VAL)
MOV A,U16
SUBB A,#HIGH(VAL)
ENDM

WX1 EQU P2.0
WX2 EQU P2.1
WX3 EQU P2.2
WX4 EQU P2.3

S4 EQU P1.3
S5 EQU P1.4

LED1 EQU P1.6;;两个LED
LED2 EQU P1.7

JDQ EQU P1.5;;继电器

SMGBZ1 EQU 0X30
DS1 EQU 0X31

ZT EQU DS1+4
JSBZ1 EQU ZT+1;0-39的计数
JSBZ2 EQU ZT+2;计时标志,用于闪烁和计时
JSBZ3 EQU JSBZ2+2;;继电器通断两次的计时和计数

ORG 0
JMP MAIN
ORG 0XB
JMP TimeInterupt

MAIN:
MOV SP,#0X70
MOV R0,#0x70
CLR A
MA1: MOV @R0,A ;数据全清0
DJNZ R0,MA1
CALL JDQLC_STOP
CALL Time0Init

;主循环
LOOP: CALL AJPD
CALL RUN
JMP lOOP

;主运行函数
RUN: MOV A,ZT
CJNE A,#1,RR1
JMP RUN1
RR1: CJNE A,#2,RR2
JMP RUN2
RR2: RET

;;0-39循环
RUN1:
MOV DS1+0,#0X10
MOV DS1+1,#0X10
MOV A,JSBZ1
MOV B,#10
DIV AB
MOV DS1+2,A
MOV DS1+3,B

U16DAYV JSBZ2,1000
JC RUN1_1
U16MOV JSBZ2,0
INC JSBZ1
MOV A,JSBZ1
CJNE A,#39+1,RUN1_1
MOVJSBZ1,#0
RUN1_1:
RET

;;FFFF闪烁
RUN2: U16DAYV JSBZ2,500
JC RUN2_1
MOV DS1+0,#0X10
MOV DS1+1,#0X10
MOV DS1+2,#0X10
MOV DS1+3,#0X10
SETB LED1
SETB LED2
U16DAYV JSBZ2,1000
JC RUN2_2
U16MOV JSBZ2,0
JMP RUN2_2
RUN2_1:
MOV DS1+0,#0X0F
MOV DS1+1,#0X0F
MOV DS1+2,#0X0F
MOV DS1+3,#0X0F
CLR LED1
CLR LED2
RUN2_2:
CALL JDQLC

RET

;按键判断
AJPD:
JNB S4,AJ1
JNB S5,AJ2
RET
AJ1: JNB S4,$
MOV ZT,#2
CALL JDQLC_START
RET
AJ2: CALL JDQLC_STOP
SETB LED1
SETB LED2
JNB S5,$
MOV ZT,#1
MOV JSBZ1,#0
U16MOV JSBZ2,0
RET

JDQLC_START:
U16MOV JSBZ3,0
RET
JDQLC_STOP:
U16MOV JSBZ3,30000
SETB JDQ
RET
;继电器通断两次
JDQLC:
U16DAYV JSBZ3,1000
JNC JDQ_1
CLR JDQ;通1s
RET
JDQ_1: U16DAYV JSBZ3,1500
JNC JDQ_2
SETB JDQ;断0.5s
RET
JDQ_2: U16DAYV JSBZ3,1500+1000
JNC JDQ_3
CLR JDQ;通1s
RET
JDQ_3: U16DAYV JSBZ3,3000
JNC JDQ_4
SETB JDQ;断
JDQ_4: RET


;;定时器初始化
Time0Init:
MOV TMOD,#0X01
MOV TH0,#HIGH(65536-1000)
MOV TL0,#LOW(65536-1000)
SETB TR0
SETB ET0
SETB EA
RET

;;数码显示
SMXS:
INC SMGBZ1
MOV A,SMGBZ1
SUBB A,#4
JC SMXS1
MOV SMGBZ1,#0

SMXS1:
MOV P2,#0XF0
MOV A,SMGBZ1
ADD A,#DS1
MOV R0,A
MOV A,@R0
MOV DPTR,#TABD
MOVC A,@A+DPTR
MOV P0,A
MOV DPTR,#TABW
MOV A,SMGBZ1
MOVC A,@A+DPTR
MOV P2,A
RET

TABD:;段码
DB0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
DB0X88,0X83,0XC6,0XA1,0X86,0X8E,0XFF,0XBF
TABW:;位码
DB0xF1,0xF2,0xF4,0xF8


;;定时器0中断
TimeInterupt:
PUSH PSW
PUSH ACC

MOV TH0,#HIGH(65536-1000)
MOV TL0,#LOW(65536-1000)
CALL SMXS
U16INC JSBZ2
U16DAYV JSBZ3,30000
JNC TimeOut
U16INC JSBZ3


TimeOut:
POP ACC
POP PSW
RETI

END

‘玖’ 51单片机控制的数码管原理是什么

利用引脚输出高低电平来控制数码管的8个子管的亮灭,达到数字和小数点显示的效果,通常要给每个数字做一个转换表,以便在编程的时候忽略转换过程,达到快速编程的目的,转换表一般采用枚举的方式,具体转换数字和你电路里面的连接方式有关系,用二进制写出来,再换算成16进制就好了。

‘拾’ 单片机中如何通过编程来获取LED数码管的段码

一般是在程序中附加一节段码表,然后在程序中根据要显示的字符用查表的方法查得段码,然后送到LED数码管的段选端。

阅读全文

与单片机编程数码管相关的资料

热点内容
javaweb程序设计郭 浏览:247
gm声望命令 浏览:484
pdf转换器电脑版免费 浏览:41
解压歌曲什么歌最好 浏览:151
诺贝尔pdf 浏览:967
云服务器快速安装系统原理 浏览:788
苹果腾讯管家如何恢复加密相册 浏览:115
手机软件反编译教程 浏览:858
sqlserver编程语言 浏览:650
gpa国际标准算法 浏览:238
服务器编程语言排行 浏览:947
怎么下载快跑app 浏览:966
小红书app如何保存视频 浏览:172
如何解开系统加密文件 浏览:811
linux切换root命令 浏览:283
c编译之后界面一闪而过怎么办 浏览:880
怎么看ic卡是否加密 浏览:726
lgplc编程讲座 浏览:809
cnc手动编程铣圆 浏览:724
cad中几种命令的意思 浏览:328