可以采用15点显示的,接P1.0~P2.4 15个点分别编号 以便记忆,例如15个灯全亮 00H 全灭7FFFH 根据1灭0亮 用二进制表示 再转换成16进制的输入到程序中 0-9显示的问题解决了下面就是循环的问题
设计用PLC控制数码管循环显示数字0-9,控制要求如下(1)按下启动按钮后,数码管从0开始显示,1s后显示1,再过1s后显示2,…,显示9,1s后再重新屏示0.如此循环。(2)当按下停止孩钮后,数码管烟灭。7数码营实际上是由7只
MOVC A,@A+DPTR ;查表 求要显示的数的编码 MOV P3,A ;送P3口驱动7段数码管显示 INC R2 ;修改要显示的下一个数 LCALL DELAY ;调用延时子程序(稳定显示)DJNZ R5,MAIN ;循环显示次数减1 不等于0 继续显示 J
TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;数值1到9的共阳极编码 END 补充说明两点:1、程序下载到目标板之后,注意一下晶振频率,如果显示效果不佳,可以通过修改延时参数,调节刷新频率。2、这里采用
方法如下:include "reg51.h"#define uchar unsigned char#define uint unsigned intuchar code table_numberP[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar code table[] = {0x3f,0x06,0x5b,0x
单数码管循环怎么显示0到9?
要让51单片机共阴数码管显示数字,只需要将单片机的P2端口输出数字对应的段码即可。以显示数字“0”为例,c语言程序如下:include
uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9 unsigned char times=0,sec=0,sec01,scanled;unsigned char disdat[2];void dischg(){ disdat[0]=sec01;disdat[1]
1、小建议,釆用STC的51芯片替代AT的,釆用595替代164。2、新建项目,做好准备。数码管段选表。延时函数。uchari;变量i;wk=1;打开位选,P0=0xf7;11110111第4位数码管显示,wk=0;关闭位选。while(1)//死循环效
一、设置延时函数 延时函数在单片机中有着让现实延时的能力,本程序中可以通过采用for循环方式进行延时,具体代码如下:void delay(){ uinti,j;for(i=100;i>0;i--)for(j=1000;j>0;j--);} 二、设置数码管显
51单片机 让数码管自动显示0至9的C程序。有没有比这个更简单的????
a++; if(a>5) { a=0; b++; if(b>9) b=0; P2=shu[b]; } }这是简化的仿真图,实际电路上要有限流电阻。否则要烧IO或者数码管。
void delay(){ uint16 i=1000;while(i--);} void main(){ uchar n ;P2=0xfe;P1=0xff;while(1){ if(k1==0){ if(n>=9) n=0;else n++;P0=shuzu[n];while(!k1);delay();while(!k1);} }
MAIN: MOV A,R5 MOV DPTR,#TAB MOV A,@A+DPTR LCALL DISPLAY CJNE,R5,#10,START ;次数到,从头再来 LJMP MAIN DISPLAY: ;数码管显示子程序 LCALL DLY10MS DLY10MS: ;数码管显示延时 TAB
ORG 00H LJMP MAIN ORG 30HMAIN: MOV DPTR, #TABLE MOV R7, #10 MOV A, #0LOOP: LCALL DISPLAY LCALL DELAY INC A DJNZ R7, LOOP LJMP MAINDISPLAY:
pinMode(ledPins[i], OUTPUT);} } void loop() { for (int num = 9; num >= 0; num--) { //从数字9到0循环 for (int i = 0; i < 7; i++) { //依次点亮数字的7个LED digitalWrite(ledPins
一、设置延时函数 延时函数在单片机中有着让现实延时的能力,本程序中可以通过采用for循环方式进行延时,具体代码如下:void delay(){ uinti,j;for(i=100;i>0;i--)for(j=1000;j>0;j--);} 二、设置数码管显
采用共阴极LED数码管,51单片机P1口输出数据:ORG 0000H JMP MAIN ORG 0100H MAIN:MOV DPTR,#TAB MOV R1,#00H DISP:MOV A,R1 MOVC A,@A+DPTR MOV P1,A LCALL DELAY INC R1 CJNE R1,#0AH,DISP SJMP TAB:
c语言编码,单片机五个数码管从0到9显示
数组定义简单,而且访问很方便。所有元素类型相同,在数码管显示程序中可以让程序代码减少。数组代码如下:chara[10]={0xff,0x3,0x9f,0x25,0xd,0x99,0x49,0x41,0x1f,0x1,0x9};三、设置数码管显示循环
51单片机编写4个LED数码管同时循环显示0—9的数字的程序。芝士回答void t1isr()interrupt 3/显示{ TH1=0xec;TL1=0x78;P2=1< < p=""><> P0=~ledtab[tiao];scanled+;scanled%4;}单片机如何同时控制四位数码管
void delay(){ uint16 i=1000;while(i--);} void main(){ uchar n ;P2=0xfe;P1=0xff;while(1){ if(k1==0){ if(n>=9) n=0;else n++;P0=shuzu[n];while(!k1);delay();while(!k1);} }
define SEG_EnP1//数码管位驱动接口 define SEG_AllOff(SEG_En&=0xf0)//关闭所有数码管(位驱动)define DisTimeAt1msCount4//单'位'数码管显示时间,数码管刷新频率f=1/(N×t),其中 N为数码管位数, t为单'位'数
define TubeNumber 6//数码管个数 define KeyLine 4//矩阵按键行数 define KeyColumn 4//矩阵按键列数 //数码管真值表 uchar code LED_Number[]={0x0C,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//
采用共阴极LED数码管,51单片机P1口输出数据:ORG 0000H JMP MAIN ORG 0100H MAIN:MOV DPTR,#TAB MOV R1,#00H DISP:MOV A,R1 MOVC A,@A+DPTR MOV P1,A LCALL DELAY INC R1 CJNE R1,#0AH,DISP SJMP TAB:
delay(2000);n1++; if(n1 > 9) n1 = 0;} } 4个(任意个)共阳数码管的段选端,接在 P0,其位选,都接电源即可。
51单片机问题。。编写4个LED数码管同时循环显示0—9的数字 的程序。 用C语言写。。
该程序的原理是动态扫描,即每一时刻,只让一个数码管亮。让数码管从第一个到地第八个依次快速地显示,给人的视觉效果就是八个数码管同时显示。/*程序让八个数码管显示数字0-7。*/ include
//显示567- for(d = 0;d<20;d++){
数码管是LED构成的,你要显示数字,把对应的LED点亮,就构成了数字 由于是共阴极的,所以要点亮对应的LED,只需要在要点亮的LED的阳极施加高电平即可,即给单片机的IO口送1,不亮的LED送低电平,即0.你好好看我给你图,
3FH,06H,5BH,4FH,66H ;01234 6DH,7DH,07H,7FH,6fh ;56789 以下为简易8路抢答器的例程:include
比如 你要显示 数字:num = 58 十位数是5 ,求法就是 int shi = num / 10 个位数是8,求法就是 int ge = num % 10 求百位数,求千位等等都是这样的 3)抄个运算法口诀:优先级等级口诀圆方括号、箭头一句号
c语言如何编程点亮一个数码管显示数字
void delay(){ uint16 i=1000;while(i--);} void main(){ uchar n ;P2=0xfe;P1=0xff;while(1){ if(k1==0){ if(n>=9) n=0;else n++;P0=shuzu[n];while(!k1);delay();while(!k1);} }
if(++t==250) //每个数字刷新显示一段时间 { t=0;if(++Num_Index==10) Num_Index=0; //显示下一个数字 } break;case 1:P0=~xdat[xi];P3=0xff;P3=ydat[yi];if(++t==250) //每个数字刷新显示一段时间
ORG 0000H JMP BEGIN ORG 000BH LJMP T0ISR ORG 0030HTABLE: ; 共阴极数码管显示代码表 DB 3FH,06H,5BH,4FH,66H ;01234 DB 6DH,7DH,07H,7FH,6fh ;56789;---BEGIN: MO
新建项目,做好准备。数码管段选表。延时函数。uchari;变量i;wk=1;打开位选,P0=0xf7;11110111第4位数码管显示,wk=0;关闭位选。while(1)//死循环效果{}。用两个计数器实现,一个计数器作为个位计数,另一个为
用P0口输出到数码管显示0-9 编写:jzy23 交流:paulucy@126.com / include
RET TABLE: ; 共阴极数码管显示代码表 DB 3FH,06H,5BH,4FH,66H ;01234 DB 6DH,7DH,07H,7FH,6fh ;56789 END
汇编语言 数码管显示0-9.每个数字闪烁三次,再显示下一个数字,如此循环。求程序,,
代表当前指令的地址,如: data segment str1 db a,b,c,d leng equ $-str 就是当前地址减去str1的初始地址,即可得到str1的长度。 在字符串中是结束标志,就是字符串遇到$才会结束,类似于c语言中字符串中结尾的'0'。 扩展资料: 语言特点 汇编语言是计算机提供给用户的最快最有效的语言,也是能够利用计算机的所有硬件特性并能够直接控制硬件的唯-语言。但是由于编写和调试汇编语言程序要比高级语言复杂,因此目前其应用不如高级语言广泛。 汇编语言比机器语言的可读性要好,但跟高级语言比较而言,可读性还是较差。不过采用它编写的程序具有存储空间占用少、执行速度快的特点,这些是高级语言所无法取代的。 参考资料来源:百度百科-$ (汇编语言中字符串结束的标志)“$”是汇编语言中的一个预定义符号,等价于当前正汇编到的段的当前偏移值。例如eg:指令“jmp $+3”中的“$”表示当前这条指令在代码段中的偏移量。 汇编语言, 即第二代计算机语言,用一些容易理解和记忆的字母,单词来代替一个特定的指令,比如:用“ADD”代表数字逻辑上的加减,“ MOV”代表数据传递等等,通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功能。 扩展资料: 语言特点 汇编语言是计算机提供给用户的最快最有效的语言,也是能够利用计算机的所有硬件特性并能够直接控制硬件的唯-语言。但是由于编写和调试汇编语言程序要比高级语言复杂,因此目前其应用不如高级语言广泛。 汇编语言比机器语言的可读性要好,但跟高级语言比较而言,可读性还是较差。不过采用它编写的程序具有存储空间占用少、执行速度快的特点,这些是高级语言所无法取代的。在实际应用中,是否使用汇编语言,取决于具体应用要求、软件开发时间和质量等方面作权衡。 汇编器 典型的现代汇编器(assembler)建造目标代码,由解译组语指令集的易记码(mnemonics)到操作码(OpCode),并解析符号名称(symbolic names)成为存储器地址以及其它的实体。 使用符号参考是汇编器的一个重要特征,它可以节省修改程序后人工转址的乏味耗时计算。基本就是把机器码变成一些字母而已,编译的时候再把输入的指令字母替换成为晦涩难懂机器码 参考资料来源:百度百科- $ (汇编语言中字符串结束的标志)
可能原因:1.你的延时时间可能太短,超过人眼视觉暂留时间,你可以改你的delayms(3)或者直接把delay 函数里的110改小一些(当然改了110就不是1ms一次了,不过本身就不是精确计时无所谓) 2.你的数码管开关顺序不对,不知道你用的是共阴还是共阳,不过一般是写完数据后再开数码管控制位,如果你的程序里1是开,0是关的话,那么这个程序相当于是两个数码管在P1=table之后会有一个同时工作的时间,之后才关断其中一个,这时数码管的显示会受到影响。推荐编写顺序是shu12=0; shu11=1; P1=table[shi1]; delayms(5); shu11=0; shu12=1; P1=table[ge1]; delayms(5);这样保证一个时间内只有一个数码管工作,新写入的数据不会对另一个数码管造成影响。下面的程序同样采用这种顺序。 3.虽然可能性不大,不过也有可能是硬件电路的连接接触不良导致的信号跳变,这个万用表测下就能知道了
我这个程序是在PROTUES仿真上做的 你可以根据程序自己画电路图 很简单的 这里用到了 两片 74HC573 芯片 显示0---F #include #include #define uchar unsigned char #define uint unsigned int sbit duan=P1^6; sbit wei=P1^7; uchar temp=0x01; uchar code tab[]={ 0xc0,0xf9,0xA4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; uchar a=0; void delay(uint z); void main() { while(1) { wei=1;P2=temp;wei=0; duan=1;P2=tab[a];duan=0; delay(300); temp=_crol_(temp,1); a++; if(a==16){a=0;}} } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=120;y>0;y--);}
#include //----------------------------------------------- void delay(unsigned int i) //延时 { unsigned char j; while(i--) for(j = 0; j < 115; j++); } //----------------------------------------------- void main(void) { unsigned char n1; unsigned char code SEG[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, //0-4 0x92, 0x82, 0xf8, 0x80, 0x90};//5-9 while(1) { P0 = SEG[n1]; //P0口,外接共阳数码管的段选端 delay(2000); n1++; if(n1 > 9) n1 = 0; } } 4个(任意个)共阳数码管的段选端,接在 P0,其位选,都接电源即可。
#include //----------------------------------------------- void delay(unsigned int i) //延时 { unsigned char j; while(i--) for(j = 0; j < 115; j++); } //----------------------------------------------- void main(void) { unsigned char n1; unsigned char code SEG[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, //0-4 0x92, 0x82, 0xf8, 0x80, 0x90};//5-9 while(1) { P0 = SEG[n1]; //P0口,外接共阳数码管的段选端 delay(2000); n1++; if(n1 > 9) n1 = 0; } }
可以通过代码优化的方式来简化代码。 一、设置延时函数 延时函数在单片机中有着让现实延时的能力,本程序中可以通过采用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中的数据类型不同。
假设你的是共阳极数码管,P0接数码。按键接P2^0; #include typedef unsinged int uint; sbit key=P2^0; unsigned char tab[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void denay(uint x) { uint i,j; for(i=x;i>0;i--) for(j=110;j>0;j--) } void main() { uchar a; while(1) { P0=tab[a]; if (key1==0) {delay(10); if(key==0) { while(!key1); a++; if(a==10) a=0; } } }