⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 box.c

📁 用51控制,按键选择波形,外不中断0,正弦波,方波,三角波
💻 C
字号:
#include<reg51.h>
#include<absacc.h>
#include<INTRINS.H>
#define uint unsigned int
#define uchar unsigned char
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P2_0=P2^3;
sbit P2_1=P2^4;
sbit P2_2=P2^5;
sbit P2_3=P2^0;
sbit P2_4=P2^1;
sbit P2_5=P2^2;	
uchar (*PP)[32],*Q,rr;
uchar I,X,Y,KK=0,LL=0;
uint flag0=0,flag1=0;
uchar code hanzi[5][32]={                                                         //汉字(16*16)
{0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,
0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x00},
{0x02,0xF2,0x12,0x12,0x3E,0x00,0x04,0x84,0x44,0xB5,0x86,0x84,0xE4,0x44,0x04,0x00,
0x01,0x23,0x41,0x81,0x7F,0x00,0x21,0x71,0x29,0x25,0x22,0x21,0x28,0x70,0x20,0x00},
{0x10,0x60,0x01,0xE6,0x00,0xF8,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x18,0x08,0x00,
0x04,0x04,0xFF,0x40,0x30,0x8F,0x80,0x41,0x26,0x18,0x18,0x26,0x61,0xC0,0x40,0x00},
{0x20,0x3C,0x20,0x20,0xBF,0x24,0x24,0x00,0xF2,0x1A,0xD6,0x12,0x12,0xF2,0x02,0x00,
0x44,0x43,0x20,0x10,0x0B,0x04,0x43,0x40,0x27,0x18,0x07,0x08,0x10,0x27,0x60,0x00},
{0x00,0x0C,0x14,0xA4,0x04,0x64,0x35,0xAE,0x64,0x24,0x14,0xA4,0x14,0x04,0x04,0x00,
0x08,0x0A,0x09,0x08,0x08,0x0A,0x0B,0xFE,0x0A,0x0B,0x0C,0x08,0x09,0x0A,0x08,0x00}};
uchar code zheng[]={                                                              //正弦波
0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0C,0x06,0x07,0x03,0x03,   
0x03,0x03,0x03,0x03,0x07,0x06,0x1C,0x38,0x70,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC0,0xF0,0x78,0x1C,0x0F,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1E,0x78,0xE0,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,
0x0F,0x3C,0x70,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x70,0x38,0x1C,0x0E,0x07,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x30,0x60,0x60,0x60,0x40,0x60,0x60,
0x60,0x60,0x30,0x30,0x18,0x1C,0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00};
uchar code fang[]=
{0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0};
uchar code san[]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,
0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,
0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,
0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void delay1(void)                        //延时10us
{
   uchar i;
   for(i=5;i>0;i--);
}
void delay2(void)                        //延时2s
{
   uchar i,j,k;
   for(i=2;i>0;i--)
   for(j=255;j>0;j--)
   for(k=255;k>0;k--);
}
void delay3(void)                        //延时1s
{
   uchar i,j,k;
   for(i=1;i>0;i--)
   for(j=175;j>0;j--)
   for(k=255;k>0;k--);
}
void delay00(void)
{
	int i,j;
    for(i=10;i>0;i--)
	for(j=255;j>0;j--);
}
void WRI(uchar r)                       //写指令子程序
{
   P2_2=0;
   P2_1=0;
   P2_0=0;
   P0=r;
   P2_2=1;
   delay1();
   P2_2=0;
}
void WRD(uchar r1)                     //写数据子程序
{                   
   P2_2=0;
   P2_1=0;
   P2_0=1;
   P0=r1;
   P2_2=1;
   delay1();
   P2_2=0;
}
void clear(void)                       //清屏子程序
{ 
    uchar RR,RR1,RR2,page;
    page=0xB8;                         //设置页地址
    for(RR2=8;RR2>0;RR2--)             //8页
    {
	   RR1=page;
       WRI(RR1);
       RR1=0x40;
       WRI(RR1);
       for(RR=128;RR>0;RR--)           //128列
       {
          RR1=0x00;                    //送0,清显示
          WRD(RR1);
       }
	   page++;
    }
}
void hanzi1(uchar(*p)[32],uchar x,uchar y)       //取数送显示(汉字)
{
    uchar rr0,rr1,rr5;
    for(rr0=2;rr0>0;rr0--)
    {     
          rr1=y+0x40;
          WRI(rr1);
          rr1=x+0xB9;
          WRI(rr1);
		  while(KK<5)
		  {
			  for(rr5=16;rr5>0;rr5--)
			  {
			      rr1=*(*(p+KK)+LL);
                  WRD(rr1);
                  delay1();
                  LL++; 
			  }
               break;            
	      }                                                                            
	      x++;                                                                         
    }
	LL=0;KK++;
    rr1=0xC0;
    WRI(rr1);
    rr1=0x3F;
    WRI(rr1);
	rr0=5;
    for(rr0=5;rr0>0;rr0--)
    {
        delay3();
    } 
}
void boxing(uchar *p1,uchar x1,uchar y1)         //取数送显示(波形)
{
    uchar rr10,rr11,rr15;
    for(rr10=4;rr10>0;rr10--)
    {     
        rr11=y1+0x40;
        WRI(rr11);
        rr11=x1+0xB9;
        WRI(rr11);
		for(rr15=64;rr15>0;rr15--)
        {
            rr11=*p1;
            WRD(rr11);
            delay1();
            p1++;
		}
	    x1++;
    }
    rr11=0xC0;
    WRI(rr11);
    rr11=0x3F;
    WRI(rr11);
    rr10=5;
    for(rr10=5;rr10>0;rr10--)
    {
        delay3();
    } 
}
void LCD(uint flag)          //LCD显示子程序
{
         uchar xy[7][2]={{0,4},{0,24},{0,44},{5,8},{5,30}};  //页,列地址
         _nop_();
         P2_2=0;
         _nop_();     
         P2_5=0;       //复位
         delay1();  
         P2_5=1;             
         clear();      //清屏
         delay2();
         P2_4=0;       //开左屏
         P2_3=1;
         rr=0xC0;      //设置显示起时行
         WRI(rr);
		 for(I=0;I<5;I++)      //显示汉字
		 {
	         X=xy[I][0];
	         Y=xy[I][1];
	         PP=hanzi;
	         hanzi1(PP,X,Y);
		 }
		 if(flag!=0)
		 {
		         P2_4=1;       //开右屏
                 P2_3=0;
                 rr=0xC0;      
                 WRI(rr);
		 switch(flag)
		 {
		 case 1: X=0;          //显示方波
                 Y=0;
                 Q=fang;
                 boxing(Q,X,Y);
				 break;
		 case 2: X=0;          //显示正弦波
                 Y=0;
                 Q=zheng;
                 boxing(Q,X,Y);
				 break;
		 case 3: X=0;          //显示三角波
                 Y=0;
                 Q=san;
                 boxing(Q,X,Y);
				 break;
		 }  
		 }
}
void delay(unsigned int d_time)
{
   for(;d_time>0;d_time--);
}
void main(void)
{
    P1_0=0;
    delay(10);
    P1_0=1;
	LCD(flag1);
    IE=0x81;
    IT0=0;
    while(1);
}
void wave(void)interrupt 0
{
    while(flag1==4)
	      flag1=0;
    flag1++;
	switch(flag1)
    {
	case 1:LCD(flag1);break;
	case 2:LCD(flag1);break;
    case 3:LCD(flag1);break;
	}
    delay00();
}

   
   

   
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -