单片机用汇编写两个数码管显示0到99循环的程序

2024-05-14 11:38

1. 单片机用汇编写两个数码管显示0到99循环的程序

1、新建项目,做好准备。

2、数码管段选表。

3、延时函数。

4、uchar i; 变量i;wk = 1;打开位选,P0 = 0xf7;1111 0111第4位数码管显示,wk = 0;关闭位选。

5、while(1) //死循环效果{} 。

6、dk = 1;	//打开段选,P0 = leddata[i];,dk = 0;	//关闭段选,delay(100);//延时效果。

7、选择效果,限制i值的循环范围。

单片机用汇编写两个数码管显示0到99循环的程序

2. 单片机数码管如何从1显示到9?

把 数码管的 1-9 的 对应的码算出来就好了
例如:#include //数字0-9的字形码unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};unsigned char dispcount;void delay02s(void);void main(void){ P1_0=0;//选通第一位数码管 while(1) {  for(dispcount=0;dispcount0;i--)for(j=30;j>0;j--)for(k=248;k>0;k--);}
补充:单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机

3. 单片机用汇编写两个数码管显示0到99循环的程序

1、新建项目,做好准备。

2、数码管段选表。

3、延时函数。

4、uchar i; 变量i;wk = 1;打开位选,P0 = 0xf7;1111 0111第4位数码管显示,wk = 0;关闭位选。

5、while(1) //死循环效果{} 。

6、dk = 1;//打开段选,P0 = leddata[i];,dk = 0;//关闭段选,delay(100);//延时效果。

7、选择效果,限制i值的循环范围。

单片机用汇编写两个数码管显示0到99循环的程序

4. 单片机汇编语言8只数码管显示1-8

1、 数码管显示演示程序: 在8个LED数码管上依次显示1,2,3,4,5,6,7,8。引用端口:数码管数据p0,数码管控制p2;
DIS_DIGIT EQU   40H;位选通值, 传送到P2口用于选通当前数码管的数值,; 如等于0xfe时, 选通P2.0口数码管DIS_INDEX DATA   41H;显示索引, 用于标识当前显示的数码管和缓冲区的偏移量DIS_BUF DATA   50H;显于缓冲区起始地址ORG  0000HAJMP   MAINORG   000BHAJMP  INTT0ORG   0100HMAIN:MOV  P0,#0FFH; 初始化I/O口MOV  P2,#0FFHMOV   TMOD, #02H;定时器0在模式2下工作 MOV   TL0, #38H; 每200μs产生一次溢出MOV   TH0, #38H;自动重装初值SETB   ET0 ;使能定时器0中断SETB  TR0;启动定时SETB  EA ;使能总中断MOVDPTR, #DIS_CODE; 设定显示初值为1-8MOVA,#1;初值为1,以后顺序加1MOVC A,@A+DPTRMOV  DIS_BUF,AMOVA,#2MOVCA,@A+DPTRMOV  DIS_BUF+01H,AMOVA,#3MOVCA,@A+DPTRMOV  DIS_BUF+02H,AMOVA,#4MOVCA,@A+DPTRMOV  DIS_BUF+03H,AMOVA,#5MOVCA,@A+DPTRMOV  DIS_BUF+04H,AMOVA,#6MOVCA,@A+DPTRMOV  DIS_BUF+05H,AMOVA,#7MOVCA,@A+DPTRMOV  DIS_BUF+06H,AMOVA,#8MOVCA,@A+DPTRMOV  DIS_BUF+07H,ADISPLAY:MOV  DIS_DIGIT,#0FEH; 初始从第一个数码管开始扫描MOV  DIS_INDEX,#0SETB TR0; 启动定时器0,开始动态扫描显示MAIN_LP:NOP; 主程序循环,可增加其它代码以改变50H-57H中的值以改变显示内容SJMP MAIN_LP;=====================================================INTT0:; 定时器0中断服程序, 用于数码管的动态扫描PUSH ACCPUSH PSWMOV  P2,#0FFH; 先关闭所有数码管MOV  A,#DIS_BUF; 获得显示缓冲区基地址ADD  A,DIS_INDEX; 获得偏移量MOV  R0,A; R0 = 基地址 + 偏移量MOV  A,@R0; 获得显示代码MOV  P0,A; 显示代码传送到P0口MOV  P2,DIS_DIGIT; MOVA,DIS_DIGIT; 位选通值左移, 下次中断时选通下一位数码管RL    AMOVDIS_DIGIT,AINCDIS_INDEX; DIS_INDEX加1, 下次中断时显示下一位ANLDIS_INDEX,#0x07; 当DIS_INDEX等于8(0000 1000B)时, 清0POP  PSWPOP  ACCRETI DIS_CODE: DB 28h,7eh,0a2h,62h,74h,61h,21h,7ahDB 20h,60h,30h,25h,0a9h,26h,0a1h,0b1h;0-9和ABCDEF的数码管显示代码 END

5. 80c51单片机用汇编语言4个独立按键如何分别控制4个数码管从0到9到0变化的编程

你这没有给出原理图,数码管和按键是怎么接的?是仿真实现吗,下图是仿真图,用了四位一体的共阴数码管,4个按键在P3.4~P3.7上。
仿真结果,你要是仿真,就按这个仿真图画,程序就完全适用。如果是实物开发板,就是根据开发板,适当修改程序了。

汇编程序如下
S1  BIT P3.4
S2  BIT P3.5
S3  BIT P3.6
S4  BIT P3.7
DISM1 EQU  31H
DISM2 EQU  32H
DISM3 EQU  33H
DISM4 EQU  34H
START:MOV  R0,#7FH
CLEAR:MOV  @R0,#0
DJNZ R0,CLEAR
MAINP:ACALL DISUP;主程序
TEST1:JB   S1,TEST2
ACALL DELK4
JB   S1,TEST2
INC  DISM1
MOV  A ,DISM1
CJNE A ,#10,CMPM1
CMPM1:JC   WAIT1
MOV  DISM1,#0
WAIT1:JNB  S1 ,$	
AJMP MAINP
TEST2:JB   S2,TEST3
ACALL DELK4
JB   S2,TEST3
INC  DISM2
MOV  A ,DISM2
CJNE A ,#10,CMPM2
CMPM2:JC   WAIT2
MOV  DISM2,#0
WAIT2:JNB  S2 ,$	
AJMP MAINP
TEST3:JB   S3,TEST4
ACALL DELK4
JB   S3,TEST4
INC  DISM3
MOV  A ,DISM3
CJNE A ,#10,CMPM3
CMPM3:JC   WAIT3
MOV  DISM3,#0
WAIT3:JNB  S3 ,$	
AJMP MAINP
TEST4:JB   S4,MAINP
ACALL DELK4
JB   S4,MAINP
INC  DISM4
MOV  A ,DISM4
CJNE A ,#10,CMPM4
CMPM4:JC   WAIT4
MOV  DISM4,#0
WAIT4:JNB  S4 ,$	
AJMP MAINP
DISUP:MOV DPTR,#TABLE;显示子程序
MOV R0  ,#DISM1
MOV R2  ,#0FEH
DISB1:MOV P2  ,R2
MOV A   ,@R0
MOVC A  ,@A+DPTR
MOV P0  ,A
MOV A   ,R2
RL  A
MOV R2  ,A
ACALL DELAY
INC R0
CJNE R0 ,#DISM4+1,DISB1
RET
DELK4:MOV  R6 ,#10
SJMP DELA1
DELAY:MOV  R6 ,#2
DELA1:MOV  R7 ,#150
DJNZ R7 ,$
DJNZ R6 ,DELA1
RET
TABLE:DB 3FH,06H,5BH,4FH,66H;共阴段码表
DB 6DH,7DH,07H,7FH,6FH
END

80c51单片机用汇编语言4个独立按键如何分别控制4个数码管从0到9到0变化的编程

6. 单片机汇编语言数码管显示0到9

先设计电路,在编写程序。
下图电路,供你参考。

7. 51单片机 让数码管自动显示0至9的C程序。有没有比这个更简单的????

可以通过代码优化的方式来简化代码。
一、设置延时函数
延时函数在单片机中有着让现实延时的能力,本程序中可以通过采用for循环方式进行延时,具体代码如下:
void delay()
{
uinti,j;
    for(i=100;i>0;i--)           
        for(j=1000;j>0;j--);
}
二、设置数码管显示数组
数组定义简单,而且访问很方便。所有元素类型相同,在数码管显示程序中可以让程序代码减少。数组代码如下:
chara[10]={0xff,0x3,0x9f,0x25,0xd,0x99,0x49,0x41,0x1f,0x1,0x9};

三、设置数码管显示循环
数码管显示循环可以不用编写一次又一次的数码管显示代码,既方便又简洁。具体代码如下:
for(int i=0;i<10;i++)
{
P0=a[i];
delay();
}
扩展资料
单片机程序进行简化可以查看是否有反复出现的代码序列,整合成循环进行更改。同一类型且用法相同的变量可以整合成数组,方便对各个内容进行访问。有特定功能的代码段可以定义一个函数进行访问。
注意:用C51语言编辑的单片机程序与普通C语言不同,C51语言中的数据类型和标准c中的数据类型不同。

51单片机 让数码管自动显示0至9的C程序。有没有比这个更简单的????

8. 谁能帮我看下这个程序呀,我写的51单片机,用的c语言,结果数码管就显示俩00,一直不动,这是怎么回

思路有点问题。
除思路问题外,键盘扫描的处理也有点问题,去抖没做好。
1,建议定义一个变量status标记当前调整的是“时”还是“分”还是秒。用一个按键控制这个变量的变化,变量的值由0变到3,再变为0。0的时候不调整,1的时候调整时,2的时候调整分,3的时候调整秒.用KEY1控制,按一下KEY1,变量status由常态0变成1,再按变成2,再按就成3,再按变回0。
2,用KEY2做加,KEY3做减。按一个KEY2,当前操作的单元加1 ,(如“时”加一)。按一下KEY3,当前操作的单元减一。
还可以把当前操作的单元显示为闪烁状态。

键盘扫描处理,如扫描KEY1,先看KEY1是否按下,然后延时,然后再次看KEY1是否仍然按下,如果是,则确认KEY1有效,否则认为是抖动。