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

📄 lcd12864.c

📁 1、《ADC0804》实验 1)下载程序 2)插上LCD12864 3)LCD12864上显示当前输入ADC0804的电压 4)通过K3按钮切换板载输入或外部输入
💻 C
字号:
/*****************************************************************/ 
/*                                                               */                                                                
/*名称:            AD转换+LCD12864显示程序                      */                                                                                                                                                                           
/*功能:         1  AD转换,二进制转换成十进制                   */
/*               2  显示英文,数字,符号,图片。                 */                                                    
/*难度等级:                   高                                */                                                                     
/* 作者:                  zengrenliang                          */
/* 版权:           http://www.51kaifa.com                       */
/*编写日期:        2006.05.20                                   */                                                                                                                                                                                                             
/*****************************************************************/

#include <reg52.h>
#include  <string.h>

#define uchar unsigned char

/**********引脚定义*********/

sbit lck = P3^5;//锁存信号
sbit addr0 = P1^4;
sbit addr1 = P1^5;
sbit addr2 = P1^6;
sbit cs138 = P1^7;

/********常用命令及参数定义********/
#define DISPON     0x3f
#define DISPOFF    0x3e
#define DISPFIRST  0xc0
#define SETX       0x40
#define SETY       0xb8
#define LCDBUZY    0x80
#define L          0x00
#define R          0x40
#define LIMIT      0x80

/**********全局变量************/
uchar  cbyte;
uchar data statu;
bit xy;

/**************函数******************/

void WrL(uchar x);
void WrR(uchar x);
void Lcmcls(void);
void Lcminit (void);
void Putpicture();
void delay(unsigned int time);
void VtoH8x16change(uchar *hzbuf);
void Puthalf(uchar *strch,uchar row,uchar col);
void Wrdata(uchar x,uchar row,uchar col);
void Locatexy(uchar row,uchar col);
void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag);
uchar ADC0804();


extern uchar  code  char_Table[95][16];

extern unsigned char code  picture[];

/***************微秒级延时*****************/
void delay(unsigned int  time)
{ unsigned int i;
    for(i=0;i<time;i++);
 }


/***********主程序***************/
void main(void)
{  uchar  i,j,k;
   float voltage,decimal;
   unsigned int intvolt,tofloat;
    
    addr0 = 1;
    addr1 = 0;
    addr2 = 1;//ULN2003片选地址  
    P0 = 0x00;//断开继电器A,B
    cs138 = 1;
    cs138 = 0;//数据锁存到U18(74HC574)  

    Lcminit();//LCD初始化
    Putpicture();//显示界面图片
    while(1)
     { 

       voltage = ADC0804();
       voltage = voltage * 0.0391;//将二进制字节数据变成实际电压值   10/256 = 0.0196
       intvolt = voltage;//取整数部分
       tofloat = intvolt; 
       decimal = voltage - tofloat;//取小数部分
       decimal = decimal * 100;//小数部分取两位
       i = intvolt % 0x0a + '0';//整数部分个位
       intvolt = decimal;
       j = intvolt % 0x0a + '0';//小数部分低位
       intvolt = intvolt / 0x0a;
       k = intvolt % 0x0a + '0';//小数部分高位
       vWrite8x16Character(&char_Table['V'-0x20][0],3,112,0);//显示电压单位
       vWrite8x16Character(&char_Table[j-0x20][0],3,104,0);//显示小数低位
       vWrite8x16Character(&char_Table[k-0x20][0],3,96,0); //显示小数高位
       vWrite8x16Character(&char_Table['.'-0x20][0],3,88,0); //显示小数点
       vWrite8x16Character(&char_Table[i-0x20][0],3,80,0);//显示整数位        
       delay(5000);
      }
}

/*******************0804转换程序********************/
uchar  ADC0804()
{  uchar adc0804value;
   addr0 = 1;
   addr1 = 1;
   addr2 = 0;//输出AD0804片选地址。
   cs138 = 1;
   P0 = 0xff;//向ADC0804发任何数据,0804开始转换
   WR = 0;
   WR = 1;
   delay(1000);//等待转换完成
   RD = 0;
   adc0804value=P0;//读取转换后的值
   RD = 1;
   cs138 = 0;
   return(adc0804value);
}
 

//***********初始化LCD*******************/

void Lcminit (void)
{ 
    cbyte=DISPOFF;
    WrL(cbyte);
    WrR(cbyte);
    cbyte=DISPON;
    WrL(cbyte);
    WrR(cbyte);
    cbyte=DISPFIRST;
    WrL(cbyte);
    WrR(cbyte);
    Lcmcls();
    Locatexy(0,0);
}


/***************LCD清屏********************/
void Lcmcls(void)
{ uchar  i,j;
    for(i=0;i<8;i++){
      delay(6);
        for(j=0;j<LIMIT;j++){
          delay(6);
          Wrdata(0x0,i,j);
         }
     }
}

/**************写左区***************/

void WrL(uchar x)
{
   
   P0=0xFF;//P0口送FF,准备读
   lck = 0;
   P1 = 0x2a;//ELCD=1

⌨️ 快捷键说明

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