51单片机跑马灯电路图(左右来回循环),8个led灯分别接在P2口,c程序、仿真图如下。电路并未出现预期效果

51单片机跑马灯电路图(左右来回循环),8个led灯分别接在P2口,c程序、仿真图如下。电路并未出现预期效果,第1张

电路

一般的单片机 和 TTL集成电路芯片,都是灌电流能力强,拉电流能力极弱。

为此,应该用输出低电平,来带动负载。

而你的电路,是用高电平带动LED发光的,仿真,也许还行;实际的电路,LED是不会亮的。

我有我自己写的一个程序,根号 开方连续运算1602显示

#include<reg52h>

#include<mathh>

#define  uint  unsigned int

#define  uchar unsigned char

uchar temp,z,fuhao;      //z,fuhao

char zifu1[8]={0},zifu2[8]={0},zifu[20];

uchar cuowu[]={"cuo  wu"};

uchar keyshu=0,shu0,genhao=251,n=0;      /// 

double shu1=0,shu2=0,shu=0;            //

sbit EN = P1^6;

sbit RS = P1^4;

sbit RW = P1^5;

sbit duan = P2^6;

sbit wei = P2^7;

sbit gen= P3^0;

sbit fang = P3^1;

double z_s(uchar p);

void s_z(double b);

void s_z2(double b);

void s_z1(long zheng);

void ten(unsigned int t)           //

{

uchar i;

for(;t>0;t--)

for(i=0;i<120;i++);

}

//

uchar jianpan()

{

    z='N'; //,'N'

    P3=0xfe; //

    temp=P3;

    temp=temp&0xf0;

    while(temp!=0xf0) //

    {

        ten(10);

        temp=P3;

        temp=temp&0xf0;

        while(temp!=0xf0) 

        {

            temp=P3;

            switch(temp)

            {

                case 0xee:z=7;

                    break;

                case 0xde:z=8;

                    break;

                case 0xbe:z=9;

                    break;

                case 0x7e:z='+';

                    break;

            }

            while(temp!=0xf0)  //

            {

                temp=P3;

                temp=temp&0xf0;

            }

        }

    }

    P3=0xfd; //  

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0) //

{

ten(10);

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0) 

{

temp=P3;

switch(temp)

{

case 0xed:z=4;

break;

case 0xdd:z=5;

break;

case 0xbd:z=6;

break;

case 0x7d:z='-';

break;

}

      while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;   //

}

}

}

  P3=0xfb;  //

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0) //

{

ten(10);

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xeb:z=1;

break;

case 0xdb:z=2;

break;

case 0xbb:z=3;

break;

case 0x7b:z='';

break;

}

      while(temp!=0xf0) //

{

temp=P3;

temp=temp&0xf0;

}

}

}

  P3=0xf7;   //

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0) //

{

ten(10);

temp=P3;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xe7:z='=';

break;

case 0xd7:z=0;

break;

case 0xb7:z='';

break;

case 0x77:z='/';

break;

}

      while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;   //

}

 }

}

while(fang==0)

{

if(fang==0)

{

ten(5);

if(fang==0)

{

z='^';

}

while(fang==0); //

}

}

while(gen==0)

{

if(gen==0)

{

ten(5);

if(gen==0)

{

z=251;

}

while(gen==0); //

}

}

return z;

}

void mingling(uchar a)

{

P0=a;

RS=0;

EN=0;

ten(10);

EN=1;

ten(10);

EN=0;

}

void shuju(uchar a)

{

P0=a;

RS=1;

EN=0;

ten(10);

EN=1;

ten(10);

EN=0;

}

void chushihua()

{

  RW=0;

duan=0;

wei=0;

mingling(0x38);   //:16,5,8

ten(20);

mingling(0x0f);   //

ten(20);

mingling(0x06);   //:,

ten(20);

mingling(0x01);   //,

ten(20);

}

//

void zifuchuan(uchar a)

{

while(a)

{

shuju(a);

a++;

}

}

////////////////////

////////

////////////////////

double z_s(uchar p)

{

char i=0,j=0;

double num=0,xiao=0,x=0,y=0;

while((p!='')&&p)   //

{

num=num10+(p-'0');

p++; 

}

for(p++,i++,j=0;p;j++,i++,p++)

xiao=xiao10+(p-'0');

for(;j>0;j--)

xiao=01;

num=num+xiao;

return num;

}

void s_z1(long zheng)

{

char j=0,a[20]={0};

if(zheng==0)

{

shuju('0');

return;

}

else if(zheng<0)

{

zheng=0-zheng;

shuju('-');

}

while(zheng>=1)

{

a[j]=zheng%10+'0';

zheng=zheng/10;

j++;

}

for(j=j-1;j>=0;j--)

{

shuju(a[j]);

}

}

void s_z2(double b)

{

long num;

b=b-floor(b);

if(b>000000009)

{

shuju('');

num=(long)(b1000000);

s_z1(num);

}

}

///////D'D///////

void s_z(double b)

{

long num;

if(b==0)

{

shuju('0');

return;

}

else if(b<0)

{

b=fabs(b);

shuju('-');

}

num=(long)b;

s_z1(num);

s_z2(b);

}

//////////////////////////////////////

//LCD//

/////////////////////////////////

void weizhi(uchar x,uchar y)

{

if(y==0)

mingling(0x40+x);

else mingling(0x40+0x80+x);

}

void shuju1( unsigned x,unsigned char y,unsigned char dat)

{

weizhi( x, y ); 

shuju(dat);

}

//////

void main()

uchar i=0;

chushihua();

while(1)

{

while(1)

{

if((jianpan()!='N')&&(z>=0&&z<=9||z==''))

{

if(keyshu<=19)

{

if(z=='')

shuju('');

else 

shuju(z+'0');

}

zifu1[keyshu]=z+'0';

keyshu++; shu0++;

}

else if(z=='+'||z=='-'||z==''||z=='/'||z=='^'||z==251||z=='=')

{

shu1=z_s(zifu1);

shu0=shu1;

shu=shu1;

loop:

 

shu1=shu;

mingling(0x01);

s_z(shu1);

if(z!='=')shuju(z); //

if(z==251)

{

shu1=sqrt(shu1);

shu=shu1; //

while(1)

{

if(jianpan()=='+'||z=='-'||z==''||z=='/'||z=='^'||z=='=')

{

if(z!='=')shuju(z);

break;

}

}

}

keyshu=0;                   //

//shuju(fuhao+'0');

fuhao=z;

break;

}

}

while(1)

{

if(z==251)break;

if(z=='=')break;

if((jianpan()!='N')&&(z>=0&&z<=9||z==''))

{

if(keyshu<=19)

{

if(z=='')

shuju('');

else

shuju(z+'0');

}

zifu2[keyshu]=z+'0';

keyshu++;

}

else if(z=='+'||z=='-'||z==''||z=='/'||z=='='||z==251)

{

shu2=z_s(zifu2); 

break;

}

if(z==251)

{

shu2=sqrt(shu2); //

while(1)

{

if(jianpan()=='+'||z=='-'||z==''||z=='/'||z=='^'||z=='=')

{

if(z!='=')shuju(z);

break;

}

}

}

}

if(fuhao=='^')

shu=pow(shu1,shu2);

if(fuhao=='+')

shu=shu1+shu2;

if(fuhao=='-')

shu=shu1-shu2;

if(fuhao=='')

shu=shu1shu2;

if(fuhao=='/')

shu=shu1/shu2;

if((shu2==0&&fuhao=='/'))

{

weizhi(0,1);

zifuchuan(cuowu);

}

if(z=='=')

{

shuju('=');

weizhi(0,1);

s_z(shu);

while(1)

{

if(jianpan()=='+'||z=='-'||z==''||z=='/'||z=='^'||z==251)break;

}

}

shu1=0;

shu2=0;

for(i=0;i<8;i++)

zifu1[i]=0;

for(i=0;i<8;i++)

zifu2[i]=0;            //

if(z=='+'||z=='-'||z==''||z=='/'||z=='^'||z==251)

goto loop;

}

}

呵呵呵,你走运了,我做过课后作业,有问题以再问我

带调时间的数字钟

定时器1s触发中断一次,计时+1,主程序负责传输时间到led及检测按键,其他见注释。

左面有器件列表,这个是protenus仿真

ORG 0000H

AJMP MAIN

ORG 000BH

LJMP T0INT

ORG 001BH

LJMP T1INT

ORG 0100H

MAIN: MOV TMOD,#51H ;T0定时器方式1,T1计数器方式1

MOV TCON,#54H ;开定时计数器,T1边沿触发

MOV TH0,#4BH   ;(65536-19453)1085=50MS,晶振110592MHZ

MOV TL0,#0FFH ;去掉了装载初值用的机器周期

MOV TH1,#0FFH   ;满10溢出,1S

MOV TL1,#0F6H

MOV IE,#8AH ;开中断

MOV R7,#04H ;预置13:58:00  的时

MOV R2,#13H

MOV A,R2

LCALL DISPLAY

MOV R7,#02H ;预置13:58:00  的分

MOV R1,#58H

MOV A,R1

LCALL DISPLAY

CHECKKEY:LCALL KEY1

LCALL KEY2

LCALL KEY3

LCALL KEY4

AJMP CHECKKEY

;;;;;;;;;;中断;;;;;;;;;;;;;;;;;;;;;;

T0INT: MOV TH0,#4BH

MOV TL0,#0FDH

CPL P20

RETI

T1INT: MOV TH1,#0FFH

MOV TL1,#0F6H

PUSH ACC

CPL P21

MOV A,R0  ;R0计秒钟,通过A调整为BCD码

ADD A,#1

DA A

MOV R0,A

CJNE R0,#60H,MIAO

MOV R0,#00H

MOV A,R1 ;R1计分钟,通过A调整为BCD码

ADD A,#1

DA A

MOV R1,A

CJNE R1,#60H,FEN

MOV R1,#00H

MOV A,R2 ;R2计时钟,通过A调整为BCD码

ADD A,#1

DA A

MOV R2,A

CJNE R2,#24H,SHI

MOV R2,#00H

SHI: MOV R7,#04H

MOV A,R2

LCALL DISPLAY

FEN: MOV R7,#02H

MOV A,R1

LCALL DISPLAY

MIAO: MOV R7,#01H

MOV A,R0

LCALL DISPLAY

POP ACC

RETI

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;显示

;A--显示BCD码,R7--选择数码管

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DISPLAY:MOV P1,R7

MOV SCON,#0

MOV SBUF,A

JNB TI,$

CLR TI

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;按键检测与执行程序

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

KEY1: JB P00,DONE1 ;检测P00口按键,若没按下,则结束

LCALL DELAY  ;延时去抖

JB P00,DONE1 ;再次检测,若没按下,则结束

JNB P00,$ ;等待按键松开

CPL EA ;开关定时中断

DONE1: RET

KEY2: JB EA,DONE2 ;若EA=1,则调时间按键无效

JB P01,DONE2 ;检测P00口按键,若没按下,则结束

LCALL DELAY  ;延时去抖

JB P01,DONE2 ;再次检测,若没按下,则结束

MOV A,R2  ;R2计时钟+1,通过A调整为BCD码

ADD A,#1

DA A

CJNE A,#24H,CHECK2

MOV A,#00H

CHECK2: MOV R2,A

MOV R7,#04H ;显示改后的时间

MOV A,R2

LCALL DISPLAY

DONE2: RET

KEY3: JB EA,DONE3

JB P02,DONE3

LCALL DELAY

JB P02,DONE3

MOV A,R1  ;R1计分钟+1,通过A调整为BCD码

ADD A,#1

DA A

CJNE A,#60H,CHECK3

MOV A,#00H

CHECK3: MOV R1,A

MOV R7,#02H ;显示改后的时间

MOV A,R1

LCALL DISPLAY

DONE3: RET

KEY4: JB EA,DONE4

JB P03,DONE4

LCALL DELAY

JB P03,DONE4

MOV A,R0  ;R0计秒钟+1,通过A调整为BCD码

ADD A,#1

DA A

CJNE A,#60H,CHECK4

MOV A,#00H

CHECK4: MOV R0,A

MOV R7,#01H ;显示改后的时间

MOV A,R0

LCALL DISPLAY

DONE4: RET

;;;;;;;;DELAY;;;;;;;;;;;;;;;;;;

DELAY: MOV R4,#0FFH

DL: MOV R5,#0FFH

DJNZ R5,$

DJNZ R4,DL

RET

END

以上就是关于51单片机跑马灯电路图(左右来回循环),8个led灯分别接在P2口,c程序、仿真图如下。电路并未出现预期效果全部的内容,包括:51单片机跑马灯电路图(左右来回循环),8个led灯分别接在P2口,c程序、仿真图如下。电路并未出现预期效果、51单片机控制下的简易计算器仿真图和程序、求单片机数字钟的设计程序及电路仿真图!急!急!急!急!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9306485.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存