51单片机的程序,求大神给解释下,具体些

51单片机的程序,求大神给解释下,具体些,第1张

这个程序比较长,但还算简单,哪一段不懂,不可能一句一句解释

void main()

{

q=0;//分清0

p=0;//小时清0

TMOD=0x01; //定时器0工作方式1

TH0=(65536-46080)/256;//50ms初值

TL0=(65536-46080)%256;

ET0=1; //定时器0中断打开

EA=1; //总中断打开

while(1)

{

if(K1==0)//启动

TR0=1;

if(K2==0)//暂停

TR0=0;

if(K3==0) 秒清0

{m=0; }

if(pp==20)//5020ms=1S

m++;

n--;

P1=n;//P1可能是秒(十六进制)倒计时显示的

if(m==60)//60s是1分钟

{

m=0;

q++;

}

if(q==60)//60分钟是1小时

{

q=0;

p++;

}

if(p==24)//24小时清0

{

p=0;

}

}

c0=m%10; //分离出时分秒的个位和十位

c1=m/10;

c2=q%10;

c3=q/10;

c4=p%10;

c5=p/10;

display(c1,c0,c3,c2,c5,c4); //显示

}

}

1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。

例程:

#include<reg51h>  //51单片机头文件

#include <intrinsh> //包含有左右循环移位子函数的库

#define uint unsigned int    //宏定义

#define uchar unsigned char  //宏定义

sbit beep=P2^3;

void delay(uint z)  //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms

{                    //delay(500);大约延时500ms

    uint x,y;

    for(x=z;x>0;x--)

        for(y=110;y>0;y--);    

}

void main()            //主函数

{

    uchar a,i,j;

    while(1)        //大循环

    {

        a=0xfe;     //赋初值

        for(j=0;j<3;j++) for(i=0;i<8;i++)   //左移三次

        {

            P1=a;       //点亮小灯

            beep=0;     //开启蜂鸣器

            delay(50); //延时50毫秒

            beep=1;     //关闭蜂鸣器

            delay(50);  //再延时50毫秒

            a=_crol_(a,1); //将a变量循环左移一位

        }

        a=0x7f;

       for(j=0;j<3;j++) for(i=0;i<8;i++)  //右移三次

        {

            P1=a;       //点亮小灯

            beep=0;     //开启蜂鸣器

            delay(50); //延时50毫秒

            beep=1;     //关闭蜂鸣器

            delay(50);   //再延时50毫秒

            a=_cror_(a,1); //将a变量循环右移一位

        }        

    }

}

2、51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:

MOV A,P0

ANL A,#1EH

CJNE A,#02H,MAIN1

SETB P11

CLR P12

CLR P18

SJMP MAIN

MAIN1:

CJNE A,#04H,MAIN2

CLR P11

SETB P12

CLR P18

SJMP MAIN

MAIN2:

CJNE A,#1EH,MAIN3

CLR P11

CLR P12

SETB P18

SJMP MAIN

MAIN3:

CLR P11

CLR P12

CLR P18

LJMP MAIN

END

sfr P0M1 = 0X93; //这些是预定义寄存器的地址的

sfr P0M0 = 0X94; // 在编译过程中会把 POM1之类的东西变成这些地址

sfr P1M1 = 0X91; //mcu在运行中也是对这些地址 *** 作的

sfr P1M0 = 0X92;

sfr P2M1 = 0X95;

sfr P2M0 = 0X96;

uchar CONT_1; //定义一个常量 作为计数器 使用,类型无符号整形数

P0M1 = 0; //将io口设置为推挽输出

P1M1 = 0; // 下面这些事定义了这些寄存器的初始值

P2M1 = 0; //以免第一次使用这些寄存器时出错

P0M0 = 0XFF;

P1M0 = 0XFF;

P2M0 = 0XFF;

//你原来的b2,b2都是死循环,这是不行的,只有主函数才可以死循环。

//你的主函数结构也有问题。

//为你增加了一个按键检测的函数。

//下列程序通过了实验测试。

//b1输出的周期大约09s。

//b2输出的周期大约06s。

//K为触动开关,reg为红灯,bice为绿灯,b1、b2 各为一个方波,

//按第一次触动开关时红灯亮、b1输出,

//按第二次绿灯亮、为b2输出,

//按第三次都关闭

#include <reg51h>

#define uint unsigned int

#define uchar unsigned char

uint a;

void b1();

void b2();

sbit t = P1^0;

sbit k = P3^5;

sbit reg = P3^3;

sbit bice = P3^2;

void delay(uchar z)

{

uint x,y;

for(x = z; x > 0; x--) for(y = 110; y > 0; y--);

}

bit key()

{

bit kkk;

kkk = k; //读入按键

if(kkk == 1) return 0;//没有按下

delay(5); //延时

if(k == kkk) return 1;//两次相等

return 0;

}

void main()

{

while(1) {

P3 = 0xff;

while(!key()); //静等按下第一次

reg = 0;

bice = 1;

while(!key()) b1(); //没有按下第二次就循环等待

reg = 1;

bice = 0;

while(!key()) b2(); //没有按下第三次就循环等待

}

}

void b1()

{

P1 = 0xfe; a = 50000; while(a--);

P1 = 0xff; a = 50000; while(a--);

}

void b2()

{

P1 = 0xfe; a = 30000; while(a--);

P1 = 0xff; a = 30000; while(a--);

}

#include<reg51h>

sbit P_OUT = P3^7;

sbit UP = P1^0;

sbit DN = P1^1;

unsigned char p = 5, n;

void T0_INT() interrupt 1

{

    n++;

    if(n > 9)  n = 0;  //0~9

    if(n <= p) P_OUT = 1;

    else       P_OUT = 0;

}

main()

{

    TMOD = 0x02;

    TH0 = 156;

    TR0 = 1;

    IE = 0x82;

    

    while(1) {

      if(P < 9 && !UP) {while(!UP); p++;}

      if(p > 0 && !DN) {while(!DN); p--;}

    }

}

你编译一下,汇编程序,就出来了。

以上就是关于51单片机的程序,求大神给解释下,具体些全部的内容,包括:51单片机的程序,求大神给解释下,具体些、很简的51单片机C语言流水灯程序、51单片机的一个简单程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/10059625.html

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

发表评论

登录后才能评论

评论列表(0条)

保存