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

📄 main.c

📁 液晶12864驱动代码
💻 C
字号:
#include<head.h>
//#include<reg51.h>
//#include<intrins.h>
#define  uint   unsigned int
#define  uchar  unsigned char
#define  ulong  unsigned long


//======================================================================================
#define keyport P2
code uchar fuhu[]="我们还能不能见面  我在佛前求了几千年  让我再吻一吻你的脸";
code uchar num[]="如果有一天失去了信心  就好比我们失去了一条腿";
code uchar lled[]="我们都是好孩子  善良的好孩子";
code uchar number[]="为了你  我变成狼人摸样  为了你  染上了疯狂  为了你穿上厚厚的伪装";

//====================水位显示==============
code uchar zhongwen[]="现在测量得的水位";
code uchar shuzi[]="0123456789";
code uchar zifu[]="厘米";
code uchar kai_fa[]="开阀状态: ";
code uchar guan_fa[]="关阀状态: ";
code uchar kaiguan[]="关开";
extern int  keyvalue;
ulong  Pinlv;
uint Hign_shui;
uint f_h,yichu_count,count_over;
//====================================================================================================
//====================频率表=============================================================================
code ulong pin_lv[]={855,1034,1244,1421,1594,1706,1824,1931,2010,2092,2166,2222,2285, 
  2335,2385,2416,2458,2499,2511,2533,2557,2561,2584,2596,2607,2618,2630,
  2643,2653,2664,2670,2680,2687,2692,2695,2705,2707,2712,2717}; 
//=======================================================================================================
///============水位表===========================================================
code uint Hign[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//================================================================================

unsigned long get_f();

void delay22(unsigned long  i)
{
 while(--i);
}

void display_jianzhi()
{
 shift_164(keyvalue%10);
 shift_164(keyvalue/10);
 shift_164(0xff);
 shift_164(0xff);
 shift_164(0xff);
 shift_164(0xff);
 shift_164(0xff);
 shift_164(0xff);
}

void delay11(uint i)
{
 int j,k;
 for(j=0;j<i;j++)
 for(k=0;k<500;k++);
}

//=========================频率判断
 pinlv_panduan()
{
 ulong idata x,y,i,k,a,dat;
 x=pin_lv[i];
 y=pin_lv[i+1];
 //y=pin_lv[i+2];
 //x=Hign_shui;
 if((x<Pinlv)&(Pinlv<y))
 {
  k=((Pinlv-x)*3)/5;
  a=((y-Pinlv)*3)/5;
  k=x+k;
  a=y-a;
  if((Pinlv-k)>(a-Pinlv)) dat=x;
  else                            dat=y;
 }
 return(dat);
}


//===========================取水位高度=========
 get_Hign()
{
 uint idata i,num,num11,dat;
 num=Hign[i];
 num11=pinlv_panduan();
 if(num==num11) dat=num;
 I2cByteWrite_24C64(0xa0,0x00,dat);
 udelay(100);
 return(dat);
}

//=============液晶显示水位=====================
void display_shuiwei()//加水显示
{
 ulong idata number,n1,n2;
  number=get_Hign();
  n1=number%10;
  n2=number/10;
  display_strword(0,0,zhongwen);
  display_oneword(4,1,shuzi[n2],shuzi[n1]);
  display_oneword(5,1,zifu);
  display_strword(0,2,kai_fa);
  disponechar(6,2,kaiguan,0);
  display_strword(0,3,guan_fa);
   disponechar(6,3,kaiguan,1);
}

void display_shuiwei11()//关水显示
{
 ulong idata number,n1,n2;
  number=get_Hign();
  n1=number%10;
  n2=number/10;
  display_strword(0,0,zhongwen);
  display_oneword(4,1,shuzi[n2],shuzi[n1]);
  display_oneword(5,1,zifu);
  display_strword(0,2,kai_fa);
  disponechar(6,2,kaiguan,1);
  display_strword(0,3,guan_fa);
  disponechar(6,3,kaiguan,0);
}


void display_shuiwei22()//关水显示
{
 ulong idata number,n1,n2;
  number=get_Hign();
  n1=number%10;
  n2=number/10;
  display_strword(0,0,zhongwen);
  display_oneword(4,1,shuzi[n2],shuzi[n1]);
  display_oneword(5,1,zifu);
  display_strword(0,2,kai_fa);
  disponechar(6,2,kaiguan,0);
  display_strword(0,3,guan_fa);
  disponechar(6,3,kaiguan,0);
}




//===============加水程序===============
void jia_shui()
{}

//===================减水程序==========
void jian_shui()
{}

//===============================键盘控制水位
void key_change_xianshi()
{
 switch(keyvalue)
 {
  case 5: display_jianzhi();
           
          clear_disppanel();
          display_shuiwei(); 
          if(Hign_shui<5)
		  {
		    jia_shui();
		   display_shuiwei();
		   while(Hign_shui<5);
		  }
		  if(Hign_shui>5) 
		  {
		   jian_shui();
		   display_shuiwei11();
		   while(Hign_shui>5);
		  }
		  if(Hign_shui==5)  display_shuiwei22(); 
          break;
  case 6: display_jianzhi();
          clear_disppanel();
          display_shuiwei(); 
          if(Hign_shui<6)
		  {
		    jia_shui();
		   display_shuiwei();
		   while(Hign_shui<6);
		  }
		  if(Hign_shui>6) 
		  {
		   jian_shui();
		   display_shuiwei11();
		   while(Hign_shui>6);
		  }
		  if(Hign_shui==6)  display_shuiwei22(); 
          break;

   case 7: 
          display_jianzhi();
          clear_disppanel();
          //display_shuiwei(); 
          if(Hign_shui<7)
 		  {
		   jia_shui();
		   display_shuiwei();
		   while(Hign_shui<7);
		   //display_strword(0,3,zhongwen);
		  }
		  if(Hign_shui>7)
		  {
	       jian_shui();
		   display_shuiwei11();
		   while(Hign_shui>7);
		  }
		  if(Hign_shui==7)  display_shuiwei22(); 
          break;

  case 8: display_jianzhi();
           clear_disppanel();
          display_shuiwei(); 
           if(Hign_shui<8)
		  {
		    jia_shui();
		   display_shuiwei();
		   while(Hign_shui<8);
		  }
		  if(Hign_shui>8) 
		  {
		   jian_shui();
		   display_shuiwei11();
		   while(Hign_shui>8);
		  }
		  if(Hign_shui==8)  display_shuiwei22(); 
          break;
  case 9: display_jianzhi();
           clear_disppanel();
          display_shuiwei(); 
           if(Hign_shui<9)
		  {
		    jia_shui();
		   display_shuiwei();
		   while(Hign_shui<9);
		  }
		  if(Hign_shui>9) 
		  {
		   jian_shui();
		   display_shuiwei11();
		   while(Hign_shui>9);
		  }
		  if(Hign_shui==9)  display_shuiwei22();
          break;

  case 10: display_jianzhi();
           clear_disppanel();
          display_shuiwei(); 
           if(Hign_shui<10)
		  {
		    jia_shui();
		   display_shuiwei();
		   while(Hign_shui<10);
		  }
		  if(Hign_shui>10) 
		  {
		   jian_shui();
		   display_shuiwei11();
		   while(Hign_shui>10);
		  }
		  if(Hign_shui==10)  display_shuiwei22(); 
          break;
  case 11: display_jianzhi();
           clear_disppanel();
          display_shuiwei(); 
           if(Hign_shui<11)
		  {
		    jia_shui();
		   display_shuiwei();
		   while(Hign_shui<11);
		  }
		  if(Hign_shui>11) 
		  {
		   jian_shui();
		   display_shuiwei11();
		   while(Hign_shui>11);
		  }
		  if(Hign_shui==11)  display_shuiwei22();
          break;

  case 12: display_jianzhi();
          clear_disppanel();
          display_shuiwei(); 
          if(Hign_shui<12)
		  {
		    jia_shui();
		   display_shuiwei();
		   while(Hign_shui<12);
		  }
		  if(Hign_shui>12) 
		  {
		   jian_shui();
		   display_shuiwei11();
		   while(Hign_shui>12);
		  }
		  if(Hign_shui==12)  display_shuiwei22(); 
          break;

  case 13: display_jianzhi();
           clear_disppanel();
          display_shuiwei(); 
           if(Hign_shui<13)
		  {
		    jia_shui();
		   display_shuiwei();
		   while(Hign_shui<13);
		  }
		  if(Hign_shui>13) 
		  {
		   jian_shui();
		   display_shuiwei11();
		   while(Hign_shui>13);
		  }
		  if(Hign_shui==13)  display_shuiwei22(); 
          break;
  case 14: display_jianzhi();
           clear_disppanel();
          display_shuiwei(); 
           if(Hign_shui<14)
		  {
		    jia_shui();
		   display_shuiwei();
		   while(Hign_shui<14);
		  }
		  if(Hign_shui>14) 
		  {
		   jian_shui();
		   display_shuiwei11();
		   while(Hign_shui>14);
		  }
		  if(Hign_shui==14)  display_shuiwei22();
          break;

  case 15: display_jianzhi();
           clear_disppanel();
          display_shuiwei(); 
           if(Hign_shui<15)
		  {
		    jia_shui();
		   display_shuiwei();
		   while(Hign_shui<15);
		  }
		  if(Hign_shui>15) 
		  {
		   jian_shui();
		   display_shuiwei11();
		   while(Hign_shui>15);
		  }
		  if(Hign_shui==15)  display_shuiwei22(); 
          break;

default:  //display_jianzhi();
           //delay11(200);
          break;
 }
}

void setto_12864()
{
 while(kbscan()!=15)
 {
   key_change_xianshi();
 }
}



main()
{
 reset_lcd();
 clear_disppanel();
 while(1)
 {
   reset_lcd();
   Pinlv=get_f();//外部取频率
    pinlv_panduan();//判断频率
    get_Hign();//取对应频率的水的高度
	I2cByteRead_24C64(0xa0,0x00);//从24C64读出水位
    display_shuiwei(); //显示水位
   keyport=0xf0;
   if(keyport-0xf0)//对有按键的处理
   {
    kbscan();
	Hign_shui=get_Hign();
	display_jianzhi();
    setto_12864();
    delay11(2);
   }
 }
}

void intt1_time()interrupt 3//T1作为门控时间产生器200US中断一次
{
 	if (yichu_count>=50000)//50000
        {
			TR0=0;//频率停止计数
			TR1=0;//时间停止计数
            EA=0;//关中断
			count_over=1;
			yichu_count=0;
			return;
			}
 	yichu_count=yichu_count+1;
}

unsigned long get_f()
{
 	unsigned long f;
 	count_over=0;
 	TMOD=0X25;
 	TH1=TL1=0X38;//设置T1计数初值,可以100US中断一次
 	f_h=TH0=TL0=0;//频率值清零
 	count_over=0;//清零计数完成标志
 	EA=1;//开所有中断
 	ET0=1;
 	ET1=1;
 	TR0=1;//频率计数器开始计数
 	TR1=1;//时间计数器开始计时
wait_count_over:
 	if(count_over!=1)
	goto wait_count_over;
 	f=(TL0+TH0*256+f_h*65535)/5;
 	return (f);
 }
//******************************测频率子程序*******************/
//******************************测频率子程序*******************
void intt0_f()interrupt 1//T0作为频率值最高八位,频率值共24位
{
 	f_h=f_h+1;
}

⌨️ 快捷键说明

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