基于单片机的波形发生器

#include<reg52.h>                       //?????
#include<intrins.h>
#define uchar unsigned char               //???
#define uint unsigned int

sbit s1=P3^5;                            //???????
sbit s2=P3^6;
sbit s3=P3^7;
sbit s4=P3^4;

sbit led0=P3^0;
sbit led1=P3^1;
sbit led2=P3^2;
sbit led3=P3^3;
                                       
sbit lcdrs=P2^7;                       //?????
sbit lcden=P2^6;

char num,boxing,u;                       //??????
int pinlv=100,bujin=1,bujin1=1;
uchar code table[]="0123456789";        //???????
uchar code table1[]="Fout=     Wave form:";
unsigned long int m;
int a,b,h,num1;

uchar code sin[64]={
135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,
146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128
};                      //?????
uchar code juxing[64]={
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};                      //?????

uchar code sanjiao[64]={
0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,
248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0
};                        //?????
uchar code juchi[64]={
0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,130,134,138,142,
146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255
};                      //?????

void delay(uint xms)     //????
{
    int a,b;
    for(a=xms;a>0;a--)
        for(b=110;b>0;b--);
}
void write_com(uchar com)        //?????
{
    lcdrs=0;
    P0=com;    
    delay(1);
    lcden=1;
    delay(1);                                       
    lcden=0;
}

void write_date(uchar date)        //?????
{
    lcdrs=1;
    P0=date;
    delay(1);
    lcden=1;
    delay(1);
    lcden=0;
}

//??????
void Lcd_ram()      

    uint i,j,k=0,temp=0x40; 
    for(i=0;i<7;i++)
    {
       for(j=0;j<8;j++)
       {
        write_com(temp+j);
        write_date(zifu[k]);
        k++;
       }
       temp=temp+8;
    }
}

void init_lcd()                    //?????
{
    uchar i;                                  
    lcden=0;                    //???????????,????  
    Lcd_ram();
    write_com(0x0f);
    write_com(0x38);            //??????,???0x38,????
    write_com(0x0c);            //??????0x0f????,????,????;0x0c????,????,????
    write_com(0x06);            //????????0x06,?????????1. 
    write_com(0x80);            //?????????,????????????
    for(i=10;i<20;i++)               //?????
    {
        write_date(table1[i]);
    }
    write_com(0x80+0x40);
    for(i=0;i<9;i++)
    {
        write_date(table1[i]);
    }
    write_com(0x80+10);
    write_date(0);
    write_date(1);
    write_date(0);
    write_date(1);
    write_date(0);
    write_date(1);
    write_com(0x80+0x40+0x09);
    write_date(' ');    write_date('z');
}
void initclock()               //?????
{
    TMOD=0x01;
    TH0=a;
    TL0=b;
    EA=1;
    ET0=1;
    TR0=1;
}
void display()                   //????
{
    uchar qian,bai,shi,ge;
    qian=pinlv/1000;
    bai=pinlv%1000/100;
    shi=pinlv%1000%100/10;
    ge=pinlv%1000%100%10;
    write_com(0x80+0x40+0x09);

       if(qian==0)
    write_date(' ');
    else
    write_date(table[qian]);
    if(qian==0&&bai==0)
    write_date(' ');
    else
    write_date(table[bai]);
    write_date('z');
    if(boxing==0)
    {
        write_com(0x80+10);
        write_date(0);
        write_date(1);
        write_date(0);
        write_date(1);
        write_date(0);
        write_date(1);
        led3=1;
        led0=0;
    }
    if(boxing==1)
    {
        write_com(0x80+10);
        write_date(2);
        write_date(3);
        write_date(2);
        led0=1;
        led1=0;
    }


    if(boxing==2)
    {
        write_com(0x80+10);
        write_date(4);
        write_date(5);
        write_date(4);
        write_date(5);
        write_date(4);
        write_date(5);
        led1=1;
        led2=0;
    }
    if(boxing==3)
    {
        write_date(6);
        write_date(6);
        write_date(6);
        led2=1;
        led3=0;
    }

}
void keyscan()                    //??????
{
    if(s1==0)
    {     
        EA=0;
        delay(2);
            }
            display();
            m=65536-(150000/pinlv);
            a=m/256;
            b=m%256;
            EA=1;
        }
    }
    if(s2==0)
    {     
        
        delay(5);
        if(s2==0)
        {
            EA=0;    
            while(!s2);
            pinlv-=bujin;
            if(pinlv<100)
            {
            a=m/256;
            b=m%256;    
            EA=1;
        }
    }
    if(s3==0)
    {     
        delay(5);
        if(s3==0)
        {
            EA=0;
            while(!s3);
            boxing++;
            if(boxing>=4)
            {
                boxing=0;
            }
            display();
            EA=1;
        }
    }    
}
void bujindisplay()
{
    uint bai,shi,ge;
    bai=bujin1/100;
    shi=bujin1%100/10;
    ge=bujin1%100%10;
    write_com(0x80+11);
    if(bai==0)
    write_date(' ');
    else
    write_date(table[bai]);
    write_date(table[shi]);
    write_date('.');
    write_date(table[ge]);
}
void bujinjiance()
{
    if(s4==0)
    {
        delay(5);
        if(s4==0)
        {
             while(!s4);
             h++;
             if(h==1)
             {
                  write_com(0x01);
                 write_com(0x80);
                 write_date('S');delay(1);      //step value
                 write_date('t');delay(1);
                 write_date('e');delay(1)
                 write_date('e');delay(1);
                 write_date(':');delay(1);
                 bujin1=bujin;
                 
                 bujindisplay();
             }
             if(h==2)
             {
                 h=0;
                bujin=bujin1;
                
                init_lcd();
                initclock();
                display();
             }
        }
    }
    if(h==1)
    {
        if(s1==0)
        {
            delay(5);
            if(s1==0)
            {
    
1;
                }
                bujindisplay();
            }
        }
        if(s2==0)
        {
            delay(5);
            if(s2==0)
            {
                while(!s2);
                bujin1--;
                if(bujin1<=0)
                {
                    bujin1=100;
                }
                bujindisplay();
            }
        }
    }
}
void main()                     //???
{    
    init_lcd();
    while(1)
    {
        if(h==0)
        {
            keyscan();
        //    display();
        }
         
        bujinjiance();

        switch(boxing)
        {
            case 0 : P1=sin[u]; break;
            case 1 : P1=juxing[u]; break;
            case 2 : P1=sanjiao[u]; break;
            case 3 : P1=juchi[u]; break;
        }
    }
}
void T0_time()interrupt 1           //???
{
    TH0=a;
    TL0=b;
    u=0;
}

想问大佬们这东西怎么改啊,能帮帮孩子嘛?

 

你好,我是有问必答小助手。为了技术专家团更好地为您解答问题,烦请您补充下(1)问题背景详情,(2)您想解决的具体问题,(3)问题相关代码图片或者报错信息。便于技术专家团更好地理解问题,并给出解决方案。

您可以点击问题下方的【编辑】,进行补充修改问题。