MOV 33H,#03H MOV 34H,#04H MOV 35H,#05H MOV 36H,#06H ACALL D0 JMP $-2 D0: MOV R0,#31H MOV R2,#11111110B MOV DPTR,#TAB D1: ORL P1,#00111111B MOV A,@R0

1、首先我们先打开keil。2、接着,我们要定义好库函数,void main(){while(1)//不断循环显示{dispaly();}}void dispaly(){P0=smg[1];//选择显示数字几,P1=0x7f;//控制是否点亮数码管。3、接着,我们加上一条

void delay()//延时子程序 { uint y;for(y=400;y>0;y--);} void display(uchar x)//显示子程序,x为显示起始位 { uchar j;for(j=0;j<4;j++){ P2=disb[j];//输出位码 P0=tab[buf[j+x]];//输出

用51单片机组成四位共阳极数码管显示1234 ,proteus仿真图如下所示,P0口输出段码,P2口输出位码。

shiftOut(0x04); // 第3位 break;case 3:shiftOut(0x08); // 第4位 break;default:break;} // 数据锁存 RCLK = 1;delay(1);RCLK = 0;// 数码管刷新延时 delay(5);// 切换显示的位 digit = (digit

用51单片机控制4位一体数码管实现1234轮流显示的程序代码是什么,求!proteus仿真

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

简单来说比如显示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

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, @

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

RL A;左移位,R1为1,数码管第二位显示1,当R1为7,数码管第二位显示7 MOV R0,A INC R1 CJNE R1,#8,MAIN;当R1为8时重新从第一位开始显示 LJMP START

dp00: mov a,@r0 ;取要显示的数据 movc a,@a+dptr ;查表取段码 mov @r1,a ;段码暂存 inc r1 inc r0 djnz r2,dp00 disp0: mov r0,#temp ;显示子程序 mov r1,#6 ;扫描6次 mov

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

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

动态显示:数字移动显示 / include define uint unsigned int define uchar unsigned char sbit Dp=P0^6;sbit d1=P2^4;sbit d2=P2^5;sbit d3=P2^6;sbit d4=P2^7;uchar code table[]= {0x28,0x

每一次只能让一个数码管位选,其他的关闭,给数码管赋值。重复4次就可以了。假设要显示“1234”:include sbit k1 = P1^1;sbit k2 = P1^2;sbit k3 = P1^3;sbit k4 = P1^4;//k1-k4 4个位选开关

动态显示。就是先单独显示完一位后,然后关闭这一位(也就是熄灭这一位的led),然后再单独显示下一位。由于人眼反应慢,随意看起来就像4位数码管都在同时显示

int counter=0;sbit w0=P2^7;sbit w1=P2^6;sbit w2=P2^5;sbit w3=P2^4;uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };void del

不停地利用人的视觉暂留,在一个合适的速度下依次显示1个2,1个0,1个3,1个5.当显示一个“2”的时候,其他三位都是空的,以此类推。但人眼是看不到短时间内这些变化的,假如这个行为不断循环,那么人看到的就是“

P0=table[qian]; // 查得千位,送P0 SMG_q=0; // 打开千位数码管 delay56(); // 延时 P0 = 255; // 防止数码管脏乱 SMG_q=1; // 关闭数码管 P0=table[bai];// 选择百位数码管 SMG_b=0

51单片机如何利用4个七段数码管采用动态显示显示4位数字,如2035

这是四位数码管从右从左流动显示,像滚动字幕一样的。用不着矩阵按键哪。其实程序很简单,没那么复杂。程序如下 include define uchar unsigned char define uint unsigned int uchar code tab[]={0x3f,0x06

51单片机数码管循环左移是指将一个数码管依次向左移动一个位置,同时将最右边的数移到最左边,形成类似于滚动的效果。以下是51单片机数码管循环左移的详细实现方法:1. 定义一个八位二进制数字并赋初值0xFF,用来驱动八个

include define uchar unsigned char define uint unsigned int uchar code SEG_B_List[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阳数码管代码表"0-9","空"define S

下面是使用AT89S51单片机控制4位一体数码管轮流显示1234的程序代码:```c include // 数码管显示字型码表 unsigned char code LEDDisplay[] = { 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F

1.共阴极:就是将八段数码管的阴极(负极)接地在一起,需要高电平点亮。如下图所示 2.共阳极:就是将八段数码管的阳极(正极)接(+5v)在一起,需要低电平点亮。如下图所示 3.数码管的具体

keil51单片机数码管滚的显示

动态显示。就是先单独显示完一位后,然后关闭这一位(也就是熄灭这一位的led),然后再单独显示下一位。由于人眼反应慢,随意看起来就像4位数码管都在同时显示

int counter=0;sbit w0=P2^7;sbit w1=P2^6;sbit w2=P2^5;sbit w3=P2^4;uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };void del

不停地利用人的视觉暂留,在一个合适的速度下依次显示1个2,1个0,1个3,1个5.当显示一个“2”的时候,其他三位都是空的,以此类推。但人眼是看不到短时间内这些变化的,假如这个行为不断循环,那么人看到的就是“

unsigned char table[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xa7};//表:共阳数码管 0 1 2 3 4 5 6 7 8 9 c //延时子函数,短暂延时 void delay5

51单片机如何利用4个七段数码管采用动态显示显示4位数字,如2035?

//*************************************** //显示函数 函数名:display56() //*************************************** //变量定义: unsigned char qian,bai,shi,ge; //定义显示缓冲区 unsigned char table[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xa7}; //表:共阳数码管 0 1 2 3 4 5 6 7 8 9 c //延时子函数,短暂延时 void delay56() { unsigned char i56=210; while(i56--); } void display56() { P0=table[qian]; // 查得千位,送P0 SMG_q=0; // 打开千位数码管 delay56(); // 延时 P0 = 255; // 防止数码管脏乱 SMG_q=1; // 关闭数码管 P0=table[bai];// 选择百位数码管 SMG_b=0; delay56(); //延时 P0 = 255; SMG_b=1; // P0=table[shi];// 选择十位数码管 SMG_s=0; delay56(); // P0 = 255; SMG_s=1; // P0=table[ge];//选择个位数码管, SMG_g=0; delay56(); // P0 = 255; SMG_g=1; // } 你想显示什么,分别为qian,bai,shi ,ge
#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[]={2,0,1,2,1,1,4,5,8,2}; void t0isr() interrupt 1 { TH0=(65536-5000)/256; TL0=(65536-5000)%256; number++; number%=4; switch(number) { case 0:P2=0x08;P0=distab[nn]; break; case 1:P2=0x04;P0=distab[nn+1]; break; case 2:P2=0x02;P0=distab[nn+2]; break; case 3:P2=0x01;P0=distab[nn+3]; break; default:break; } nn++; nn%=7; } main() { TMOD=0x01; TH0=(65536-5000)/256; TL0=(65536-5000)%256; TR0=1; ET0=1; EA=1; while(1); }
不停地利用人的视觉暂留,在一个合适的速度下依次显示1个2,1个0,1个3,1个5. 当显示一个“2”的时候,其他三位都是空的,以此类推。 但人眼是看不到短时间内这些变化的,假如这个行为不断循环,那么人看到的就是“2035”,而不是单个的数字。 比如说吧: ...P1=num[2]; //假设num[2]是0x5b,即"2"P20=1; //假设使能端是高有效,按实际情况来。delay(); //延长50ms应该可以把,不能太长(过0.1秒就能看出来了),最好也不要太短P1=num[0];P21=1;delay();...
参考: http://zhidao.baidu.com/question/168209662.html
简单来说比如显示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,跳至刷新显示数码管程序结束处) ;)刷新显示数码管程序结束