0x90};//5-9 while(1) { P0 = SEG[n1]; //P0口,外接共阳数码管的段选端 delay(2000);n1++; if(n1 > 9) n1 = 0;} } 4个(任意个)共阳数码管的段选端,接在 P0,其位选,都接电源即可。
假设你的是共阳极数码管,P0接数码。按键接P2^0;include
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);} }
你这是用于一位静态数码管的显示程序,P0口接有一位共阴数码管。程序中有不少的错误。修改如下,这是仿真测试通过的:include
采用共阴极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:
设计用PLC控制数码管循环显示数字0-9,控制要求如下(1)按下启动按钮后,数码管从0开始显示,1s后显示1,再过1s后显示2,…,显示9,1s后再重新屏示0.如此循环。(2)当按下停止孩钮后,数码管烟灭。7数码营实际上是由7只
for (int num = 9; num >= 0; num--) { //从数字9到0循环 for (int i = 0; i < 7; i++) { //依次点亮数字的7个LED digitalWrite(ledPins[i], numPins[num][i]); //控制LED引脚输出高低电平
51单片机控制数码管循环显示0-9程序
采用共阴极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:
可以采用15点显示的,接P1.0~P2.4 15个点分别编号 以便记忆,例如15个灯全亮 00H 全灭7FFFH 根据1灭0亮 用二进制表示 再转换成16进制的输入到程序中 0-9显示的问题解决了下面就是循环的问题
STAR: MOV TEMP,#0 ;初始化计数器 STLOP: ACALL DISPLAY ;INC TEMP MOV A,TEMP CJNE A,#100,NEXT ;等于100重来 MOV TEMP,#0 NEXT: LJMP STLOP ;显示子程序 DISPLAY: MOV A,TEMP MOV B,#10 DIV AB MOV B
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;}
;;8051 ;;晶体振荡F=12Mhz ;;;KEY32 REG P3.2 ;ORG 0000H AJMP MAIN ORG 0003H RETI RETI ORG 000BH RETI ORG 0013H RETI RETI ORG 001BH RETI ORG 0023H RETI DB C0H ;0 ADRRESS 0024H DB F9H ;1
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
设计用PLC控制数码管循环显示数字0-9,控制要求如下(1)按下启动按钮后,数码管从0开始显示,1s后显示1,再过1s后显示2,…,显示9,1s后再重新屏示0.如此循环。(2)当按下停止孩钮后,数码管烟灭。7数码营实际上是由7只
单片机编程,从0到9的数字在LED上显示
1、程序下载到目标板之后,注意一下晶振频率,如果显示效果不佳,可以通过修改延时参数,调节刷新频率。2、这里采用的是共阳极编码二极管(公共端已经接VCC了),下载程序前,请注意自己到网上找编码,代替倒数第二行代码。
1、小建议,_用STC的51芯片替代AT的,_用595替代164。2、新建项目,做好准备。数码管段选表。延时函数。uchari;变量i;wk=1;打开位选,P0=0xf7;11110111第4位数码管显示,wk=0;关闭位选。while(1)//死循环效果
具体程序如下:include
就是i+1然后除以10 得到余数,这样i就能在0~9一直循环了 当i=9的时候 再运行i+1,这样等于10,再余10 就能回到0.
数码分为7段式(7个发光二级管)和8段式(8个发光二级管)的,而二极管的亮灭对应0x3F的一位(1或0),为0时灭,1为亮;比如 0x3f 就是 0b00111111 那么他对应的数码管的最外面一圈的二极管是1,是亮的,中间
依次显示0——9的数字,即当led = 0时,P2接受0xC0,对应数码显示0,当led = 1时,P2接受LED_CODE[1]=0xF9,对应显示1,依次类推,从而显示0——9。
单数码管循环怎么显示0到9?
需要先将该数字的代码输出到相应的七段数码管的阴极上,然后再通过将相应的阳极置高电平,来点亮该数字在数码管上的显示。通过控制不同数码管的阳极显示不同的数字,就可以在共阴七段数码管上实现同时显示多个数字的功能。
1、小建议,釆用STC的51芯片替代AT的,釆用595替代164。2、新建项目,做好准备。数码管段选表。延时函数。uchari;变量i;wk=1;打开位选,P0=0xf7;11110111第4位数码管显示,wk=0;关闭位选。while(1)//死循环
单片机汇编语言让数码管显示0到91、小建议,釆用STC的51芯片替代AT的,釆用595替代164。2、新建项目,做好准备。数码管段选表。延时函数。uchar i; 变量i;wk = 1;打开位选,P0 = 0xf7;1111 0111第4位数码管
include
设计用PLC控制数码管循环显示数字0-9,控制要求如下(1)按下启动按钮后,数码管从0开始显示,1s后显示1,再过1s后显示2,…,显示9,1s后再重新屏示0.如此循环。(2)当按下停止孩钮后,数码管烟灭。7数码营实际上是由7只
如何做数码管显示0-9数字的毕业设计
那就选择数码管吧,假设矩阵键盘连P1口,数码管连P0口,上电后数码管显示0,然后3*3键盘控制显示1~9,程序c语言如下:/***扫描法监测键盘,显示按键数值。我的板子是4*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);} }
chara[10]={0xff,0x3,0x9f,0x25,0xd,0x99,0x49,0x41,0x1f,0x1,0x9};三、设置数码管显示循环 数码管显示循环可以不用编写一次又一次的数码管显示代码,既方便又简洁。具体代码如下:for(int i=0;i
speaker=P2^0;void delay()//延时约400毫秒{uchar i,j;for(i=0;i<200;i++)for(j=0;j<250;j++);}main(){uchar i,key;P2=0xff;while(1){i=9;P1=table[i];i--;if(i>9)i=9;delay();}}
C0H ;0 ADRRESS 0024H DB F9H ;1 DB A4H ;2 DB B0H ;3 DB 99H ;4 DB 92H ;5 DB 82H ;6 DB F8H ;7 DB 80H ;8 DB 90H ;9 MAIN:MOV R0,#7FH ;CLR A ;CL MOV R0,A ;DJNZ R0,$CL ;初始
程序如下:include
1、小建议,釆用STC的51芯片替代AT的,釆用595替代164。2、新建项目,做好准备。数码管段选表。延时函数。uchari;变量i;wk=1;打开位选,P0=0xf7;11110111第4位数码管显示,wk=0;关闭位选。while(1)//死循环效
单片机数字9到0显示程序代码?
/*该程序是一个0-9单个数码管循环显示程序*/ #include #define uchar unsigned char #define uint unsigned int uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar a,t; sbit dula=P2^6; sbit wela=P2^7; void display(uchar a); void delay(uint z); void main() { dula=0; wela=0; t=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; while(1) { if(t==20) { t=0; a++; if(a==10) a=0; } display(a); } } void display(uchar a) { dula=1; P0=table[a]; dula=0; wela=1; P0=0xfe; wela=0; P0=0xff; delay(1); } void timer0()interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; t++; } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }这样简单的问题写10000字有点麻烦啊。高分估计也没有办法写。
#include #define uchar unsigned char uchar key,key_time,ajbz; uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; /******************延时函数**********************/ void delay(uchar k) { uchar j; while(k--) for(j=0;j<50;j++); } /************键盘扫描及翻译函数***************/ uchar key_jz() { uchar key_dk; c: ajbz=0; //按键标志位:“0”为无按键按;“1”有按键按下 P1 = 0xf0; //向P1端的高4位送高电平低4位送低电平 key_dk = P1; //读取p1端口的值送给key_dk P1 = 0x0f; //向P1端的高4位送低电平低4位送高电平 key_dk |= P1; //将P1端口的值与key_dk按位或并送回key_dk if((key_dk&0xff)!=0xff) //判断是否有按键按下 delay(10); //延时去抖 if((key_dk&0xff)!=0xff) //再次判断是否有按键按下确定是否真的有键按下 { switch(key_dk) //翻译key_dk得到按键键值 { case 0x7d: key= 10;ajbz=1;break; case 0x7e: key= 0;ajbz=1;break; case 0xbb: key= 3;ajbz=1;break; case 0xbd: key= 2;ajbz=1; break; case 0xbe: key= 1;ajbz=1;break; case 0xdb: key= 6;ajbz=1;break; case 0xdd: key= 5;ajbz=1;break; case 0xde: key= 4;ajbz=1;break; case 0xeb: key= 9;ajbz=1;break; case 0xed: key= 8;ajbz=1;break; case 0xee: key= 7;ajbz=1;break; default: goto c; } while((P1&0x0f)!=0x0f); //等待按键释放 } return key; } void int_0()interrupt 1 { key_time++; if(key_time==160) { key_jz(); } } void display(uchar i) { P2=0x01; P0=tab[i/10]; delay(20); P0=0xff; P2=0x02; P0=tab[i%10]; delay(20); P0=0xff; } void main() { uchar wz,t; TMOD=0x02; TH0=6; TL0=6; TR0=1; EA=1; ET0=1; t=0; while(1) { display(t); if((ajbz==1)&&(key<10)) { switch(wz) { case 0:wz++; t=t%10+key*10;break; case 1:wz++;t=t/10*10+key;break; } ajbz=0; } if((ajbz==1)&&(key=10)) { t=0; wz=0; ajbz=0; } } }程序就这样~要仿真留邮箱~
+‘0’ 或者 +0x30,估计你是这个意思
#include #define uint unsigned int #define uchar unsigned char uchar temp,aa,bai,shi,ge; sbit dula=; sbit wela=; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void display(uchar bai,uchar shi,uchar ge); void delay(uint z); void init(); void main() { init();// while(1) { if(aa==20) { aa=0; temp++; if(temp==100) { temp=0; } bai=temp/100; shi=temp%100/10; ge=temp%10; } display(bai,shi,ge); } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void display(uchar bai,uchar shi,uchar ge) { dula=1; P0=table[bai]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(1); dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay(1); dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(1); } void init() { wela=0; dula=0; temp=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; }
#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,其位选,都接电源即可。