大家好,这是我最近做的仿真,附件里包含有程序代码,proteus仿真,原理图,还有报告
- #include <reg51.h> //51 单片机常用寄存器定义
- #include <absacc.h> //解析XBYTE 宏定义
- /*常用操作命令和参数定义*/
- #define DISPON 0x3f //显示开
- #define DISPOFF 0x3e //显示关,参考指令表"显示开关设置"
- #define FIRSTROW 0xc0 //显示起始行设置,参考指令表,由LXBYTE[5..0]在0 到63 行选择
- #define SETY 0xb8 //Y 方向,8 页64 行,参考指令表,由PXBYTE[2..0]在0 到8 页选择
- #define SETX 0x40 //X 方向,半屏64 列,参考指令表,由CXBYTE[5..0]在0 到63 列选择
- #define LLCD_CMD_WR XBYTE[0xf4f0]
- #define LLCD_DAT_WR XBYTE[0xf5f0]
- #define LLCD_CMD_RD XBYTE[0xf6f0]
- #define LLCD_DAT_RD XBYTE[0xf7f0]
- #define RLCD_CMD_WR XBYTE[0xf8f0]
- #define RLCD_DAT_WR XBYTE[0xf9f0]
- #define RLCD_CMD_RD XBYTE[0xfaf0]
- #define RLCD_DAT_RD XBYTE[0xfbf0]
- /*一贞图片,宽度x 高度=128x64*/
- code unsigned char logo[] =
- {
- 0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
- 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
- 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xE3,0xC3,0xC7,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,
- 0x10,0xFE,0x10,0x10,0xF8,0x10,0x00,0x00,0x00,0x44,0xFC,0x44,0x44,0x28,0x48,0x88,
- 0xFE,0x88,0x4E,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x07,0x03,0x01,
- 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x0F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x04,
- 0x03,0x00,0x00,0x00,0x0F,0x08,0x08,0x0E,0x00,0x04,0x07,0x02,0x01,0x02,0x09,0x08,
- 0x0F,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x03,0x01,0x00,0x00,0x00,0x00,0x00,
- 0x04,0x04,0x04,0x84,0x8C,0x88,0x88,0x98,0x18,0x10,0x00,0x00,0x01,0x03,0x07,0x0F,
- 0x1F,0x3F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x22,0x22,
- 0x22,0xA2,0x7E,0xA2,0x22,0x22,0x22,0x20,0x00,0x00,0x00,0xFC,0x14,0x92,0x92,0x92,
- 0x92,0x92,0x92,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x03,0x03,0x03,0x01,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xFC,0x80,0x04,0x00,0x0E,0x1F,0x1F,0x1F,0x1F,0x0F,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x04,
- 0x02,0x01,0x00,0x01,0x02,0x04,0x08,0x08,0x00,0x08,0x06,0x01,0x00,0x0F,0x04,0x04,
- 0x04,0x04,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xFF,0xFF,0x3F,0x7F,0x7F,0x7F,0x7F,0x3F,0x7F,0x7F,0x7F,0x3F,0x7F,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x80,0xE0,0x30,0x18,0x0C,0x00,0x00,0x10,0x00,0x10,0x70,0x60,0x70,
- 0x70,0xFF,0xFE,0xFC,0xE0,0xC0,0xC0,0x80,0xC0,0xE0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0x1F,0x1F,0x1F,0x0F,0x0F,0x0F,0x0F,0x1F,0x1F,0x0F,
- 0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x48,0x90,0x00,0x48,0xD8,0x68,0xF8,0x68,0xD8,
- 0x48,0x40,0x00,0xF0,0x90,0x90,0xF0,0x20,0x20,0xF8,0x90,0x50,0x30,0x90,0x00,0x20,
- 0xE0,0x38,0xE0,0x10,0xD0,0x50,0x58,0x50,0xD0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xFF,0xFF,0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xE0,0xC0,0x80,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x04,0x0C,0x04,0x04,0x04,0x04,0x02,0x02,0xC6,0xA6,0xA6,0xE6,
- 0xE7,0xFF,0xFF,0x1F,0x07,0xC3,0xC0,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFE,0xFE,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
- 0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x08,0x3E,0x02,0x01,0x3E,0x2A,0x3F,0x2A,0x2A,
- 0x3F,0x02,0x00,0x0F,0x08,0x08,0x2F,0x25,0x1D,0x04,0x1C,0x25,0x25,0x31,0x00,0x24,
- 0x17,0x08,0x17,0x03,0x25,0x25,0x3D,0x05,0x05,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xFF,0xFF,0xFF,0xE3,0xE3,0xE3,0xF7,0xEF,0xC7,0xC7,0xCF,0xCF,0xCF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x7E,
- 0xFE,0xFC,0xFC,0xF0,0xF0,0xE0,0xE0,0xC0,0xC0,0x80,0x80,0x81,0x81,0x81,0xC1,0xC1,
- 0xE1,0xF0,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
- 0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
- 0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
- 0xFF,0xFF,0xF9,0xFB,0xF3,0xC3,0x83,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,
- 0x00,0x00,0x01,0x01,0x01,0x03,0x07,0x07,0x0F,0x1F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,
- 0xFF,0x7F,0xEF,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xE7,0xE7,0xE7,0x67,0x67,0x67,0xE7,0xE7,0x67,0x07,0x3F,0x37,
- };
- void delay(unsigned char timer);/*通用延时函数*/
- void check_busy(unsigned char);/*LCD 忙检测*/
- void lcd_init(void);/*LCD 初始化*/
- void lcd_cmd_wr(unsigned char, unsigned char);/*写命令*/
- void lcd_data_wr(unsigned char, unsigned char);/*写数据*/
- void lcd_bmp_wr(unsigned char *bmp);/*写一贞128×64 点的图片显示*/
- void lcd_clr(void);/*数据清屏*/
- void lcd_mov_up();/*整屏向上循环移动*/
- /*主函数,显示一贞图片范例*/
- void main(void)
- {
- delay(50000);//适当延时,等待LCD 复位
- lcd_init();
- lcd_bmp_wr(logo);//logo 图片数据附后
- while(1)
- {
- //整屏向上循环移动
- lcd_mov_up();
- lcd_clr();
- delay(50000);
- lcd_bmp_wr(logo);//logo 图片数据附后
- }
- }
- /*LCD 忙检测*/
- void check_busy(unsigned char right)
- {
- unsigned char temp=0xff;
- do
- {
- if(right) temp=RLCD_CMD_RD;
- else temp=LLCD_CMD_RD;
- }
- while((temp|0x7f)==0xff);//检测D7 是否为1,1 表示LCD 忙,如果忙,继续检测,直到空闲止
- }
- /*写命令*/
- void lcd_cmd_wr(unsigned char cmdcode, unsigned char right)
- {
- check_busy(right);
- if(right) RLCD_CMD_WR = cmdcode;
- else LLCD_CMD_WR = cmdcode;
- }
- /*LCD 初始化*/
- void lcd_init(void)
- {
- lcd_cmd_wr(DISPON,0); //开显示,0 参数表示左屏
- lcd_cmd_wr(FIRSTROW,0); //设定显示首列
- lcd_cmd_wr(SETY,0); //设定Y 坐标
- lcd_cmd_wr(SETX,0); //设定X 坐标
- lcd_cmd_wr(DISPON,1); //1 参数表示右屏
- lcd_cmd_wr(FIRSTROW,1);
- lcd_cmd_wr(SETY,1);
- lcd_cmd_wr(SETX,1);
- }
- /*写数据*/
- void lcd_data_wr(unsigned char dispdata, unsigned char right)
- {
- check_busy(right);
- if(right) RLCD_DAT_WR = dispdata;
- else LLCD_DAT_WR = dispdata;
- }
- /*数据清屏*/
- void lcd_clr(void)
- {
- unsigned char i,j;
- for(i=0;i<8;i++)//共8 页
- {
- lcd_cmd_wr(SETY+i,0);
- lcd_cmd_wr(SETX,0);
- lcd_cmd_wr(SETY+i,1);
- lcd_cmd_wr(SETX,1);
- for(j=0;j<64;j++)//每页64 列
- {
- lcd_data_wr(0,0);
- lcd_data_wr(0,1);
- }
- }
- }
- /*写一贞128×64 点的图片显示*/
- void lcd_bmp_wr(unsigned char *bmp)
- {
- unsigned char i,j;
- for(i=0;i<8;i++)
- {
- //页地址设定
- lcd_cmd_wr(SETY+i,0);
- lcd_cmd_wr(SETX,0);
- lcd_cmd_wr(SETY+i,1);
- lcd_cmd_wr(SETX,1);
- for(j=0;j<64;j++)
- {
- lcd_data_wr(bmp[128*i+j],0);//左半屏
- lcd_data_wr(bmp[128*i+j+64],1);//右半屏
- }
- }
- }
- /*整屏向上循环移动*/
- void lcd_mov_up()
- {
- unsigned char i;
- for(i=0;i<64;i++)//64 行循环
- {
- lcd_cmd_wr(FIRSTROW+i,0);
- lcd_cmd_wr(FIRSTROW+i,1);
- delay(500);//适当延时
- }
- }
- /*通用延时函数*/
- void delay(unsigned char timer)
- {
- unsigned char i;
- while(--timer)
- for(i=0;i<100;i++);
- }
复制代码
|