delay(1);}void init() // 初始化子函数 { temp=0;TMOD=0x01;TH0=(65536-45872)/256;TL0=(65536-45872)%256; //定时器初值,定时50ms(12M晶振),由于考虑MCU指令处理时间,此处赋初值位45872 EA=1;ET0=1
uchar ledtab[]={0x66,0x79,0x68,0x68,0x5c, //HELLo 0x00,0x39,0x6d,0x00,0x3f,0x66}; // C51 04 0x66,0x79,0x68,0x68,0x5c} //HELLo uchar disdat[6],num;void dischg(){ disdat[0]=num;
void delay(uint z);void display(uchar num1,uchar num2,uchar num3);uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//uchar code tablewe[]={0xfe,0xfd,0xfb};uchar n
LedOut[4]=Disp_Tab[LedNumVal%10000/1000]; //千位 LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80; //百位带小数点 LedOut[6]=Disp_Tab[LedNumVal%100/10]; //十位 LedOut[7]=Disp_Tab[LedNum
求利用单片机89c51一个6位LED数码管显示功能 程序
采用共阴极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:
功能说明 用一位数码管循环显示0~9数字,数字变换间隔的时间为1秒。程序:SMG2.ASM 01: START: MOV DPTR, #TABLE ; 存表 02: MOV R0, #0 ; 设定初始值 03: LOOP : MOV A, R0 04: MOVC A, @A+DPTR
LOOP1:MOV A,20H; 9-0 MOVC A,@A+DPTR MOV P0,A DEC 20H CALL DELL;YANSHI DJNZ R0,LOOP1 MOV 20H,#0;0-9 MOV R0,#10 LOOP2:MOV A,20H; 0-9 MOVC A,@A+DPTR MOV P0,A INC 20H CALL DELL;YANSHI
INC R1 CJNE R1,#0AH,DISP ;循环显示0-9这10个数据 SJMP TAB: DB C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H ;共阳码表 DELAY: MOV R4,#2 ;延时子程序 DLY100MS: MOV R5,#200 DLY5M
1、小建议,釆用STC的51芯片替代AT的,釆用595替代164。2、新建项目,做好准备。数码管段选表。延时函数。uchari;变量i;wk=1;打开位选,P0=0xf7;11110111第4位数码管显示,wk=0;关闭位选。while(1)//死循环效
以显示数字“0”为例,c语言程序如下:include
单片机数字9到0显示程序代码?
采用AT89C2051的6位电子钟原理如下图所示,只要硬件连接无误,保证成功。另外图中的SET按纽用于校准时间。按住2秒以上进入校准时间状态及换档和退出,快速点触用于调节时间数值。三极管采用9015即可。数码管最好采用红色的共阳型LED数码管,
sbit key1=P3^6;sbit key2=P3^7;uchar now_time[3],wei,d[3]={0,0,0};uchar code s[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e };void delay
;可以在此扩展想要的功能 SJMP LOOP ;--- ;十六进制转换为BCD HBCD:MOV B,#10 DIV AB SWAP A ORL A,B RET ;--- DELAY:MOV R3,#50 DELAY1:MOV R4,#100 DJNZ R4,
TH0=(65536-45872)/256;TL0=(65536-45872)%256; //定时器初值,定时50ms(12M晶振),由于考虑MCU指令处理时间,此处赋初值位45872 EA=1;ET0=1;TR0=1;}void timer0() interrupt 1 //定时计数器中断 { TH0=(65
void t0isr() interrupt 1 { TH0=0xf4;TL0=0x48;switch(number){ case 0:P2=0x01;P0=distab[1];break;case 1:P2=0x02;P0=distab[2];break;case 2:P2=0x04;P0=distab[3];break;case 3:P2=0x08;P0=d
sbit dula=P2^6;sbit wela=P2^7;void delay(uint z);void display(uchar num1,uchar num2,uchar num3);uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//uchar code table
LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80; //百位带小数点 LedOut[6]=Disp_Tab[LedNumVal%100/10]; //十位 LedOut[7]=Disp_Tab[LedNumVal%10]; //个位 for( i=0; i<9; i++){ P0 =
单片机89c51一个6位LED数码管显示功能 程序,希望能准确点的程序,只显示6位数字就好。
1、小建议,釆用STC的51芯片替代AT的,釆用595替代164。2、新建项目,做好准备。数码管段选表。延时函数。uchari;变量i;wk=1;打开位选,P0=0xf7;11110111第4位数码管显示,wk=0;关闭位选。while(1)//死循环
你这是用于一位静态数码管的显示程序,P0口接有一位共阴数码管。程序中有不少的错误。修改如下,这是仿真测试通过的:include
P0=table[d1];Cxs=0;YS(10);Cxs=1;//小时个位 P0=table[d2];Dxs=0;YS(10);Dxs=1;//小时十位 P0=table[d3];Axs=0;YS(10);Axs=1;//分钟个位 P0=table[d4];Bxs=0;YS(10);Bxs=1;//分钟十位
这是四位数的秒计数器,用四位一体共阴数码管显示,P0口输出段码,P2口输出位码。用定时器定时器50ms,采用中断方式,中断20次为1秒,显示数字加1。
;送P3口驱动7段数码管显示 INC R2 ;修改要显示的下一个数 LCALL DELAY ;调用延时子程序(稳定显示)DJNZ R5,MAIN ;循环显示次数减1 不等于0 继续显示 JMP START ;从新转主程序 开始新一轮的显示 DELAY:MOV R0,
单片机如何控制LED数码管循环显示数字0至9
电路原理:就是单片机产生4位二进制码(BCD码),通过74L147 解码后送给给led显示0~9的数字(低电平有效),然后通过74L138进行led段选(单片led的片选信号),这就构成了led扫描显示,利用人眼的视觉效应就能看清显示的
多位数码管无法实现静态显示,物理上它们就存在冲突。除非每一位显示的内容都相同……如果执着于用静态显示,可以用6个1位数码管,缺点是需要大量的管脚来控制(可以用串扩并方案或地址映射扩展方案,成本上得不偿失)。
端口接动态数码管原理。P0端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,P1.7接一个开关,当开关接高电平时,显示“12345”字样;当开关接低电平时,显示“HELLO”字样。
数码管显示,无非两种显示方式,一种是静态显示,每个管有独立的显示总线,一种就是动态扫描,显示总线是公用的,利用人眼0.1S视觉保留,0.1S内逐步显示每个管就OK了
du = 1; //段选开 data = leddata[i]; //送入段选数据 du = 0; //段选关 delay(500); //延时 } } }
单片机接了6块LED显示器,如何让其显示123456?
数码管显示,无非两种显示方式,一种是静态显示,每个管有独立的显示总线,一种就是动态扫描,显示总线是公用的,利用人眼0.1S视觉保留,0.1S内逐步显示每个管就OK了8位数码管动态显示,单片机直接片选,先显示201903,再显示abcdef,再显示123456,用C语言编程 ,重复循环,仿真试试。 #include #define uchar unsigned char // 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; void delay(uchar z) { uchar i,j; for(i=0;i<120;i++) for(j=0;j<z;j++); } void main() { uchar k; while(1) { for(k=0;k<50;k++) { P0=0xff; P2=LED7Code[0]; P0=0xfe; delay(5); P0=0xff; P2=LED7Code[0]; P0=0xfd; delay(5); P0=0xff; P2=LED7Code[2]; P0=0xfb; delay(5); P0=0xff; P2=LED7Code[0]; P0=0xf7; delay(5); P0=0xff; P2=LED7Code[1]; P0=0xef; delay(5); P0=0xff; P2=LED7Code[9]; P0=0xdf; delay(5); P0=0xff; P2=LED7Code[0]; P0=0xbf; delay(5); P0=0xff; P2=LED7Code[3]; P0=0x7f; delay(5); } for(k=0;k<50;k++) { P0=0xff; P2=LED7Code[0]; P0=0xfe; delay(5); P0=0xff; P2=LED7Code[0]; P0=0xfd; delay(5); P0=0xff; P2=LED7Code[10]; P0=0xfb; delay(5); P0=0xff; P2=LED7Code[11]; P0=0xf7; delay(5); P0=0xff; P2=LED7Code[12]; P0=0xef; delay(5); P0=0xff; P2=LED7Code[13]; P0=0xdf; delay(5); P0=0xff; P2=LED7Code[14]; P0=0xbf; delay(5); P0=0xff; P2=LED7Code[15]; P0=0x7f; delay(5); } for(k=0;k<50;k++) { P0=0xff; P2=LED7Code[0]; P0=0xfe; delay(5); P0=0xff; P2=LED7Code[0]; P0=0xfd; delay(5); P0=0xff; P2=LED7Code[1]; P0=0xfb; delay(5); P0=0xff; P2=LED7Code[2]; P0=0xf7; delay(5); P0=0xff; P2=LED7Code[3]; P0=0xef; delay(5); P0=0xff; P2=LED7Code[4]; P0=0xdf; delay(5); P0=0xff; P2=LED7Code[5]; P0=0xbf; delay(5); P0=0xff; P2=LED7Code[6]; P0=0x7f; delay(5); } } }
一个四联共阴再加一个二联共阴数码管,可以用六片595级联静态显示,也可以动态刷新(频率>60Hz)
#include #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; uchar code table[]={0x76,0x79,0x38,0x38,0x3f}; uchar code table_2[]={0xfe,0xfd,0xfb,0xf7,0xef}; void delay(uint t) { uint x,y; for(x=0;x<t;x++) for(y=0;y<110;y++); } void main() { while(1) { uchar i; while(1) { for(i=0;i<5;i++) { wela=1; P0=table_2[i]; wela=0; dula=1; P0=table[i]; dula=0; delay(1); } } } } 用C写了个 汇编纠结!
#include #include void delay(unsigned int i); //函数声名 char DelayCNT;//定义变量 //此表为 LED 的字模, 共阴数码管 0-9 - unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制 //此表为8个数码管位选控制, 共阴数码管 1-8个 - unsigned char code dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; //位选控制 查表的方法控制 /************主函数**********************/ main() { unsigned int i,LedNumVal=1 ; //变量定义 unsigned int LedOut[10]; //变量定义 DelayCNT=0; while(1) { if(++DelayCNT>=20) //控制数字变化速度 { DelayCNT=0; //20个扫描周期清零一次 ++LedNumVal; //每隔20个扫描周期加一次 } LedOut[0]=Disp_Tab[LedNumVal%10000/1000]; LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80; LedOut[2]=Disp_Tab[LedNumVal%100/10]; LedOut[3]=Disp_Tab[LedNumVal%10]; LedOut[4]=Disp_Tab[LedNumVal%10000/1000]; //千位 LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80; //百位带小数点 LedOut[6]=Disp_Tab[LedNumVal%100/10]; //十位 LedOut[7]=Disp_Tab[LedNumVal%10]; //个位 for( i=0; i<9; i++) { P0 = LedOut[i]; P1 = dispbit[i]; //使用查表法进行位选 /* switch(i) //使用switch 语句控制位选 { case 0:P1 = 0x7F; break; case 1:P1 = 0xbF; break; case 2:P1 = 0xdF; break; case 3:P1 = 0xeF; break; case 4:P1 = 0xf7; break; case 5:P1 = 0xfb; break; case 6:P1 = 0xfd; break; case 7:P1 = 0xfe; break; } */ delay(150); //扫描间隔时间 太长会数码管会有闪烁感 } } } void delay(unsigned int i) { char j; for(i; i > 0; i--) for(j = 200; j > 0; j--); }
把邮箱给我我发给你