C语言程序>>LCD12864

这是一个使用C语言编写的针对CA12864K(ST7920)内核的LCD12864显示器的初始化程序,包括初始化函数、写指令和数据的函数、忙检测、清屏等功能。代码适用于AT89S52单片机,并在AVR Studio 4.17/AVR GCC环境下编译。程序详细解释了各个步骤和注意事项,如初始化时的延时需求,以及在操作液晶显示前的忙标志检测等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

/*****************************************************************
程序说明CA12864K(ST7920)内核的点阵型LCD12864子程序
日   期:2010-09-10
修改日期:
引脚图
|-----------------------------------------------------------------------------------------------------|  
| 1  2 3     4     5     6    7   8   9  10  11  12  13  14  15  16  17 18    19  20     |  
|GND VCC V0 RS(CS) R/W(SID) E(CLK) DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 PSB NC RESET VOUT BLA(5V) BLK(0V)  |
|-----------------------------------------------------------------------------------------------------|
PSB H-并行,L-串行              
注:(1)单片机:AT89S52 晶振Fosc:RC 8MHz
 (2)环境:编译环境 AVR Studio 4.17/AVR GCC WINAVR2009
 (3)显示芯片:CA12864K 控制器:ST7920
 (4)LCM的接口方式:并行方式,PSB接高;
 (5)液晶复位端 悬空 上电清屏时要延时
 (6)每次清屏时要延时 否则会在第一位出现乱码
 (7)每次读/写LCD操作之前,应首先检测忙标志BF,确认BF=0后,访问过程才能进行;
 (8)绘图显示的步骤
  1 关闭绘图显示功能
  2 先将垂直的坐标(Y)写入绘图RAM地址
  3 再将水平的位元组坐标(X)写入绘图RAM地址
  4 将D15-D8写入RAM中
  5 将D7-D0写入到RAM中
  6 打开绘图显示功能
 (9)对于屏幕上面任意一个点,如果我们想要点亮它,必须先读出此点的状态,然后再修改该点,最后送出去,即 读----修改----写 
******************************************************************/
//-----------------------------------------------------------------
// 包含文件
//-----------------------------------------------------------------
#include <avr/io.h>
#include <avr/delay.h>         //WINAVR所带的延时子程序头文件
#include "LCD12864.h"

//-----------------------------------------------------------------
// 数据类型宏定义
//-----------------------------------------------------------------
#define uchar unsigned char
#define uint  unsigned int

//-----------------------------------------------------------------
// 初始化程序区
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// void LCDIO_Init(void)
//-----------------------------------------------------------------
//
// 函数功能: LCDIO初始化
// 入口参数: 无
// 返回参数: 无
// 全局变量: 无
// 调用模块:   
// 注意事项:
//-----------------------------------------------------------------
void LCDIO_Init(void)
{
 LCDDDR_DOUT;            //I/O口方向设置
 LCDDAT_PORT = 0xff;           //I/O口电平设置 
      
 LCDSIG_DDR;       //SIG口方向设置
 LCDSIG_PORT;      //SIG口电平设置
}

//-----------------------------------------------------------------
// void LCD12864_Init(void)
//-----------------------------------------------------------------
//
// 函数功能: LCD12864初始化
// 入口参数: 无
// 返回参数: 无
// 全局变量: 无
// 调用模块: LCD12864_WriteCom(uchar cmd);Delay_us(uint);Delay_ms(uint);    
// 注意事项: 在向液晶写完命令后,必须适当延时;
//-----------------------------------------------------------------
void LCD12864_Init(void)    
{
 LCDDDR_DOUT;               //LCDIO设置输出       
 LCDSIG_DDR;       //SIG口方向设置

 Delay_ms(1);
  LCD12864_WriteCom(FUN_MODE);     //显示模式设置 选择基本指令集
   Delay_ms(1);                //延时10ms(7.5ms以上)
   LCD12864_WriteCom(FUN_MODE);        //选择8bit数据流
   Delay_ms(1);                //延时10ms(7.5ms以上)
    LCD12864_WriteCom(CLEAR_SCREEN);    //清屏指令:清屏且AC值为00H
  Delay_ms(1);                //延时10ms(7.5ms以上)
  LCD12864_WriteCom(DISPLAY_ON);      //显示开
  Delay_ms(1);      //延时2us
 LCD12864_WriteCom(CURSE_ADD);      //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
  Delay_ms(1);      //延时2us
}

//-----------------------------------------------------------------
// 功能程序区
//-----------------------------------------------------------------

//-----------------------------------------------------------------
// void LCD12864_Busy(void)
//-----------------------------------------------------------------
//
// 函数功能: LCD12864忙检测
// 入口参数: 无
// 返回参数: 无
// 全局变量: 无
// 调用模块: 无    
// 注意事项:
//----------------------------------------------------------------- 
void LCD12864_Busy(void)    

 LCDDDR_DIN;           //LCDIO设置输入
 LCDRS_CLR;       //选中命令寄存器
 LCDRW_SET;        //E为H时,数据读到DB7-DB0(RW=H)
 LCDEN_SET;          //高电平使能
 while((LCDDAT_PIN & 0x80) == 0x80);
 LCDEN_CLR;       //禁止 
 LCDDDR_DOUT;            //LCDIO设置输出
}

//-----------------------------------------------------------------
// void LCD12864_WriteCom(uchar cmd)
//-----------------------------------------------------------------
//
// 函数功能: LCD12864写指令
// 入口参数: LCD12864指令
// 返回参数: 无
// 全局变量: 无
// 调用模块: LCD12864_Busy(void);Delay_us(uint x);     
// 注意事项: 对lcd1286操作前要忙检测
//    在数据写入的时候加入适当的延时
//-----------------------------------------------------------------
void LCD12864_WriteCom(uchar cmd)
{
// LCD12864_Busy();                    //忙检测 
 LCDRS_CLR;       //选中命令寄存器
 LCDRW_CLR;       //写操作
 LCDEN_SET;       //使能
 LCDDAT_PORT = cmd;     //数据放到端口
 Delay_ms(5);      //延时
 LCDEN_CLR;       //禁止操作
}

//-----------------------------------------------------------------
// void LCD12864_WriteData(uchar dat)
//-----------------------------------------------------------------
//
// 函数功能: LCD12864写数据
// 入口参数: LCD12864数据
// 返回参数: 无
// 全局变量: 无
// 调用模块: LCD12864_Busy(void);Delay_us(uint x);      
// 注意事项: 在数据写入的时候加入适当的延时
//-----------------------------------------------------------------
void LCD12864_WriteData(uchar dat)
{
// LCD12864_Busy();     //忙检测
 LCDRS_SET;       //选中数据寄存器
 LCDRW_CLR;       //写操作
 LCDEN_SET;       //使能
 LCDDAT_PORT = dat;     //数据放到端口
 Delay_ms(5);      //延时
 LCDEN_CLR;       //禁止操作
}

//-----------------------------------------------------------------
// uchar LCD12864_ReadData(void)
//-----------------------------------------------------------------
//
// 函数功能: LCD12864读数据
// 入口参数: 无
// 返回参数: LCD12864数据
// 全局变量: 无
// 调用模块: LCD12864_Busy(void);Delay_us(uint x);     
// 注意事项: 在数据写入的时候加入适当的延时
//-----------------------------------------------------------------
uchar LCD12864_ReadData(void)
{
    uchar read;
// LCD12864_Busy();     //忙检测
    LCDDDR_DIN;       //LCDIO设置输入
 LCDRS_SET;       //选中数据寄存器
 LCDRW_SET;       //读操作
 LCDEN_CLR;       //禁止操作
 LCDEN_SET;       //使能
 Delay_us(1);      //延时
    read = LCDDAT_PIN;     //从端口读数据
 Delay_us(1);      //延时 
    LCDEN_CLR;       //禁止操作
 LCDDDR_DOUT;      //LCDIO设置输出
 return (read);       //返回读取值
}

//-----------------------------------------------------------------
// void LCD12864_DispString(uchar xpos,uchar ypos,uchar *s)
//-----------------------------------------------------------------
//
// 函数功能: lcd12864显示字符串
// 入口参数: 液晶横坐标 纵坐标 显示汉字指针
// 返回参数: 无
// 全局变量: 无
// 调用模块: void Goto_xy(xpos,ypos);void LCD12864_WriteData(uchar dat);
//    void Delay_us(uchar x);    
// 注意事项: xpos、ypos为汉字坐标;给数据首地址;最多写8*4个汉字
//-----------------------------------------------------------------
void LCD12864_DispString(uchar xpos,uchar ypos,uchar *s) 
{
 Goto_xy(xpos,ypos);     //指定写到液晶的坐标
 Delay_ms(5);      //延时             
 while(*s != '\0')       
 {
  LCD12864_WriteData(*s);        //写数据
  Delay_ms(5);     //延时
  s++;    
 }
}

//-----------------------------------------------------------------
// void Goto_xy(uchar xpos,uchar ypos)
//-----------------------------------------------------------------
//
// 函数功能: 设置显示位置
// 入口参数: 横坐标 纵坐标
// 返回参数: 无
// 全局变量: 无
// 调用模块: void LCD12864_WriteCom(uchar cmd);     
// 注意事项:               X坐标
//    第一行 80H 81H 82H 83H 84H 85H 86H 87H
//    第二行 90H 91H 92H 93H 94H 95H 96H 97H
//    第三行 88H 89H 8aH 8bH 8cH 8dH 8eH 8fH
//    第四行 98H 99H 9aH 9bH 9cH 9dH 9eH 9fH
//-----------------------------------------------------------------
void Goto_xy(uchar xpos,uchar ypos)   
{
 switch(ypos)
 {
  case 0:LCD12864_WriteCom(0x80|xpos);break;//第一行0,0~0,7
  case 1:LCD12864_WriteCom(0x90|xpos);break;//第二行1,0~1,7
  case 2:LCD12864_WriteCom(0x88|xpos);break;//第三行2,0~2,7
  case 3:LCD12864_WriteCom(0x98|xpos);break;//第四行3,0~3,7
  default:break;
 }
}

//-----------------------------------------------------------------
// void LCD12864_CleGdram(void) 
//-----------------------------------------------------------------
//
// 函数功能: 清空GDRAM
// 入口参数: 无
// 返回参数: 无
// 全局变量: 无
// 调用模块: LCD12864_WriteCom(uchar);LCD12864_WriteData(uchar);  
// 注意事项:
//-----------------------------------------------------------------
void LCD12864_CleGdram(void)
{
 uchar x,y,i;
 for(i=0;i<2;i++)
 {
  for(y=0;y<32;y++)
  { 
   for(x=0;x<8;x++)
   {
    LCD12864_WriteCom(0x36);      //扩充指令 绘图显示
    LCD12864_WriteCom(y+0x80);        //行地址
    LCD12864_WriteCom(x+0x80+i*8);      //列地址    
    LCD12864_WriteData(0x00);     //写数据 D15-D8
    LCD12864_WriteData(0x00);     //写数据 D7-D0 
    LCD12864_WriteCom(0x30);
   }
  }
 }                  
}

//-----------------------------------------------------------------
// void LCD12864_Cle(void) 
//-----------------------------------------------------------------
//
// 函数功能: 清空LCD12864
// 入口参数: 无
// 返回参数: 无
// 全局变量: 无
// 调用模块: void LCD12864_WriteCom(uchar);void LCD12864_CleGdram(void);
//    void Delay_us(uint);    
// 注意事项:
//-----------------------------------------------------------------
void LCD12864_Cle(void)
{
 LCD12864_WriteCom(0x0c);   //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
 Delay_us(100);       //延时100us
 LCD12864_WriteCom(0x01);   //清屏指令:清屏且AC值为00H
 Delay_ms(1);      //延时1ms
 LCD12864_CleGdram();    //清空GDRAM
}

//-----------------------------------------------------------------
// END of FILE
//-----------------------------------------------------------------

int main(void )
{
  LCDIO_Init();
  Delay_ms(100);                          //延时100ms
 LCD12864_Init();      //LCD12864初始化
 LCD12864_CleGdram();     //清空GDRAM
 LCD12864_Cle();       //清空LCD12864  
 while(1)
 {
   Goto_xy(1,1);     //设置显示位置
   LCD12864_WriteData(0x31);   //LCD12864写数据
 }
}
/********************************************************
头文件名:lcd12864.h
编写时间:2010.04.20
完成时间:2010.04.20
修改日期:
作者:蔡亚辉
********************************************************/
#ifndef _LCD12864_H_
#define _LCD12864_H_

//-----------------------------------------------------------------
// 数据类型宏定义
//-----------------------------------------------------------------
#define uchar unsigned char 
#define uint  unsigned int  

#define  F_CPU 8000000          // 单片机主频为7.3728MHz,

#define Delay_us(x)     _delay_us(x)        //AVR GCC延时函数 x(us)
#define Delay_ms(x)     _delay_ms(x)        //AVR GCC延时函数 x(ms)

#define BIT(x)   (1<<(x))

//-----------------------------------------------------------------
// I/O口定义
//-----------------------------------------------------------------
#define LCDDDR_DIN  DDRC = 0                //I/O口方向设置
#define LCDDDR_DOUT DDRC = 0xff
 
#define LCDDAT_DDR  DDRC          
#define LCDDAT_PORT PORTC                  
#define LCDDAT_PIN  PINC                 
      
#define LCDSIG_DDR DDRA |= BIT(PA1)|BIT( PA2)|BIT(PA3) //SIG口方向设置
#define LCDSIG_PORT PORTA|= BIT(PA1)|BIT( PA2)|BIT(PA3) //SIG口电平设置

#define LCDRS_CLR  PORTA &= ~BIT(PA3)               //RS置低
#define LCDRS_SET  PORTA |= BIT(PA1)                   //RS置高
 
#define LCDRW_CLR  PORTA &= ~BIT(PA2)                //RW置低
#define LCDRW_SET  PORTA |= BIT(PA1)                  //RW置高

#define LCDEN_CLR  PORTA &= ~BIT(PA1)                //E置低
#define LCDEN_SET  PORTA |= BIT(PA1)                 //E置高

//-----------------------------------------------------------------
// LCD12864功能初始化指令
//-----------------------------------------------------------------
#define CLEAR_SCREEN 0x01    //清屏指令:清屏且AC值为00H
#define AC_INIT      0x02    //将AC设置为00H。且游标移到原点位置
#define CURSE_ADD    0x06    //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
#define FUN_MODE     0x30    //工作模式:8位基本指令集
#define FUN_SPREAD   0x34    //工作模式:扩展方式
#define DISPLAY_ON   0x0c    //显示开
#define DISPLAY_OFF  0x08    //显示关
#define DISPLAYON    0x0f    //显示开,显示游标,且游标位置反白
#define CURSE_DIR    0x14    //游标向右移动:AC=AC+1
#define SET_CG_AC    0x40    //设置AC,范围为:00H~3FH
#define GREW_ON   0x36  //绘图开
#define GREW_OFF     0x30  //绘图关
#define SET_DD_AC    0x80
 
//-----------------------------------------------------------------
// 外部函数声明
//-----------------------------------------------------------------
extern void  LCD12864_Busy(void);    //LCD12864忙检测
extern void  LCD12864_WriteCom(uchar);   //LCD12864写指令
extern void  LCD12864_WriteData(uchar);   //LCD12864写数据
extern uchar LCD12864_ReadData(void);   //LCD12864读数据
extern void  LCDIO_Init(void);     //LCDIO初始化
extern void  LCD12864_Init(void);    //LCD12864初始化
extern void  LCD12864_DispString(uchar xpos,uchar ypos,uchar *s);//lcd12864显示字符串
extern void  Goto_xy(uchar xpos,uchar ypos);  //设置显示位置
extern void  LCD12864_CleGdram(void);   //清空GDRAM
extern void  LCD12864_Cle(void);    //清空LCD12864 
 
#endif

//-----------------------------------------------------------------
// END of FILE
//-----------------------------------------------------------------

/*********************************************************** 实验名称:LCD12864显示汉字示例程序 程序说明:烧好程序,正确插上LCD12864即可观察到LCD上显示的汉字。 注意:USB供电可能不足,这时需要用变压器供电。 ***********************************************************/ /*********************************************************** 模块名称:st7920 并行方式驱动12864液晶驱动 功能概要:st7920显示驱动 完成日期:2008.07.08 驱动芯片:st7920 ***********************************************************/ #include #define uint unsigned int #define uchar unsigned char #define x1 0x80 #define x2 0x88 #define y 0x80 #define comm 0 #define dat 1 sbit RS = P2^0; //H=data; L="command"; sbit RW = P2^1; //H=read; L="write"; sbit E = P2^2; //input enable; sbit PSB= P2^3; //H=并口; L="串口"; sbit RST= P2^5; //Reset Signal 低电平有效 sbit busy=P1^7; //lcd busy bit void wr_lcd (uchar dat_comm,uchar content); void chk_busy (void); void delay (uint us); uchar code tab31[]={ " RF-X1开发板 " " 您学习的首选 " }; uchar code tab32[]={ /*-- 调入了一幅图像:F:\梁\画图\HOCO12832.bmp --*/ /*-- 宽度x高度=128x32 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x18,0x0C,0x00,0x00,0x01,0x00,0x00,0x00,0x00, 0x01,0xFF,0x80,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x13,0x10,0x03,0xFE,0x00, 0x03,0xFF,0xC0,0x00,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x3F,0x30,0x1F,0xFF,0xC0, 0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x8C,0x03,0xF0,0x00,0x7F,0xE0,0x7C,0x01,0xE0, 0x03,0xFF,0xF0,0x00,0x00,0x00,0x01,0x36,0x06,0xC0,0x00,0x5F,0xC0,0xFF,0xFC,0x60, 0x01,0xFF,0xF0,0x00,0x00,0x00,0x02,0x1B,0x0F,0x80,0x00,0xFF,0x01,0xFE,0x0F,0x30, 0x00,0xEF,0xF0,0x00,0x00,0x00,0x02,0x6D,0x9F,0x00,0x00,0x3E,0x03,0xFF,0xF1,0x90, 0x00,0xFF,0xF8,0x00,0x00,0x00,0x04,0x36,0xFE,0x00,0x01,0xFF,0x07,0xFF,0xFC,0x90, 0x00,0xEF,0xFF,0xFF,0x80,0x00,0x04,0xDB,0x7E,0x00,0x03,0xFF,0x87,0xFF,0xFC,0xD0, 0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x04,0x6D,0xFC,0x00,0x07,0xFF,0x8F,0xFF,0xFE,0x50, 0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x36,0xFC,0x10,0x07,0xFF,0x8F,0xFF,0xFE,0x90, 0x00,0x0F,0xFF,0xFF,0xE0,0x00,0x04,0x1B,0xF8,0x10,0x07,0xFF,0xCF,0xFF,0xFE,0x80, 0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x04,0x0F,0xF8,0x10,0x07,0xFF,0xFF,0xFF,0xFA,0x00, 0x00,0x07,0xFF,0xFF,0xF0,0x00,0x04,0x07,0xF0,0x10,0x07,0xFF,0xFF,0xFF,0xFA,0x00, 0x00,0xFF,0xFF,0xFF,0xF8,0x00,0x02,0x03,0xF0,0x20,0x07,0xFF,0xFF,0xFF,0xBA,0x00, 0x00,0xFD,0xFF,0xFF,0xFC,0x00,0x02,0x03,0xF0,0x20,0x03,0xFF,0xFF,0xDF,0xB8,0x00, 0x00,0xC1,0xC0,0x3F,0xFC,0x00,0x01,0x01,0xE0,0x40,0x00,0xFF,0xFF,0xDF,0xB0,0x00, 0x00,0x81,0xC0,0x3F,0xCE,0x00,0x00,0x81,0xE0,0x80,0x00,0x7F,0xFF,0xDF,0xA0,0x00, 0x00,0x81,0x80,0x1D,0xCF,0x00,0x00,0x41,0xE1,0x00,0x00,0x3F,0xFF,0x9B,0x00,0x00, 0x01,0x83,0x80,0x1F,0xC7,0x80,0x00,0x21,0xE2,0x00,0x00,0x1F,0xFD,0xB6,0x00,0x00, 0x01,0xC3,0x00,0x0E,0xE6,0x80,0x00,0x19,0xEC,0x00,0x00,0x07,0xFE,0x20,0x00,0x00, 0x00,0xC3,0x00,0x07,0x67,0x40,0x00,0x07,0xF0,0x00,0x00,0x03,0x3E,0x00,0x00,0x00, 0x00,0x02,0x00,0x03,0xE7,0xA0,0x00,0x00,0x00,0x00,0x00,0x02,0x8E,0x00,0x00,0x00, 0x00,0x06,0x00,0x03,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x00, 0x00,0x06,0x00,0x07,0x03,0x00,0x77,0x46,0x74,0x24,0x80,0x06,0x04,0x00,0x00,0x00, 0x00,0x1C,0x00,0x06,0x00,0x00,0x55,0x45,0x54,0x57,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x1C,0x00,0x0E,0x00,0x00,0x45,0x45,0x74,0x57,0x80,0x08,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1C,0x00,0x00,0x55,0x45,0x44,0x74,0x80,0xF0,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x38,0x00,0x00,0x77,0x76,0x47,0x54,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; uchar code tab5[]={ /*-- 调入了一幅图像:F:\梁\画图\COCK.bmp --*/ /*-- 宽度x高度=128x64 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x04,0x00,0xC0,0x00,0x38, 0x00,0x00,0x30,0x00,0x00,0x69,0xC0,0x00, 0x00,0x00,0x00,0x04,0x18,0xC0,0x00,0x18, 0x00,0x00,0x30,0x00,0x01,0xFF,0xF0,0x00, 0x00,0x00,0x00,0x0C,0x18,0xC0,0x0A,0xBD, 0x50,0x1D,0x75,0xE0,0x01,0xC0,0xF0,0x00, 0x00,0x74,0x00,0x3F,0x8C,0x80,0x1F,0xFF, 0xF0,0x3F,0xFF,0xF0,0x00,0x0D,0xE0,0x00, 0x03,0x8F,0x00,0xF0,0x3F,0xF0,0x30,0x18, 0x00,0x18,0x30,0x60,0x00,0x07,0x00,0x00, 0x0C,0x03,0x80,0xDF,0x30,0x70,0x00,0x38, 0x00,0x1D,0x75,0x60,0x05,0x57,0x54,0x00, 0x10,0x41,0x80,0x3E,0x30,0x20,0x07,0xFF, 0xE0,0x1F,0xFF,0xE0,0x1F,0xFF,0xFF,0x80, 0x21,0xC1,0xC0,0x04,0x3C,0xF0,0x02,0x08, 0x00,0x18,0x30,0x60,0x3F,0x47,0xBF,0x80, 0x40,0xC1,0x80,0x7F,0x9F,0xA0,0x02,0x19, 0x80,0x1D,0x7F,0xE0,0x30,0x03,0x03,0x00, 0xC1,0xC1,0x80,0x2E,0x05,0x80,0x27,0x99, 0x80,0x0F,0xFF,0xE0,0x00,0x03,0x00,0x00, 0x81,0x83,0x00,0x04,0x0D,0x00,0x33,0xE3, 0x00,0x0C,0x70,0x00,0x00,0x03,0x00,0x00, 0x81,0x86,0x00,0x0D,0x99,0x80,0x60,0x3E, 0x00,0x00,0x38,0x01,0x00,0x07,0x00,0x00, 0x81,0xBC,0x00,0x0F,0x39,0xC6,0xE0,0x0F, 0xB6,0x00,0x3F,0xBF,0x00,0x07,0x00,0x00, 0x83,0xF0,0x00,0x1E,0xE0,0xFE,0xE0,0x03, 0xFE,0x00,0x0F,0xFE,0x01,0xFF,0x00,0x00, 0xC3,0x30,0x00,0x89,0x80,0x7C,0x00,0x01, 0xF8,0x00,0x07,0xFC,0x00,0x7C,0x00,0x00, 0x63,0x31,0xFF,0x00,0x00,0x00,0x00,0x00, 0x20,0x00,0x00,0x50,0x00,0x00,0x00,0x00, 0x63,0x19,0x12,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x07,0x19,0x04,0x3F,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80, 0x07,0x19,0x88,0x3F,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80, 0x06,0x0C,0x10,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0E,0x0C,0x20,0x00,0x00,0x00,0x00,0x00, 0x08,0x00,0x00,0x00,0x00,0x40,0x00,0x00, 0x3E,0x0E,0x40,0x0A,0x6D,0xB4,0x07,0x84, 0x35,0x1A,0x67,0xA2,0x01,0xA7,0x9B,0x00, 0x45,0x86,0x80,0x0A,0xAA,0xB4,0x04,0x44, 0x26,0x92,0x68,0xA2,0x01,0x34,0x93,0x00, 0x00,0x03,0x01,0x0E,0xAE,0xB4,0x04,0x44, 0x61,0x1B,0x68,0xA2,0x01,0x0C,0x5B,0x00, 0x00,0x07,0x03,0x0A,0xBA,0xD8,0x06,0x84, 0x41,0xF2,0xC8,0x22,0x03,0x08,0xD7,0x00, 0x00,0x07,0x87,0x0D,0x96,0x68,0x05,0x84, 0x61,0x9B,0xE8,0x22,0x02,0x0C,0x5F,0x00, 0x00,0x1F,0xF6,0x0D,0xB6,0x58,0x04,0x84, 0x45,0x15,0xA8,0xA2,0x03,0x14,0xD5,0x00, 0x00,0x10,0xFC,0x05,0x92,0x48,0x04,0x84, 0x25,0x93,0xAC,0xA2,0x01,0x24,0x95,0x00, 0x00,0x00,0x00,0x0D,0x96,0x49,0x04,0x44, 0x3D,0x14,0xA7,0x1C,0x41,0xE7,0x15,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; /****************************************************************************************** * 函数名称 : * 功能描述 : * 参数 : 参数名称: 输入/输出? 类型 描述 * * 返回值 : * 作者 : * 创建日期 :2007-12-19 * 全局变量 : * 全局静态变量: * 局部静态变量: *----------------------------------------修改历史------------------------------------------ * 当前版本 : 修改人: 修改日期: * 修改说明 : ******************************************************************************************/ void init_lcd (void) { RST = 1; PSB = 1; wr_lcd(comm,0x30); /*30---基本指令动作*/ wr_lcd(comm,0x01); /*清屏,地址指针指向00H*/ wr_lcd(comm,0x06); /*光标的移动方向*/ wr_lcd(comm,0x0c); /*开显示,关游标*/ } /****************************************************************************************** * 函数名称 :chn_disp * 功能描述 : 显示汉字或字符 * 参数 : 参数名称: 输入/输出? 类型 描述 * * 返回值 : * 作者 : * 创建日期 :2007-12-19 * 全局变量 : * 全局静态变量: * 局部静态变量: *----------------------------------------修改历史------------------------------------------ * 当前版本 : 修改人: 修改日期: * 修改说明 : ******************************************************************************************/ void chn_disp(uchar code *chn) { uchar i,j; wr_lcd(comm,0x30); wr_lcd(comm,0x80); for(j=0;j<4;j++) { for(i=0;i<16;i++) wr_lcd(dat,chn[j*16+i]); } } /****************************************************************************************** * 函数名称 :chn_disp1 * 功能描述 : 上半屏显示汉字或字符 * 参数 : 参数名称: 输入/输出? 类型 描述 * * 返回值 : * 作者 : * 创建日期 :2007-12-19 * 全局变量 : * 全局静态变量: * 局部静态变量: *----------------------------------------修改历史------------------------------------------ * 当前版本 : 修改人: 修改日期: * 修改说明 : ******************************************************************************************/ void chn_disp1(uchar code *chn) { uchar i,j; wr_lcd(comm,0x30); wr_lcd(comm,0x80); j=0; for(i=0;i<16;i++) wr_lcd(dat,chn[j*16+i]); wr_lcd(comm,0x90); j=1; for(i=0;i<16;i++) wr_lcd(dat,chn[j*16+i]); } /****************************************************************************************** * 函数名称 :img_disp * 功能描述 : 显示图形 * 参数 : 参数名称: 输入/输出? 类型 描述 * * 返回值 : * 作者 : * 创建日期 :2007-12-19 * 全局变量 : * 全局静态变量: * 局部静态变量: *----------------------------------------修改历史------------------------------------------ * 当前版本 : 修改人: 修改日期: * 修改说明 : ******************************************************************************************/ void img_disp(uchar code *img) { uchar i,j; for(j=0;j<32;j++) { for(i=0;i<8;i++) { wr_lcd(comm,0x34); wr_lcd(comm,y+j); wr_lcd(comm,x1+i); wr_lcd(comm,0x30); wr_lcd(dat,img[j*16+i*2]); wr_lcd(dat,img[j*16+i*2+1]); } } for(j=32;j<64;j++) { for(i=0;i<8;i++) { wr_lcd(comm,0x34); wr_lcd(comm,y+j-32); wr_lcd(comm,x2+i); wr_lcd(comm,0x30); wr_lcd(dat,img[j*16+i*2]); wr_lcd(dat,img[j*16+i*2+1]); } } wr_lcd (comm,0x36); } /****************************************************************************************** * 函数名称 :img_disp1 * 功能描述 : 下半屏显示图形 * 参数 : 参数名称: 输入/输出? 类型 描述 * * 返回值 : * 作者 : * 创建日期 :2007-12-19 * 全局变量 : * 全局静态变量: * 局部静态变量: *----------------------------------------修改历史------------------------------------------ * 当前版本 : 修改人: 修改日期: * 修改说明 : ******************************************************************************************/ void img_disp1(uchar code *img) { uchar i,j; for(j=0;j<32;j++) { for(i=0;i<8;i++) { wr_lcd(comm,0x34); wr_lcd(comm,y+j); wr_lcd(comm,x2+i); wr_lcd(comm,0x30); wr_lcd(dat,img[j*16+i*2]); wr_lcd(dat,img[j*16+i*2+1]); } } wr_lcd(comm,0x36); } /****************************************************************************************** * 函数名称 :lat_disp * 功能描述 : 显示点阵 * 参数 : 参数名称: 输入/输出? 类型 描述 * * 返回值 : * 作者 : * 创建日期 :2007-12-19 * 全局变量 : * 全局静态变量: * 局部静态变量: *----------------------------------------修改历史------------------------------------------ * 当前版本 : 修改人: 修改日期: * 修改说明 : ******************************************************************************************/ void lat_disp(uchar data1,uchar data2) { uchar i,j,k,x; x=x1; for(k=0;k<2;k++) { for(j=0;j<16;j++) { for(i=0;i<8;i++) { wr_lcd(comm,0x34); wr_lcd(comm,y+j*2); wr_lcd(comm,x+i); wr_lcd(comm,0x30); wr_lcd(dat,data1); wr_lcd(dat,data1); } for(i=0;i<8;i++) { wr_lcd(comm,0x34); wr_lcd(comm,y+j*2+1); wr_lcd(comm,x+i); wr_lcd(comm,0x30); wr_lcd(dat,data2); wr_lcd(dat,data2); } } x=x2; } wr_lcd(comm,0x36); } /****************************************************************************************** * 函数名称 :con_disp * 功能描述 : 当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl * 参数 : 参数名称: 输入/输出? 类型 描述 * * 返回值 : * 作者 : * 创建日期 :2007-12-19 * 全局变量 : * 全局静态变量: * 局部静态变量: *----------------------------------------修改历史------------------------------------------ * 当前版本 : 修改人: 修改日期: * 修改说明 : ******************************************************************************************/ void con_disp(uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl) { uchar i,j; for(j=0;j<yl;j++) { for(i=0;i<xl;i++) { wr_lcd(comm,0x34); wr_lcd(comm,y0+j); wr_lcd(comm,x0+i); wr_lcd(comm,0x30); wr_lcd(dat,data1); wr_lcd(dat,data2); } } wr_lcd(comm,0x36); } /****************************************************************************************** * 函数名称 :clrram * 功能描述 : 清DDRAM * 参数 : 参数名称: 输入/输出? 类型 描述 * * 返回值 : * 作者 : * 创建日期 :2007-12-19 * 全局变量 : * 全局静态变量: * 局部静态变量: *----------------------------------------修改历史------------------------------------------ * 当前版本 : 修改人: 修改日期: * 修改说明 : ******************************************************************************************/ void clrram(void) { wr_lcd(comm,0x30); wr_lcd(comm,0x01); } /****************************************************************************************** * 函数名称 :wr_lcd * 功能描述 : * 参数 : 参数名称: 输入/输出? 类型 描述 * * 返回值 : * 作者 : * 创建日期 :2007-12-19 * 全局变量 : * 全局静态变量: * 局部静态变量: *----------------------------------------修改历史------------------------------------------ * 当前版本 : 修改人: 修改日期: * 修改说明 : ******************************************************************************************/ void wr_lcd(uchar dat_comm,uchar content) { chk_busy (); if(dat_comm) { RS = 1; //data RW = 0; //write } else { RS = 0; //command RW = 0; //write } P0=content; //output data or comm E = 1; ; E = 0; } /****************************************************************************************** * 函数名称 :chk_busy * 功能描述 : * 参数 : 参数名称: 输入/输出? 类型 描述 * * 返回值 : * 作者 : * 创建日期 :2007-12-19 * 全局变量 : * 全局静态变量: * 局部静态变量: *----------------------------------------修改历史------------------------------------------ * 当前版本 : 修改人: 修改日期: * 修改说明 : ******************************************************************************************/ void chk_busy(void) { P0 = 0xff; RS = 0; RW = 1; E = 1; while(busy==1); E = 0; } /****************************************************************************************** * 函数名称 : * 功能描述 : * 参数 : 参数名称: 输入/输出? 类型 描述 * * 返回值 : * 作者 : * 创建日期 :2007-12-19 * 全局变量 : * 全局静态变量: * 局部静态变量: *----------------------------------------修改历史------------------------------------------ * 当前版本 : 修改人: 修改日期: * 修改说明 : ******************************************************************************************/ void delay(uint us) //delay time { while(us--); } /****************************************************************************************** * 函数名称 : * 功能描述 : * 参数 : 参数名称: 输入/输出? 类型 描述 * * 返回值 : * 作者 : * 创建日期 :2007-12-19 * 全局变量 : * 全局静态变量: * 局部静态变量: *----------------------------------------修改历史------------------------------------------ * 当前版本 : 修改人: 修改日期: * 修改说明 : ******************************************************************************************/ void delay1(uint ms) { uint i,j; for(i=0;i<ms;i++) for(j=0;j<15;j++) delay(1); } /****************************************************************************************** * 函数名称 : * 功能描述 : * 参数 : 参数名称: 输入/输出? 类型 描述 * * 返回值 : * 作者 : * 创建日期 :2007-12-19 * 全局变量 : * 全局静态变量: * 局部静态变量: *----------------------------------------修改历史------------------------------------------ * 当前版本 : 修改人: 修改日期: * 修改说明 : ******************************************************************************************/ void main() { SP=0x5f; init_lcd(); while(1) { //lat_disp(0x00,0x00); // chn_disp(tab1); //con_disp(0xff,0xff,0x8c,0x80,2,16); //delay1(8000); //clrram(); //lat_disp(0xcc,0xcc); //delay1(8000); lat_disp(0x00,0x00); chn_disp1(tab31); img_disp1(tab32); delay1 (8000); clrram(); //lat_disp (0xff,0x00); //delay1(8000); img_disp(tab5); delay1(8000); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值