大家好,這是我最近做的仿真,附件里包含有程序代碼,proteus仿真,原理圖,還有報告
0.png (18.31 KB, 下載次數: 60)
下載附件
2016-6-23 23:58 上傳
- #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++);
- }
復制代碼
|