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

📄 lcd.c

📁 LCD.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
/*--------------------------------------------------*/
/*             AVR-ARM开发网论坛                    */
/*           http://www.avrarm.com                  */
/*            AVR生成代码测试程序                   */
/*--------------------------------------------------*/
/*     程序由AVR辅助开发工具V2.0.0自动生成          */
/*     AVR系统的处理器为:   ATMega16               */
/*     AVR系统的晶振频率:   8.0000 Mhz             */
/*--------------------------------------------------*/

#include <iom16v.h>
#include <macros.h>
#include "lcd.h"
#include "delay.h"

unsigned char CurOffset,CurRow,CurPage,CurCol;


void LCD_BUSY(unsigned char lr) //判断忙标志
{
   unsigned char status;
   asm("cli");
   if(lr==RIGHT)
   {
      CLEAR_LCD_CS2; //cs2=0
      SET_LCD_CS1;   //cs1=1
   }
   else
   {
      SET_LCD_CS2;   //cs2=1
      CLEAR_LCD_CS1; //cs1=0
   }
   SET_LCD_CMD;
   LCD_DIR_PORT = 0x00;
   LCD_OP_PORT = 0xff;
   SET_LCD_READ;
   SET_LCD_E;
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   while((LCD_IP_PORT) & LCD_STATUS_BUSY)
   {
      CLEAR_LCD_E;
      asm("nop");
      asm("nop");
      asm("nop");
      asm("nop");
      SET_LCD_E;
      asm("nop");
      asm("nop");
      asm("nop");
      asm("nop");
   }
   CLEAR_LCD_E;
   SET_LCD_WRITE;
   LCD_OP_PORT = 0xff;
   asm("sei");
}

void write_LCD(unsigned char lr,unsigned char cd,unsigned char data) /*写入指令或数据*/
{	
   CLI();
   LCD_BUSY(lr);
   if(cd==CMD)
      SET_LCD_CMD;
   else
      SET_LCD_DATA;
   SET_LCD_WRITE;
   SET_LCD_E;
   LCD_DIR_PORT = 0xff;
   LCD_OP_PORT = data;
   delay_nus(4);
   CLEAR_LCD_E;
   LCD_OP_PORT = 0xff;
   SEI();
}
unsigned char read_LCD(unsigned char lr)	  /*  读显示数据 */
{
   unsigned char data;
   
   asm("cli");
   LCD_BUSY(lr);
   SET_LCD_DATA;
   LCD_DIR_PORT = 0x00;
   LCD_OP_PORT = 0xff;
   SET_LCD_READ;
   SET_LCD_E;
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   data=LCD_IP_PORT;
   CLEAR_LCD_E;
   SET_LCD_WRITE;
   
   LCD_BUSY(lr);
   SET_LCD_DATA;
   LCD_DIR_PORT = 0x00;
   LCD_OP_PORT = 0xff;
   SET_LCD_READ;
   SET_LCD_E;
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   data=LCD_IP_PORT;
   CLEAR_LCD_E;
   SET_LCD_WRITE;

   asm("sei");
   return data;
}

void set_start_line_L(unsigned char line) /*设置显示起始行*/ //0-63
{
   write_LCD(LEFT,CMD,0xc0|line);
}

void set_start_line_R(unsigned char line) /*设置显示起始行*/ //0-63
{
   write_LCD(RIGHT,CMD,0xc0|line);
}

void set_page_L(unsigned char page)	/*设置X地址 设置页*/  //0-7
{
   write_LCD(LEFT,CMD,0xb8|page);
}
void set_page_R(unsigned char page)	/*设置X地址 设置页*/ //0-7
{
   write_LCD(RIGHT,CMD,0xb8|page);
}

void set_col_addr_L(unsigned char col) /*设置Y地址*/ //0-63
{
   write_LCD(LEFT,CMD,0x40|col);
}

void set_col_addr_R(unsigned char col) /*设置Y地址*/ //0-63
{
   write_LCD(RIGHT,CMD,0x40|col);
}

void LCD_Init(void) /*初始化函数*/
{
   LCD_DIR_PORT = 0xff;
   LCD_OP_PORT = 0xff;
   LCD_EN_DDR    |=  LCD_EN_BIT;
   LCD_DI_DDR    |=  LCD_DI_BIT;
   LCD_CS1_DDR   |=  LCD_CS1_BIT;
   LCD_CS2_DDR   |=  LCD_CS2_BIT;
   LCD_RW_DDR    |=  LCD_RW_BIT;
   LCD_RW_PORT   &= ~LCD_RW_BIT;
   set_start_line_L(0);             /*显示起始行为0*/
   set_start_line_R(0);             /*显示起始行为0*/
   write_LCD(LEFT,CMD,DISPLAY_ON);  /*  开显示  */
   write_LCD(RIGHT,CMD,DISPLAY_ON); /*  开显示  */
}

void LCD_clr(void)                  /*清屏函数*/
{
   unsigned char pages,i;
   for(pages=0;pages<8;pages++)
   {
      set_page_L(pages);            /* X 页地址 */
      set_page_R(pages);            /* X 页地址 */
      for(i=0;i<64;i++)
      {
         set_col_addr_L(i);//Y
         set_col_addr_R(i);//Y
         write_LCD(LEFT,DATA,0x0);
         write_LCD(RIGHT,DATA,0x0);
      }
   }
}

//ASCII 字模宽度及高度
#define ASC_CHR_WIDTH	8
#define ASC_CHR_HEIGHT	12

typedef struct typFNT_ASC16	/* 汉字字模显示数据结构 */
{
   char Index[1];
   char Msk[16];
};
struct typFNT_ASC16 const ASC_16[] = {	/* 显示为8*16  Curier 10 常规*/
   "1",0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x04,0x04,0x00,
   "2",0x00,0x00,0x08,0x04,0x84,0x44,0x38,0x00,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x00,
   "3",0x00,0x00,0x08,0x04,0x44,0x44,0xB8,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x03,0x00,
   "4",0x00,0x00,0x80,0x60,0x18,0xFC,0x00,0x00,0x00,0x00,0x01,0x01,0x05,0x07,0x05,0x00,
   "5",0x00,0x00,0x7C,0x44,0x44,0x44,0x84,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x03,0x00,
   "6",0x00,0x00,0xF0,0x48,0x44,0x44,0x80,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,
   "7",0x00,0x00,0x0C,0x04,0x84,0x64,0x1C,0x00,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x00,
   "8",0x00,0x00,0xB8,0x44,0x44,0x44,0xB8,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,
   "9",0x00,0x00,0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x00,0x00,0x04,0x04,0x02,0x01,0x00,
   "0",0x00,0x00,0xF8,0x04,0x04,0x04,0xF8,0x00,0x00,0x00,0x03,0x04,0x04,0x04,0x03,0x00,
   ".",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
   ",",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,
   ":",0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
   ";",0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x00,
   "-",0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
   "_",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
   "A",0x00,0x00,0x80,0x64,0x1C,0x60,0x80,0x00,0x00,0x04,0x07,0x05,0x01,0x05,0x07,0x04,
   "B",0x00,0x04,0xFC,0x44,0x44,0x44,0x44,0xB8,0x00,0x04,0x07,0x04,0x04,0x04,0x04,0x03,
   "C",0x00,0xF0,0x08,0x04,0x04,0x04,0x04,0x08,0x00,0x01,0x02,0x04,0x04,0x04,0x04,0x02,
   "D",0x00,0x04,0xFC,0x04,0x04,0x04,0x08,0xF0,0x00,0x04,0x07,0x04,0x04,0x04,0x02,0x01,
   "E",0x00,0x04,0xFC,0x44,0x44,0xE4,0x04,0x0C,0x00,0x04,0x07,0x04,0x04,0x04,0x04,0x06,
   "F",0x00,0x04,0xFC,0x44,0x44,0xE4,0x04,0x0C,0x00,0x04,0x07,0x04,0x04,0x00,0x00,0x00,
   " ",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
   "=",0x00,0x00,0xA0,0xA0,0xA0,0xA0,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
   "(",0x00,0x00,0x00,0xE0,0x18,0x04,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x10,0x00,0x00,
   ")",0x00,0x00,0x00,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x00,0x10,0x0C,0x03,0x00,0x00,
   "V",0x00,0x04,0x3C,0xC4,0x00,0xC4,0x3C,0x04,0x00,0x00,0x00,0x01,0x06,0x01,0x00,0x00,
   "m",0x00,0x20,0xE0,0x20,0xC0,0x20,0xC0,0x00,0x00,0x04,0x07,0x00,0x07,0x00,0x07,0x04,
   "H",0x00,0x04,0xFC,0x44,0x40,0x44,0xFC,0x04,0x00,0x04,0x07,0x04,0x00,0x04,0x07,0x04,
   "*",0x90,0x90,0x60,0xFC,0x60,0x90,0x90,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
};

#define ASC_HZ_WIDTH	12
//#define ASC_HZ_HEIGHT	12

typedef struct typFNT_GB16	/*12*16 汉字字模显示数据结构 */
{
   char Index[2];
   char Msk[24];
};
struct typFNT_GB16 const GB_16[] = {	/* 宋体 9 显示为12*16 */
   "液",0x19,0xE2,0x14,0x42,0xF2,0x2E,0x72,0x8F,0xAA,0x7A,0x02,0x00,0x01,0x07,0x00,0x00,0x07,0x04,0x04,0x02,0x01,0x02,0x04,0x00,
   "晶",0x00,0xC0,0x40,0x5F,0xD5,0x15,0xD5,0x55,0x5F,0x40,0xC0,0x00,0x00,0x07,0x05,0x05,0x07,0x00,0x07,0x05,0x05,0x05,0x07,0x00,
   "显",0x00,0x40,0x9F,0x15,0xD5,0x15,0xD5,0x15,0x1F,0xC0,0x00,0x00,0x04,0x04,0x05,0x04,0x07,0x04,0x07,0x06,0x05,0x04,0x04,0x00,
   "示",0x10,0x12,0x92,0x52,0x12,0xF2,0x12,0x12,0x53,0x92,0x10,0x00,0x02,0x01,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x03,0x00,
   "的",0xFC,0x44,0x46,0x45,0xFC,0x10,0x2C,0xC7,0x04,0x04,0xFC,0x00,0x07,0x02,0x02,0x02,0x07,0x00,0x00,0x04,0x04,0x04,0x03,0x00,
   "第",0x04,0xEA,0xAB,0xAE,0xAA,0xFC,0xAA,0xAB,0xAE,0xBA,0x82,0x00,0x04,0x04,0x02,0x01,0x00,0x07,0x00,0x02,0x02,0x02,0x01,0x00,
   "一",0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
   "行",0x48,0x24,0xF3,0x08,0x09,0x09,0x09,0x09,0xF9,0x09,0x08,0x00,0x00,0x00,0x07,0x00,0x00,0x04,0x04,0x04,0x07,0x00,0x00,0x00,
   "二",0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
   "三",0x00,0x02,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x02,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,
   "四",0x00,0xFF,0x81,0x41,0x3F,0x01,0x01,0xFF,0x81,0x81,0xFF,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x07,0x00,
   "五",0x00,0x11,0x11,0x91,0x7F,0x11,0x11,0x11,0xF1,0x01,0x00,0x00,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x00,
};

unsigned char GetPage(void) /*得到当前页*/
{
   return CurPage;
}

unsigned char GetCol(void) /*得到当前列*/
{
   return CurCol;
}

void SetPageCol(unsigned char upage, unsigned char ucol) /* 设置液晶的页和列 */
{
   CurPage = upage;
   CurCol = ucol;
   if(ucol<64)
   {
      set_page_L(upage);
      set_col_addr_L(ucol);
   }
   else
   {
      set_page_R(upage);
      set_col_addr_R(ucol-64);
   }
}

/* 设置当前显示的页和列 */
void SetRowCol(unsigned char urow, unsigned char ucol) 

⌨️ 快捷键说明

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