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

📄 gg.c

📁 由单片机
💻 C
字号:
//proteus仿真论坛:proteus.5d6d.com
#include <reg51.h>
#include <intrins.h>
#include <ADC0808.c>
sbit DI=P2^2; // 数据\指令 选择
sbit RW=P2^1; // 读\写 选择
sbit E=P2^0; // 读\写使能
sbit CS1=P2^4; // 片选1
sbit CS2=P2^3; // 片选2
sbit busy=P1^7;
sbit jia=P3^7;
sbit jian=P3^3;
sbit jia1=P3^0;
sbit jian1=P3^1;
unsigned int i;
unsigned char ye,lei,shu;
unsigned char a[94];
char code t[]={	
                
																				 
			    0x00,0x00,0x08,0x00,0x04,0x00,0x02,0x00,0x01,0x80,0x40,0x60,0x80,0x00,0x7F,0xFF, //小
                0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x80,0x01,0x00,0x06,0x00,0x00,0x00,0x00,0x00,

				0x00,0x80,0x00,0x80,0x00,0x82,0x00,0x82,0x00,0x82,0x40,0x82,0x80,0x82,0x7F,0xE2, //子
                0x00,0xA2,0x00,0x92,0x00,0x8A,0x00,0x86,0x00,0x80,0x00,0xC0,0x00,0x80,0x00,0x00,
																								 
				0x00,0x40,0x00,0x60,0x3F,0x5E,0x01,0x48,0x01,0x48,0xFF,0xFF,0x11,0x48,0x21,0x4C, //制
                0x1F,0x68,0x00,0x40,0x07,0xF8,0x40,0x00,0x80,0x00,0x7F,0xFF,0x00,0x00,0x00,0x00,
				
				0x00,0x80,0x00,0x40,0x00,0x20,0xFF,0xF8,0x00,0x87,0x00,0x40,0x00,0x30,0x00,0x0F, //作
                0xFF,0xF8,0x08,0x88,0x08,0x88,0x08,0xC8,0x0C,0x88,0x08,0x0C,0x00,0x08,0x00,0x00, 
				};


             		  
void checkstate()
{
	//bit dat;
	DI=0;
	RW=1;
	//P1=0x00;
	do
	{
	  E=1; 
	  E=0;
					//仅当第7位为0时才可操作(判别busy信号)
	}while(busy==1);
}
   void writecommand(unsigned char command) 	//写命令
{
	checkstate();
	DI=0;
	RW=0;
	P1=command;
	E=1;
	E=0;
	}
 void writedate(unsigned char date)		//写数据
{
   checkstate();
   DI=1; 
   RW=0;
   P1=date;
   E=1; 
   E=0; 
}

 void pianxuan(unsigned int i)
 {
  if(i==1) 
  CS1=0,CS2=1;
  if(i==2)
  CS1=1,CS2=0;
  if(i==3)
  CS1=0,CS2=0;
  }
  void cleanscreen()						 //清屏
{
	unsigned char page,i;
	for(page=0xb8;page<0xc0;page++)
	{
		writecommand(page);
		writecommand(0x40);
		for(i=0;i<64;i++)
		writedate(0x00);
	}

}
void init(void)   //开显示,起始行0行
{	
    writecommand(0xc0);
	writecommand(0x3f);
}
void delay_50us(uint t)
{
 uchar j;  
 for(;t>0;t--)   
  for(j=19;j>0;j--) 
   ;
}
 void shuju()
 {
  pianxuan(i);
  writecommand(ye);
  writecommand(lei);
  writedate(shu);
  }
 void qing()
 {
   uchar i;
  for(i=0xb8;i<=0xbf;i++)
  {
    ye=i;
	shu=0x00;
	shuju();
	}
  }
 void main()
 {
 
	
    uint r,j,g=0,q,dianya=1,k,p;
    uchar U,m,l;
	pianxuan(3);
    cleanscreen();
    init();
	pianxuan(2);
	
   	l=0xb8;
	for(k=0;k<4;k++,l=l+0x02)
	{
	ye=l;
	lei=0x70;
	for(r=0;r<16;r++)
   {
    shu=t[2*r+1+32*k];
	shuju();
	lei++;
	}
	ye=l+0x01;
	lei=0x70;
	for(r=0;r<16;r++)
   {
    shu=t[2*r+32*k];
	shuju();
	lei++;
	}
	}
	
	
  while(1)
  {
uchar d1,d2,d3,d4,d5;
aaa:do
	{
	adc();
	 }while((AD!=128)&&(AD!=129)&&(AD!=130));
    U=AD;
	adc();
	if(U>AD)
	goto aaa;
while(jia==0)
{
 while(jia==0);
 g=g+1;
 }
 while(jian==0)
{
 while(jian==0);
 if(g!=0) g=g-1;
 }
 while(jia1==0)
{
 while(jia1==0);
 dianya=dianya+1;
 }
 while(jian1==0)
{
 while(jian1==0);
 if(dianya!=1) dianya=dianya-1;
 }
 for(j=0;j<94;j++) //AD采样
 {
  adc();
  a[j]=AD;
  delay_50us(g);
  }
    lei=0x40;
    for(r=0,j=0;r<94;r++,j++)
	{
   	if(j<64) i=1;
	if(j==64) lei=0x40;
	if(j>=64)i=2;
	qing();                //清掉之前的内容
    AD=a[j]*0.196/dianya;  //计算在12864的电压值
    if(AD<=7)       ye=0xbf,shu=(0x80>>AD);
	else if(AD<=15) ye=0xbe,shu=0x80>>(AD-8);
    else if(AD<=23) ye=0xbd,shu=0x80>>(AD-16);
    else if(AD<=31) ye=0xbc,shu=0x80>>(AD-24);
    else if(AD<=39) ye=0xbb,shu=0x80>>(AD-32);
    else if(AD<=47) ye=0xba,shu=0x80>>(AD-40);
    else if(AD<=55) ye=0xb9,shu=0x80>>(AD-48);
	else if(AD<=63) ye=0xb8,shu=0x80>>(AD-56);
   if(r==0)
	{
	d1=shu;
	d2=ye;
	}
	if(r!=0)
	{
	 d3=shu;
	 d4=ye;
	 if(ye==d2)
	 {
	  if(shu>d1)
	 {
	 d5=shu;
	 d5=d5>>1;
	 while(d5!=d1)
	 {d5=d5>>1;
	 shu=shu|(shu>>1);}
	 }
	 if(shu<d1)
	 {
	 d5=shu;
	 d5=d5<<1;
	 while(d5!=d1)
	 {d5=d5<<1;shu=shu|(shu<<1);} 
	 }
	}
 
    if(ye<d2)
	 {
	     for(q=0;q<7;q++) 
	     {
		  shu=shu|(shu<<1);
		  } 
		  shuju();
	 	  ye++;
		  while(ye<d2) {shu=0xff,shuju(),ye++;}
		  if(ye==d2){
		              shu=0x01;
					  if(shu<d1)
	                {
	                 d5=shu;
	                 d5=d5<<1;
	                 while(d5!=d1)
	                 {d5=d5<<1;shu=shu|(shu<<1);} 
	                  }
					  }
       }
	  if(ye>d2)
	 {
	     for(q=0;q<7;q++) 
	        {
		      shu=shu|(shu>>1);
		     }
		  shuju();
	 	  ye--;
		  while(ye>d2) {shu=0xff,shuju(),ye--;}
		  if(ye==d2){
		              shu=0x80;
					  if(shu>d1)
	                   {
	                 d5=shu;
	                 d5=d5>>1;
	                 while(d5!=d1)
	                 {d5=d5>>1;shu=shu|(shu>>1);} 
	                    }
					 } 
      }
	  }
	if(r!=0)
	{
	 d1=d3;
	 d2=d4;
	 }
    shuju();
    if(lei!=0x7f) lei++;
	}
	 }
	 }
	
	  
   
	

⌨️ 快捷键说明

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