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

📄 lcd_1621.c

📁 电子称重的程序
💻 C
字号:
#include<head.h>
#include "LCD_1621.h"
#define  lcd_writerising() LWR=LOW; LWR=HIGH;
void lcd_command(bit temp);
void lcd_writecommand(unsigned char commandcode);
void lcd_writedata(Uchar seg,Uchar form,bit mode);

/**************************************************************************
*      字模表格定义
*	   code Uchar form_buf_tab:LCDBUF0-LCDBUF5
*	   code Uchar form_lcd_tab:LCDF0-LCDF2
**************************************************************************/
Uchar lcd_buf[3]={0,0,0};
Uchar lcd_nbuf[6]={0,0,0,0,0,0};
code uchar lcd_j[11]={0x00,0x08,0x0c,0x0e,0x0f,0x8f,0xcf,0xef,0xff,0xff,0xff};
code uchar lcd_num[]={CH0,CH1,CH2,CH3,CH4,           //0.1.2.3.4   4
                         CH5,CH6,CH7,CH8,CH9,	        //5.6.7.8.9   9
			 			 CHA,CHB,CHC,	//    A.B.C   C
                         CHD,CHE,CHF,CHG,CHH,           //D,E,F,G,H   11
                         CHI,CHJ,CHK,CHL,CHM,           //I,J,K,L,M   16
                         CHN,CHO,CHP,CHQ,CHR,           //N,O,P,Q,R   1b
                         CHS,CHT,CHU,CHV,CHW,           //S,T,U,V,W 0x20
                         CHX,CHY,CHZ,CHPLUS,CHBLANK,    //X,Y,Z,-,0x26
                         };
code uchar lcd_char[][2]={
                          {0x85,0x61},{0x00,0x60},{0xa4,0x25},{0xa0,0x65},//0.1.2.3
	                      {0x21,0x64},{0xa1,0x45},{0xa5,0x45},{0x00,0x61},//4.5.6.7
	                      {0xa5,0x65},{0xa1,0x65},//8.9.
                          {0x08,0x66},{0xa5,0x47},{0x85,0x01},{0xa4,0x64},//A.B.C.D
	                      {0xa5,0x05},{0x25,0x05},{0x85,0x45},{0x25,0x64},//E.F.G.H
	                      {0x50,0x00},{0x80,0x60},{0x25,0x0a},{0x85,0x00},//I.J.K.L //{0x50,0x0a}
	                      {0x07,0x62},{0x07,0x68},{0x85,0x61},{0x25,0x25},//M.N.O.P
	                      {0x87,0x69},{0x25,0x0b},{0xa1,0x45},{0x50,0x01},//Q.R.S.T
	                      {0x85,0x60},{0x0d,0x02},{0x0d,0x68},{0x05,0x0a},//U.V.W.X
	                      {0x42,0x02},{0x88,0x03},                        //Y.Z. . 26个
                              {0x00,0x00},{0xa5,0x44},{0xa4,0x04},{0xa4,0x64},//a,b,c,d
                              {0x00,0x00},{0x00,0x00},{0xa1,0x65},{0x00,0x00},//e,f,g,h
                              {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x85,0x00},//i,j,k,l
                              {0x00,0x00},{0x00,0x00},{0xa4,0x44},{0x00,0x00},//m,n,o,p
                              {0x00,0x00},{0x24,0x04},{0x00,0x00},{0xa5,0x04},//q,r,s,t
                              {0x00,0x00},{0x00,0x00},{0x0c,0x48},{0x00,0x00},//u,v,w,x
                              {0x00,0x00},{0xa8,0x07},{0x08,0x02},{0x00,0x00}//y,z
	                     };
code unsigned char voltt[]={0x20,0x21,0x23,0x27,0x2f,0x3f};
/**************************************************************************
*      函数原型: void lcd_setback(BOOL back)
*      功    能: 打开或关闭背光灯
**************************************************************************/
void lcd_setback(BOOL back)
{
 LBL=back;
}
#if 0
void lcd_set(bit onoff)
{
 lcd_writecommand(onoff?0x03:0x2);
}
#endif
/**************************************************************************
*      函数原型: void beep_set(BOOL beep)
*      功    能: 打开或关闭蜂鸣器
**************************************************************************/
void beep_set(BOOL beep)
{
 lcd_writecommand(beep?0x9:0x8);
}
#if 0
/**************************************************************************
*      函数原型: BOOL lcd_writevolt(char volt)
*      功    能: 写入电压显示
*      入口:需写入的数字大小
*      出口:返回是否写入成功
**************************************************************************/
BOOL lcd_writevolt(char volt)
{
	if(volt<0)
	{
		lcd_writedata(30,0,1);
	}
	else
	{
	volt%=6;
	lcd_writedata(30,voltt[volt],1);
	}
	return 1;
}
#endif
/**************************************************************************
*      函数原型: void lcd_flagset(Uchar flagbit,BOOL flag)
*      功    能: 设置符号位
**************************************************************************/
void Dis_SetFlag(Uchar flagbit,BOOL flag)
{
 switch(flagbit)
 {
  case  DIS_MINUS:
        if(flag)lcd_buf[2]|=0x20;
        else  lcd_buf[2]&=0xdf;
        break;
  case  DIS_ZERO:
        if(flag)lcd_buf[2]|=0x10;
        else  lcd_buf[2]&=0xef;
        break;
  case  DIS_STA:
        if(flag)lcd_buf[2]|=0x40;
        else  lcd_buf[2]&=0xbf;
        break;
  case  DIS_TARE:
        if(flag)lcd_buf[1]|=0x40;
        else  lcd_buf[1]&=0xbf;
        break;
  case	DIS_COLON1:
  	if(flag)lcd_buf[1]|=0x02;
	else	lcd_buf[1]&=0xfd;
	break;
  case	DIS_COLON2:
  	if(flag)lcd_buf[1]|=0x04;
	else	lcd_buf[1]&=0xfb;
	break;
  case DIS_HOLD:
       if(flag)lcd_buf[1]|=0x20;
       else  lcd_buf[1]&=0xdf;
        break;
 }
 lcd_writedata(18,lcd_buf[1],0);
 lcd_writedata(16,lcd_buf[1]>>4,0);
 lcd_writedata(17,lcd_buf[2]>>4,0);
 lcd_writedata(29,lcd_buf[2],0);
}
/**************************************************************************
*      函数原型: BOOL lcd_all()
*      功    能:
*      入口:
*      出口:返回是否写入成功
**************************************************************************/
 BOOL lcd_all()
 {
  char i=0;
  for(i=0;i<32;i++)
  {
   lcd_writedata(i,0xff,0);
  }
  return 1;
 }
 /**************************************************************************
*      函数原型: BOOL lcd_clr()
*      功    能:
*      入口:
*      出口:返回是否写入成功
**************************************************************************/
  BOOL lcd_clr()
 {
  char i=0;
  for(i=0;i<32;i++)
  {
   lcd_writedata(i,0x0,0);
  }
  lcd_buf[0]=0;
  lcd_buf[1]=0;
  lcd_buf[2]=0;
  return 1;
 }
/**************************************************************************
*      函数原型: BOOL lcd_writej(char j)
*      功    能: 写入比例尺
*      入口:需写入的数字大小
*      出口:返回是否写入成功
**************************************************************************/
BOOL lcd_writej(char j)
{
 lcd_buf[0]=lcd_j[j];
 lcd_buf[1]|=0x08;
 if(j>8)lcd_buf[1]|=0x01;
 else lcd_buf[1]&=0xfe;
 if(j>9)lcd_buf[1]|=0x10;
 else lcd_buf[1]&=0xef;
 lcd_writedata(19,lcd_buf[0],1);
 lcd_writedata(18,lcd_buf[1],0);
 lcd_writedata(16,lcd_buf[1]>>4,0);
 return 1;
}
/**************************************************************************
*      函数原型: BOOL lcd_writenum(char num[7])
*      功    能: 在数字区写入数据
*      入口:需写入的数字或字母的数组
*      出口:返回是否写入成功
**************************************************************************/
unsigned char lcd_writenum(unsigned char *num)
{
 uchar i=0,j=0;
 Uchar show_temp=0;
 for(i=0;i<6;i++)
 {
  show_temp=num[j];
  if(show_temp>='a') show_temp-=('a'-10);
  else if(show_temp>='A') show_temp-=('A'-10);
  else if(show_temp>='0') show_temp-='0';
  else if(show_temp=='-') show_temp=36;//'-'
  else if(show_temp>9)show_temp=0x25;//blank
  if(num[++j]=='.')
  {
  j++;
  show_temp|=0x80;
  }
  lcd_nbuf[i]=show_temp;
 }
  lcd_outnum(0);
 return j;
}
void lcd_outnum(unsigned char flashbit)
{
  uchar i=0;
  Uchar show_temp=0;
  for(i=0;i<6;i++)
  {
  show_temp=lcd_num[0x7f&lcd_nbuf[i]];
  if(0x80&lcd_nbuf[i])show_temp|=0x80;
//  if(((6-i)==flashbit)||flashbit>6)show_temp&=0x80;
  lcd_writedata(i*2,show_temp,1);
  }
}

/**************************************************************************
*      函数原型: BOOL lcd_writechar(char wchar[3])
*      功    能: 在字符写入数据
*      入口:需写入的数字或字母的数组
*      出口:返回是否写入成功
**************************************************************************/
BOOL lcd_writechar(char *wchar)
{
  uchar i,j=0,k=0;
  Uchar show_temp=0;
  for(i=0;i<3;i++)
  {
    show_temp=wchar[j];
    if(show_temp>='a')
    show_temp-='a'-36;
    else  if(show_temp>='A')
    show_temp-='A'-10;
    else if(show_temp>='0') show_temp-='0';
    else   show_temp=63;
    k=i*4+12+(i>0?5:0);
    lcd_writedata(k,lcd_char[show_temp][0],1);
    show_temp=lcd_char[show_temp][1];
    if(wchar[++j]=='.')
    {
    j++;
    show_temp|=0x80;
    }
    lcd_writedata(k+2,show_temp,1);
  }
  return 1;
}

/**************************************************************************
*      函数原型: void command(bit temp)
*      功    能: 写命令或写数据
**************************************************************************/
void lcd_command(bit temp)
{
 LCS=LOW;
 LDATA=HIGH;           //端口置高 1
 lcd_writerising();    //写入
 LDATA=LOW;            //         0
 lcd_writerising();
 LDATA=temp;           //         0/1  写命令或数据
 lcd_writerising();
}

/**************************************************************************
*      函数原型:void lcd_datadriver(Uchar seg,Uchar form)
*      功    能:写行地址及数据
**************************************************************************/
void lcd_writedata(Uchar seg,Uchar form,bit mode)
{
  Uchar j;
  EA=0;
  lcd_command(HIGH);                                   //101XXXXXXX write
  for(j=0;j<6;j++)
     {
       LDATA=(bit)(seg&0x20);               //地址6位
       seg<<=1;
	   lcd_writerising();
	  }
  for(j=0;j<(mode?0x8:0x4);j++)
      {
        LDATA=(bit)(form&0x01);              //数据
        form>>=1;
		lcd_writerising();
       }
  LDATA=HIGH;
  LCS=HIGH;
  EA=1;
}
/**************************************************************************
*      函数原型:void write_lcdcommand(Uchar commandcode);
*      功    能:写一字节命令到LCD。
**************************************************************************/
void lcd_writecommand(Uchar commandcode)
{
Uchar i;
EA=0;
 lcd_command(LOW);                    //100XXXXXXX 送命令
 for(i=0;i<8;i++)
 {
  LDATA=(bit)(commandcode&0x80);
  commandcode=commandcode<<1;
  lcd_writerising();
 }
 lcd_writerising();             //送无效数据位
 LDATA=HIGH;                    //第九位数据位
 LCS=HIGH;                      //CS置高
 EA=1;
}
/**************************************************************************
*      函数原型: void lcd_writerising(void);
*      功    能:产生写信号上升沿。
**************************************************************************/
/*void lcd_writerising(void)
{
 LWR=LOW;
 LWR=HIGH;
} */
/**************************************************************************
*      函数原型: void init_lcd(void);
*      功    能:初始化LCD。
**************************************************************************/
void lcd_init(void)            //初始化送命令
{
 Uint i=0;
 LCS=HIGH;
 LDATA=HIGH;
 LWR=HIGH;
 lcd_writecommand(0x01);
 lcd_writecommand(0x02);
 lcd_writecommand(0x18);
 lcd_writecommand(0x29);
 lcd_writecommand(0x60);
 lcd_writecommand(0xe3);
 lcd_writecommand(0x03);
lcd_writecommand(0x08);
lcd_clr();
}

⌨️ 快捷键说明

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