}}void t0isr() interrupt 1{ TH0=0xf4; TL0=0x48; switch(number) { case 0:P2=0x04;P0=distab[LED1];break; case 1:P2=0x08;P0=distab[LED2];break; case 2:P2=0x01;P0=distab[LED3];break; case

共阳极接法。abcdefg 为 P0 口,位选端为 P2 口。八个数码管同时显示 01234567。电路与程序,如下所示:

3、接着,我们加上一条循环语句。4、最后,我们把先前定义的延时语句delayms写好。5、最后,点击这里进行编译,生成一个hex文件。6、如果这里无错误警告的话,就说明我们的程序写对了,那我们就可以点亮动态数码管了。

MOV DPTR,#TAB MOV R7,#00H;十位计数 MOV R2,#00H;个位计数 DSUP0:MOV R6,#00H;扫描速度计数 DSUP:MOV A,R2 MOVC A,@A+DPTR MOV P0,A CLR P20;显示个位 SETB P21 LCALL YSH2S MOV A,R7 MOVC A,@A+D

MOV 31H,#00H MOV 32H,#00H MOV 33H,#01H MOV 34H,#06H MOV 35H,#03H MOV 36H,#02H ACALL D0 JMP $-2 D0: MOV R0,#31H MOV R2,#11111110B MOV DPTR,#TAB D1: ORL

include define uchar unsigned char;uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f uchar number,nn=0;uchar dat[

P3_0=1; //关第一位显示 P2=TAB[2];P3_1=0; //开第二位显示 FOR(I=0;I<200:I++);P3_1=1;这个程序就是让两个数码管分别显示1和2,注意程序开头包含头文件regx52.h,如果是包含reg52.h编译不了的

运用51单片机实现2位8段LED数码管的动态数字显示,写出汇编程序(C程序也行)

SETB TR1 SETB TR0;一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了 ;===查询程序=== START: MOV R5,#0BH MOV R4,#0BH MOV R3,#0BH ACALL DISPLAY;未开始抢答时候显示FFF JB P3.0

include#define uchar unsigned charuchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};sbit rstkey=P3^7;main(){uchar i,key;while(1){P2=0xff;i=0;P0=table[i];while(1){key

ORG 0000H JMP BEGIN ORG 000BH LJMP T0INT ORG 0030H;---TABLE: ; 共阴极数码管显示代码表 DB 3FH,06H,5BH,4FH,66H ;01234 DB 6DH,7DH,07H,7FH,6fh ;56789;---BEGIN:

ORG 0000H SJMP STA ORG 0030H STA:MOV SP,#50H CLR EA MOV P0,#0FFH MOV P1,#0FFH MOV P3,#0FFH CLR P2.0 LCALL DELAY MAIN1:MOV A,P3 CJNE A,#0FFH,MAIN2 SJMP MAIN1 MAIN2:JB ACC.0,MAIN21 MOV

求单片机八路抢答器带LED灯显示的汇编程序,是一位数码管的

LED数码管显示模块上。LED数码管显示模块可以满足动态显示的需要,可以通过共阳,共阴等管脚连接方式与C51单片机进行连接,实现数字信号的输入输出和动态控制。

P3_0=1; //关第一位显示 P2=TAB[2];P3_1=0; //开第二位显示 FOR(I=0;I<200:I++);P3_1=1;这个程序就是让两个数码管分别显示1和2,注意程序开头包含头文件regx52.h,如果是包含reg52.h编译不了的

include define uchar unsigned char define uint unsigned int uchar count;uint disnum;sbit dula=P2^6;sbit wela=P2^7;uchar code tabledu[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x

共阳极接法。abcdefg 为 P0 口,位选端为 P2 口。八个数码管同时显示 01234567。电路与程序,如下所示:

mov r1,#temp mov r2,#6 ;六位显示器 mov dptr,#segtab ;段码表首地址 dp00: mov a,@r0 ;取要显示的数据 movc a,@a+dptr ;查表取段码 mov @r1,a ;段码暂存 inc r1 inc r0 djnz r2

单片机 汇编 LED数码管动态显示

高分求助在线等:将2个汇编程序合成一个 AD转换的汇编程序如下:位定义SOBITP1.0;数据输入CSBITP1.1;从机选择SCKBITP1.2;时钟数据字节定义DATAHDATA30H;读取数据高位DATALDATA31H;读取数据低位TDATAHDATA32H;温度高位T AD转换的

汇编代码:程序代码 LED_0 EQU 30H LED_1 EQU 31H LED_2 EQU 32H ADC EQU 35H CLOCK BIT P2.4 ST BIT P2.5 EOC BIT P2.6 OE BIT P2.7 ORG 00H SJMP START ORG 0BH LJMP INT_T0 START: MOV LED_0

ACALL Send_AD_Result ;发送转换结果到 PC 机 ACALL Set_P12_Normal_IO ;设置 P1.2 为普通IO MOV A, ADC_Channel_2_Result ;用 P1 口显示A/D转换结果 CPL A MOV P1, A Wait_Loop:SJMP

接线:p3.6接srd p3.7接swr p3.0接pin p3.1接clk ad0809的clk接脉冲 cs接8000h的译码电路程序:ad0809 xdata 8000h org 0000h ajmp main org 0030h main:mov dptr,#8000h mov a,#01h movx @dptr,a call

st equ p3.7 eoc equ p3.6 oe equ p3.5 BAI EQU 30H SHI EQU 31H GEWEI EQU 32H org 0000h MOV DPTR,#0FEF8H ;AD转换IN0通道地址 MOV A,#00H MOVX DPTR,A ;启动AD转换 START:clr st setb st clr

如下图所示,从ADC0809的通道IN3输入0-5V之间的模拟量,通过ADC0809转换成数字量在数码管上以十进制形成显示出来。ADC0809的VREF接+5V电压。程序如下:只采集了CH0通道的。其余的只要设置下ABC三个控制脚即可。同样实现。CH

显示程序:假如AD转换后的数据在40H单元 汇编程序这样写:MOV A,40H ANL A,#0F0H SWAP A MOV DISP_BUF_H,A MOV A,40H ANL A,#0FH MOV DISP_BUF_L,A RET LCALL LED_DISP //LED显示程序

AD转换后由七段LED数码管输出 “汇编程序”

DISP1:MOV R1, #70H MOV R0, #74H MOV R5, #0FEH PLAY:MOV DPTR, #TAB MOV P2, #0FFH ;原来是 P1 MOV A, @R1 MOVC A, @A+DPTR MOV P1, A MOV A, @R0 MOVC A, @

ORG 30H ;程序地址30H,即STAR标号地址 STAR: MOV R2,#99 ;将十进制数99送入R2中 MOV R4,#20 ;将十进制数20送入R4中 MOV IE,#88H ;开启EA和ET1 MOV TMOD,#10H ;使用T1的工作方式1 MOV T

2.共阳极:就是将八段数码管的阳极(正极)接(+5v)在一起,需要低电平点亮。如下图所示 3.数码管的具体显示 ①共阴数码管的点亮 为使数码管的不同段显示不同的字符,需要点亮和熄灭不同段的LED灯,才可以实现

include define uchar unsigned char define uint unsigned int uchar count;uint disnum;sbit dula=P2^6;sbit wela=P2^7;uchar code tabledu[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x

P2=TAB[2];P3_1=0; //开第二位显示 FOR(I=0;I<200:I++);P3_1=1;这个程序就是让两个数码管分别显示1和2,注意程序开头包含头文件regx52.h,如果是包含reg52.h编译不了的

共阳极接法。abcdefg 为 P0 口,位选端为 P2 口。八个数码管同时显示 01234567。电路与程序,如下所示:

LED数码管动态显示2017的51单片机汇编语言

简单来说比如显示01,那么程序如下,只要循环调用这个子程序就可以 DISPLAY: SETB P2.0 CLR P2.1 MOV P0,#0C0H LCALL DELAY CLR P2.0 SETB P2.1 MOV P0,#06H LCALL DELAY RET
这个程序因为要精确计时,所以最好使用中断程序来完成。 大家编程的思维方式和格式不一样,加上我也没有太多时间来帮你写代码,所以我只是将具体程序的流程说给你,希望对你有帮助。 (加一句,这个程序完全没有必要设置3个按键,因为3个按键在任意时刻只有3个可以被响应,所以合并成1个最好) ;下面的代码直接粘贴到编译其中,然后按照注释添加代码 ;################################################## ;添加基本的复位程序 ;定义寄存器 ;定义秒整数寄存器:miao1=0 ;定义秒小数寄存器:miao2=0 ;定义复位状态位:zhuangtai1=1 ;定义运行状态位:zhuangtai2=0 ;定义停止状态位:zhuangtai3=0 ;定义显示状态位:xianshi1=1(个位) ;定义显示状态位:xianshi2=0(十位) ;定义显示状态位:xianshi3=0(百位) ;点亮发光管3,熄灭发光管1,2 ;将定时器0溢出时间设定为0.01秒 ;开启定时器0 ;######################## ;进入循环判断主程序 ;(循环判断主程序开始处 ;如果当前是复位状态(zhuangtai1=1),那么循环判断按键1,等待启动(按键1按下后经过延时去抖确定,然后zhuangtai1=0,zhuangtai2=1,zhuangtai3=0,点亮发光管1,熄灭3,返回循环判断主程序开始处) ;如果当前是运行状态(zhuangtai2=1),那么循环判断按键2,等待停止(按键2按下后经过延时去抖确定、然后zhuangtai1=0,zhuangtai2=0,zhuangtai3=1,点亮发光管2,熄灭1,返回循环判断主程序开始处) ;如果当前是停止状态(zhuangtai3=1),那么循环判断按键3,等待复位(按键3按下后经过延时去抖确定、然后zhuangtai1=1,zhuangtai2=0,zhuangtai3=0,点亮发光管3,熄灭2,miao1=0,miao2=0,返回循环判断主程序开始处) ;)循环判断主程序结束 ;################################################## ;中断程序 ;######################## ;中断程序第一步:计算当前时间 ;(计算当前时间程序开始处 ;如果当前是运行状态(zhuangtai2=1),那么miao2=miao2+1, ;如果miao2=100,那么miao2=0,miao1=miao1+1, ;)计算当前时间程序结束 ;######################## ;中断程序第二步:刷新显示数码管 ;(刷新显示数码管程序开始处 ;如果xianshi1=1,那么(显示个位数码管(miao2/10),xianshi1=0,xianshi2=1,跳至刷新显示数码管程序结束处) ;如果xianshi2=1,那么(显示十位数码管(miao1%10),xianshi2=0,xianshi3=1,跳至刷新显示数码管程序结束处) ;如果xianshi3=1,那么(显示百位数码管(miao1/10),xianshi3=0,xianshi1=1,跳至刷新显示数码管程序结束处) ;)刷新显示数码管程序结束
详细程序我不写,我给你说个思路你自己查相关资料,这样有助于自己的学习能力! 首先开启AD转化,转化结束后读入数据,让后将高位一个八位(假设AD是八位的)分成两个四位的数据,根据数据查找LED显示驱动的相应码值,再输出至LED数码管。 你要搞清出片外芯片的地址译码,这跟你硬件线路的连接有关。 记得加分哟!
mov b, #05h mul ab mov dubf + 1, b mov b, #0ah mul ab mov dbuf, b 按照这算法,255,只能换算成 49; 如果继续往下算,可以得出 498。 换一种算法吧。 (0~255) * 10 / 51。
共阳极接法。 abcdefg 为 P0 口,位选端为 P2 口。 八个数码管同时显示 01234567。 电路与程序,如下所示:
试试看: SMG_1 EQU P1.0 SMG_2 EQU P1.1 SMG_3 EQU P1.2 SMG_4 EQU P1.3 ORG 0100H JMP MAIN ORG 0200H MAIN: MOV DPTR, #TMP MOV R2, #254 MOV R3, #4 LOOP: MOV P1, #255 CLR A MOVC A, @A+DPTR MOV P0, A MOV P1, R2 MOV A, R2 RL A MOV R2, A LCALL DELAY INC DPTR DJNZ R3, LOOP LJMP MAIN DELAY: MOV R5,#25 M1: MOV R6,#30 DJNZ R6,$ DJNZ R5,M1 RET TMP: DB 0C0H,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H END
看看数码管是否接对
ORG 0000H JMP BEGIN ORG 000BH LJMP T0INT ORG 0030H;---------------------------------------TABLE: ; 共阴极数码管显示代码表 DB 3FH,06H,5BH,4FH,66H ;01234 DB 6DH,7DH,07H,7FH,6fh ;56789;---------------------------------------BEGIN: MOV SP,#5FH MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 SETB ET0 SETB EA MOV R2,#20 MOV P1,#0FEH MOV DPTR,#TABLE MOV A,#1 MOVC A,@A+DPTR MOV P0,A MOV R3,#1 SJMP $;---------------------------------------T0INT: CLR TR0 MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 DJNZ R2,T0INTE MOV R2,#20 INC R3 MOV A,R3 CJNE A,#9,T0INT1 MOV A,#1T0INT1: MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,AT0INTE: RETI END
动态显示的是有固定格式的,赋值,开显示,延时,关显示,假设p0口接数据显示位,p2口低4位接片选, p2=tab[1]; //赋值 p3_0=0; //开第一位显示 for(i=0;i<200:i++);//延时 p3_0=1; //关第一位显示 p2=tab[2]; p3_1=0; //开第二位显示 for(i=0;i<200:i++); p3_1=1; 这个程序就是让两个数码管分别显示1和2,注意程序开头包含头文件regx52.h,如果是包含reg52.h编译不了的
#include #define uchar unsigned char//宏定义 #define uint unsigned int uchar count; uint disnum; sbit dula=P2^6; sbit wela=P2^7; uchar code tabledu[]={//段码表 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void display(uchar,uchar,uchar); void delay(uchar); void main() { EA=1;//开总中断 ET1=1;//开定时器T1中断 TMOD=0x10;//设置定时器T1为工作方式1 TH1=(65536-50000)/256;//定时50ms TL1=(65536-50000)%256; TR1=1;//启动定时器T1 while(1) { if(count==20)//定时1s { count=0; if(disnum==1000) disnum=0; disnum++;//disnum值自加1 } display(disnum/100,disnum%100/10,disnum%100%10);//显示disnum的值,从0显示到1000,时间间隔为1s } } void tim1() interrupt 3 using 3 { TH1=(65536-50000)/256;//重置定时参数 TL1=(65536-50000)%256; count++; } void display(uchar bai,uchar shi,uchar ge)//显示子程序 {P0=tabledu[bai];//显示百位 dula=1; dula=0; P0=0xfe; wela=1; wela=0; delay(1); P0=tabledu[shi];//显示十位 dula=1; dula=0; P0=0xfd; wela=1; wela=0; delay(1); P0=tabledu[ge];//显示个位 dula=1; dula=0; P0=0xfb; wela=1; wela=0; delay(1); } void delay(uchar x)//延时子程序 { uchar a,b; for(a=x;a>0;a--) for(b=255;b>0;b--); }