全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
更新自动建库工具PCB Footprint Expert 2023.13 Pro / Library Expert 破解版

求大神帮我看看程序什么意思讲解一下!谢谢

[复制链接]
3659 1

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
#include <reg51.H>
sbit k1=P3^4;
sbit csbout=P1^0;                         //超声波发送
sbit csbint=P3^2;                         //超声波接收
sbit bg=P3^3;
#define LED P0
sbit LED1=P2^4; //LED控制
sbit LED2=P2^5; //LED控制
sbit LED3=P2^6; //LED控制
sbit bj=P2^0;//报警
#define csbc 0.0347

unsigned char cl,mqzd,csbs,csbds,buffer[3],xm1,xm2,xm0,jpjs;//显示标识
unsigned char convert[10]={0x18,0x7b,0x2c,0x29,0x4b,0x89,0x88,0x3b,0x08,0x09};//0~9段码
unsigned int s,t,i,xx,j,sj1,sj2,sj3,mqs,sx1;
                                 
void csbcj();
void delay(j);                                        //延时函数
void scanLED();                                        //显示函数
void timeToBuffer();                        //显示转换函数
void keyscan();
void k1cl();
void k2cl();
void k3cl();
void k4cl();
void offmsd();

void main()                                        //主函数
{
        EA=1;                                           //开中断
          TMOD=0x11;                                 //设定时器0为计数,设定时器1定时
        ET0=1;                                         //定时器0中断允许
        ET1=1;                                         //定时器1中断允许
        TH0=0x00;
        TL0=0x00;
        TH1=0x9E;
        TL1=0x57;
        csbds=0;
        csbout=1;
        cl=0;
        csbs=8;
        jpjs=0;
        sj1=50;/////////测试报警距离
        sj2=200;
        sj3=580;
        k4cl();
        TR1=1;                                 
        while(1)
          {
                keyscan();
                if(jpjs<1)
                {
                        csbcj();                //调用超声波测距程序
                        if(s>sj3)                //大于时显示“CCC”
                        {
                                buffer[2]=0xC6;         
                                buffer[1]=0xC6;         
                                buffer[0]=0xC6;         
                        }
                        else if(s<sj1)        //小于时显示“- - -”
                        {
                                buffer[2]=0xBF;         
                                buffer[1]=0xBF;         
                                buffer[0]=0xBF;
                        }
                        else timeToBuffer();         
                }
                else timeToBuffer();                //将值转换成LED段码
                offmsd();
                  scanLED();                        //显示函数
                if(s<sj1)
                bg=0;
                bg=1;
        }
}

void scanLED()                             //显示功能模块
{
        LED=buffer[0];
        LED3=0;
        delay(200);
        LED3=1;

        LED=buffer[1];
        LED2=0;
        delay(200);
        LED2=1;
         
        LED=buffer[2];
        LED1=0;
        delay(200);
        LED1=1;
}

void timeToBuffer()                    //转换段码功能模块
{
        xm0=s/100;         
        xm1=(s-100*xm0)/10;
        xm2=s-100*xm0-10*xm1;
        buffer[2]=convert[xm2];         
        buffer[1]=convert[xm1];
        buffer[0]=convert[xm0];
}

void delay(i)                                         
{
    while(--i);
}

void timer1int (void)  interrupt 3  using 2
{
        TH1=0x9E;
        TL1=0x57;
        csbds++;
        if(csbds>=40)
        {
                csbds=0;
                cl=1;
        }                 
}

void csbcj()
{
        if(cl==1)
        {
                   TR1=0;
                TH0=0x00;
                TL0=0x00;
                i=csbs;
                while(i--)
                {
                        csbout=!csbout;
                }
                TR0=1;                        
                   i=mqs;                                        //盲区
                while(i--)
                {
                }
                i=0;
                while(csbint)
                {
                        i++;
                        if(i>=4000)                        //上限值
                        csbint=0;
                }
                TR0=0;
                TH1=0x9E;
                TL1=0x57;
                t=TH0;
                t=t*256+TL0;
                t=t-29;                 
                s=t*csbc/2;
                TR1=1;
                cl=0;
                csbint=1;
//////////////////////////////////////////////////////////////////
                                if(s<=80)bj=0;
                                if(s>80)bj=1;
/////////////////////////////////////////////////////////////////
                if(s<sj1)
                {
                        if(csbs>6)
                        {
                                csbs=csbs-2;
                                sj1=40;
                        }
                        sj1=sj1+2;
                        k4cl();
                }
                else if(s>=sj3)
                {
                        if(csbs<32)
                        {
                                csbs=csbs+2;
                                sj1=sj1+10;
                                k4cl();
                        }
                }
        }
}

void keyscan()                                //健盘处理函数
{
        xx=0;
        if(k1!=1)                                        // 判断开关是否按下
        {
                delay(100);                                //延时去抖动
                if(k1!=1)                                        // 判断开关是否按下         
                {                 
                        while(!k1)
                        {
                                delay(25);         
                                xx++;
                        }
                        if(xx>1000)                 
                        {
                                jpjs++;
                                if(jpjs>3)
                                {
                                        k4cl();
                                        jpjs=0;
                                }
                        }
                        xx=0;
                        switch(jpjs)
                        {
                                case 1: k1cl();break;                 
                                case 2: k2cl();break;
                                case 3: k3cl();break;
                        }
                }
        }
}

void k1cl()
{
        sj1=sj1+1;
        if(sj1>100)
        sj1=50;
        s=sj1;
}
void k2cl()
{
        sj2=sj2+5;
        if(sj2>500)
        sj2=40;
        s=sj2;
}

void k3cl()
{
        sj3=sj3+10;
        if(sj3>600)
        sj3=600;
        s=sj3;
}

void k4cl()
{
        sx1=sj1-1;
        sx1=sx1/csbc;
        mqs=sx1/4.5;
}

void offmsd()                                                            //小时数十位为0判断模块
{
    if (buffer[0] == 0xC0)                                    //如果值为零时小数十位不显示
    buffer[0] = 0xFF;
}

举报

回复

1 个评论

beyo***  新手上路  发表于 2013-12-4 19:18:00  | 显示全部楼层
或者求大神把程序优化一下!!!
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 返回顶部 返回列表