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

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单片机汇编语言

把各个花样写在子函数,中断中对变量加1,在判断是否大于5,大于5就对变量清零。因为你要5种花样。主函数判断变量的值,1时执行从左到右依次点亮,2时执行从左到右逐个依次熄灭。依次下去 include "reg51.h" // 包

while(1){recy=0xfe;for(k=1;k<=8;k++){ P1=recy;Delay(50000);recy=recy<<1;} }

利用单片机控制8个发光二极管,实现8个灯同时闪烁的控制程序 - 以51位例,使用P1的八个IO口控制.先定义:sbit LED0=P1^0; sbit LED1=P1^1;以此类推,定义八个.然后在主循环中:LED0=0;延时一段时间;LED0

电路很简单八个led灯接在p1口.运行后看到的效果是 从第一个灯开始 随着时间变化 二进制数的递减 所有的灯都会依次的点亮,当全部的灯都被点亮后再重新开始这个过程 一直循环下去 单片机是不是很有趣?下面是c语言程序源码

这个是用定时器0控制一个灯的亮和灭 include define uchar unsigned char define uint unsigned int /***/ uchar num;bit tt;sbit d=P1^0;/***主程序入口***/ void main(){ TMOD=0x01;TH0=(65535

delay_ms(1000);} }

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:

求一个单片机程序,要八个led灯依次点亮,同时一个数码管依次显示1-8 延时一秒 最好是汇编语言的

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数码管动态显示

;本程序晶振为12MHZ,数码管接P0口,led接P1.0口 LD BIT P1.0 ;led灯口 ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H ;50ms定时 SETB TR0 MOV R1,#10 MOV R0,#

void delay(unsigned int i); char LED;char TAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,//共阳极0~4数码管显示数据 0x92,0x82,0xF8,0x80,0x98,//共阳极4~9数码管显示数据 0xA0,0x83,0xa7,0xa1,0x84,0x8e}

led=0;lad=1;while(1){ XS(h);//调用数码管显示函数 if(a==0){h=10;fe=0;}//按键 A, LED 亮10秒 if(b==0){h=10;fe=1;}//按键 B, LED 灭10秒 } } /***/ void t0()interrupt 1//定

n1=fen/10; //第一个数码管显示分的十位 n2=fen%10; //第二个数码管显示分的个位 n3=miao/10; //第三个数码管显示秒的十位 n4=miao%10; //第四个数码管显示秒的个位 } display(n1,n2,n3,n4);} } }

2将二进制数码管的对应端口输出全部清零。3利用位运算符 << 将数值向左移动一位,并将最高位的数值存放到最低位。4将新的数值通过端口输出到相应的数码管上。5将程序延时一段时间后重复执行上述步骤,从而实现数字在数码

如果共阴,要取反 P0 = table[j%10]; // j 值的个位数 Delay(5); m++; if(m==97){//前面显示占用约10毫秒,所以100次就是1秒 if(j==0){//倒计时到0 P2=0;//关闭数码管 for

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

#include void delay(unsigned int i); char LED; char TAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,//共阳极0~4数码管显示数据 0x92,0x82,0xF8,0x80,0x98,//共阳极4~9数码管显示数据 0xA0,0x83,0xa7,0xa1,0x84,0x8e}; main() { unsigned char i; while (1) { LED = 0xfe; for (i = 0 ;i < 8 ; i++) { P0 = LED; delay(500); LED = LED << 1; LED = LED | 0x01; if (LED == 0x7f) break; } for (i = 0 ;i < 8 ; i++) { P0 = LED; delay(500); LED = LED >> 1; LED = LED | 0x80; } } } while(1) { a[0]=*s%10; //给显示数组赋值 a[1]=*s/10; a[2]=10; a[3]=*m%10; a[4]=*m/10; a[5]=10; /*******延时函数*************/ void delay(unsigned int i) { unsigned char j; for(i; i > 0; i--) for(j = 255; j > 0; j--); }
你这个数码管电路不完整,缺少具体的单片机引脚与这个电路的连接关系,所以,不能写显示程序。
1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。 2、#include "reg51.h"首先写出单片机的头函数。 3、#include "intrins.h"输入位移函数。 4、unsigned int count=0,led;定义函数。 5、输入主函数,定义单片机的端口,写入延时函数。 6、中断跳转,使流水灯运行起来。
#include uchar code table[]={ 0xfe,0xfd,0xfb,0xf7,0xf0,0xe0,0xd0,0xb0,0x70,0x00 }; void delay(z) { uchar i,j; for(i=0;i<z;i++) for(j=0;j<110;j++); } void main() { uchar i=0; while(1) { if(i==8) i=0; P1=table[i]; i++; delay(100); } 试试看不对得话找我
简单来说比如显示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,跳至刷新显示数码管程序结束处) ;)刷新显示数码管程序结束