51单片机控制数码管循环显示0-9程序

作者&投稿:万拜 (若有异议请与网页底部的电邮联系)
谁有51单片机数码管循环显示0-9和2个数码管显示00-99的c程序?~

#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,其位选,都接电源即可。

采用共阴极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: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDELAY: MOV R4,#2
DELAY100MS:MOV R5,#200
DELAY5MS: MOV R6,#250
LOOP: DJNZ R6,LOOP
DJNZ R5,DELAY5MS
DJNZ R4,DELAY100MS
RET

#include<reg52.h>
#define uint unsigned int
void delay7ms(void) //误差 -0.217013888891us
{
unsigned char a,b;
for(b=208;b>0;b--)
for(a=14;a>0;a--);
}
void delay2ms(void) //误差 -0.217013888889us
{
unsigned char a,b;
for(b=80;b>0;b--)
for(a=10;a>0;a--);
}

void main(void)
{
uint led[10]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint m,n=0,a=0;
for(m=0;m<=10;m++)
{
while(a<30)
{
if(m==10)
{
m=0;
n++ ;
if(n==10)
n=0;
}
P0=led[m];
P2=0x40;
delay7ms();
P2=0x00;
delay2ms();
P0=led[n];
P2=0x80;
delay7ms();
P2=0x00;
delay2ms();

a++;
}
a=0;
}
}

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit duanxuan=P2^6;
sbit weixuan=P2^7;
uchar num,time;
uchar code biaoge[]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f
};
/*void yanshi(uint z);*/
void chushihua();
int main(void)
{
chushihua();
weixuan=1;
P0=0xfe;
weixuan=0;
while(time-10)
{
duanxuan=1;
P0=biaoge[time];
duanxuan=0;
}
}
/*void yanshi(uint z)
{
uint x,y;
for(x=100;x>0;x--)
for(y=z;y>0;y--);
}*/
void chushihua()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void zhongduan() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==20)
{
num=0;
time++;
if(time==10)
{
time=0;
}
}
}

我问一下为什么有的书上写的程序,在主程序中会有屏蔽高半字节这一句,就是MOV A R3,ANL,A#0FH,


怎么用单片机控制一个数码管??
1、LS147优先编码器的输入端和输出端都是低电平有效,即当某一个输入端低电平0时,4个输出端就以低电平0的输出其对应的8421BCD编码。当9个输入全为1时,4个输入出也全为1,代表输入十进制数0的8421BCD编码输出。2、不用单片机,用数字电路实现很容易呀。用一片10线-4线编码器,接10个按键,输...

怎样用单片机控制数码管?
1、2、6、7号引脚是8421BCD码的的输入端,一般可以使用单片机控制 9、10、11、12、13、14、15号引脚分别是对应七段数码管的几个引脚,对着接就行了,具体的都是在图上有所展示 4号引脚是BI引脚:引脚的功能是消隐控制输入端,很简单的理解,当4号引脚的输入是0(低电平)时,不管输入什么信号,...

单片机控制数码管1 按键控制开始、数码管循环显示0-F.时间间隔为1s的程...
P1口外接共阳极的8段数码显示器。P3.2外接一个按键,按下后,接地,用来起动.ORG 0000H JB P3.2,MOV R2, #0 LOOP:INC R2 MOV A, R2 ANL A, #0FH MOV DPTR, #TAB MOVC A, @A+DPTR MOV P1, A LCALL DL500MS LCALL DL500MS SJMP LOOP TAB:D...

怎样用单片机控制数码管的显示?
首先,假设你有一个共阴极数码管,并且它连接到单片机的P0口。每个数码管的段(a, b, c, d, e, f, g, dp)通过限流电阻连接到P0口的相应位。共阴极数码管的公共端(阴极)连接到地。在这个例子中,我们定义了一个段码表seg_table,它包含了数字0到9对应的7段数码管的段码。在主循环中,我们...

如何用单片机控制数码管
单片机控制数码管分两种。1、静态数码管,控制比较简单,只送段码就可以了。比如:P1=0xc0,共阳极的话,将显示0 2、动态数码管,控制就比较复杂一些,需要先送位选码,再送段码,而且要不断的重复执行这个过程,利用视觉暂留原理,达到显示的效果。

单片机是否能用一个按键控制数码管的显示图?
0x82,0xf8,0x80,0x90}; \/\/共阳数码管编码号 ucharnum;voidkeyscan();\/\/键扫描函数 voiddisplay();voiddelayms(uint);voidmain() \/\/主函数 { while(1)\/\/大循环 { \/\/\/display();\/\/显示函数 keyscan(); \/\/键扫描函数 display();\/\/显示函数 }} 单片机(Microcontrollers)是一种集成电路...

单片机如何控制LED数码管循环显示数字0至9
设计用PLC控制数码管循环显示数字0-9,控制要求如下(1)按下启动按钮后,数码管从0开始显示,1s后显示1,再过1s后显示2,…,显示9,1s后再重新屏示0.如此循环。(2)当按下停止孩钮后,数码管烟灭。7数码营实际上是由7只发光二极管组成,要显示0-9数字,首先确定数字与7只发光管(即PC的输出控制点)的...

单片机按键控制数码管显示
1、按键子程序:实现按第一个键使键值keyvalue=1,第二个键使键值keyvalue=2,第三个键使键值keyvalue=3 2、显示子程序 定义3个字节的显示缓存,如dispbuf1,dispbuf2,dispbuf3 使dispbuf1的数字显示在第一个数码管上,dispbuf2的数字显示在第2个数码管上,dispbuf3的数字显示在第3个数码管上 3...

怎么控制单片机的数码管
单个数码管可以通过单片机的IO口对数码管进行控制,数码管也叫八段数码管,就是八个数码管组成的,分为a、b、c、d、e、f、g和dp(由低位到高位),用a、b、c、d、e、f、g的亮灭组成数字、字母或图形,对相应IO口写1或0就可以控制了。要是多位数码管则需要先写数据后再选择某一位,利用人眼...

如何用单片机控制LED数码管?
1、 数码管显示演示程序: 在8个LED数码管上依次显示1,2,3,4,5,6,7,8。引用端口:数码管数据p0,数码管控制p2;DIS_DIGIT EQU 40H;位选通值, 传送到P2口用于选通当前数码管的数值,; 如等于0xfe时, 选通P2.0口数码管DIS_INDEX DATA 41H;显示索引, 用于标识当前显示的数码管和缓冲...

吴中区15968907893: 51单片机c语言设计,按键控制数码管,依次按下显示0到9循环 -
频肺诺其: #include<reg51.h> sbit k1=P1^0; #define uint16 unsigned int #define uchar unsigned char uchar code shuzu[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay() { uint16 i=1000;while(i--); } void main() { uchar n ; P2=0xfe; P1=0xff; ...

吴中区15968907893: 51单片机 编写4个LED数码管同时循环显示0—9的数字 的程序. -
频肺诺其: #include<reg51.h>#define uchar unsigned char uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9 uchar time,scanled,tiao; uchar disdat[6]="201803"; void delay(unsigned int x) {unsigned int i,j;for(i=0;i<x;i++)...

吴中区15968907893: AT89S51单片机怎么用汇编语言让数码管从0到9显示 -
频肺诺其: START:MOV R5,#00H ;次数计数单元R5,后面的程序应该看得懂了,都是教科书式的 MAIN: MOV A,R5 MOV DPTR,#TAB MOV A,@A+DPTR LCALL DISPLAY CJNE,R5,#10,START ;次数到,从头再来 LJMP MAIN DISPLAY: ;数码管显示...

吴中区15968907893: 51单片机接74ls164驱动数码管的C程序,实现控制数码管0到9循环显示 -
频肺诺其: #include<reg51.h> code table[16]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 }; unsigned char date; void delayms(unsigned int cc) { unsigned int x,y; for(y=cc;y>0;y--) for(x=500;x>0;x--); } void main() { while(...

吴中区15968907893: 51单片机0到9动态显示程序 -
频肺诺其: 动态显示的数码和你的数码管的数据线接法有直接的联系的,显示代码是不一样的,你可以通过如下方法自行测试,做一个简单的循环,循环代码为,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,分别找出每个数据对应显示的数码管的,a,b,c,d,e,f,g,dp的哪一位,然后整理一下就可以得出0-9的数字显示码了.

吴中区15968907893: 51单片机,数码管循环显示0 - 9,当每按一次中断,数码管显示0,延时一段时间后恢复之前中断时的显示 -
频肺诺其: 单片机有很多种,编程要根据不同单片机进行. 编程思想为: main{ 设置单片机上与数码管相连的引脚为输出, 设置单片机中断接口(即中断按钮)的中断控制寄存器里的中断使能, 设置整体中断使能, 循环子程序xunhuan(); 显示0到9, } ...

吴中区15968907893: 51单片机汇编语言1位数码管显示0,1,2,……到9再从9,8,7……到0,反复显示. -
频肺诺其: 反复循环是一个作法,0到9循环结束后再做9到0的循环,0到9时用INC加法,9到0用DEC减法就行了,分开做两个循环,先加后减,两个循环结束,再回到0到9实现大循环就好了.很容易的呀,既然会0到9的循环,自己都能做出来,那其它的也能做出来吗,自己独立完成是最好的煅炼了,不能什么事都靠别人,那样是不会提高进步的.

吴中区15968907893: 求用51单片机接两个数码管,0 - 99动态显示程序(用C语言) -
频肺诺其: #include #define uchar unsigned char #define uint unsigned int uchar DSY_CODE[]= { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f }; void delay(uint x) { uchar i; while(x--)for(i=0;i<120;i++); } void main() { uchar i; P0 = 0x00; P2 = 0x00; while(1)...

吴中区15968907893: 单片机求助,用汇编语言写一个双位数码管0到99循环 -
频肺诺其: 一个数码管显示0005~01秒,再换另一个显示,他俩轮流这么显示着(再多几个也可以),这种交替人眼看不出来的单片机求助,用汇编语言写一个双位数码管0到99循环

吴中区15968907893: 51单片机怎么用汇编语言让8个数码管不停的 显示0 - 9(最好要接74HC595) 加分 -
频肺诺其: 我用的是汇编:org startstart: mov p2,#0xfe mov r3,#0x00 mov dptr,#display mov a,#0x00 loop: movc a,@a+dptr...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网