本帖最后由 1850638586 于 2019-10-16 09:32 編輯
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- unsigned char table1[]={0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f,
- 0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
- 0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
- 0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E,
- 0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00,
- 0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01,
- 0x1f,0x1f,0x1f,0x1f,0x1f,0x1c,0x18,0x00,
- 0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00};//心圖案
- #define CLEARSCREEN LCD_write_command(0x01)
- /**************定義接口************************/
- #define LCDIO P2
- sbit LCD1602_RS=P0^7;
- sbit LCD1602_RW=P0^6;
- sbit LCD1602_E=P0^5;
- /**************定義函數************************/
- void LCD_write_command(unsigned char command);//寫入指令函數
- void LCD_write_dat(unsigned char dat);//寫入數據函數
- void LCD_set_xy( unsigned char x, unsigned char y );//設置顯示位置函數
- void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat);//顯示一個字符函數
- void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s);//顯示字符串函數
- void LCD_init(void);//初始化函數
- void delay_nms(unsigned int n);//延時函數
- /********************************************/
- /************初始化函數****************/
- void LCD_init(void)
- {
- CLEARSCREEN;//clear screen
- LCD_write_command(0x38);//set 8 bit data transmission mode
- LCD_write_command(0x0c);//open display (enable lcd display)
- LCD_write_command(0x80);//set lcd first display address
- CLEARSCREEN;//clear screen
- }
- /****************************************************/
- /**************寫指令函數********************************/
- void LCD_write_command(unsigned char command)
- {
- LCDIO=command;
- LCD1602_RS=0;
- LCD1602_RW=0;
- LCD1602_E=0;
- LCD1602_E=1;
- delay_nms(10);
- }
- /***************************************************/
- /****************寫數據函數************************/
- void LCD_write_dat(unsigned char dat)
- {
- LCDIO=dat;
- LCD1602_RS=1;
- LCD1602_RW=0;
- LCD1602_E=0;
- delay_nms(1);
- LCD1602_E=1;
- }
- /****************************************************/
- /***************設置顯示位置**************************/
- void LCD_set_xy( unsigned char x, unsigned char y )
- {
- unsigned char address;
- if (y == 1)
- address = 0x80 + x;
- else
- address =0xc0+ x;
- LCD_write_command(address);
- }
- /***************************************************/
- /****************顯示一個字符**********************/
- void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat)
- {
- LCD_set_xy( x, y );
- LCD_write_dat(dat);
- }
- /**********************************************/
- /***************顯示字符串函數***************/
- void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s)
- {
- LCD_set_xy( X, Y );
- while (*s)
- {
- LCD_write_dat(*s);
- s ++;
- }
- }
- /***********************************************/
- /********** 延時**********************/
- void delay_nms(unsigned int n)
- {
- unsigned int i=0,j=0;
- for (i=n;i>0;i--)
- for (j=0;j<10;j++);
- }
- /**************************************/
- /***********主函數**************/
- void main(void)
- {
- unsigned char i,j,k,tmp;
- LCD_init();
- delay_nms(100);
- tmp=0x40;//設置CGRAM地址的格式字
- k=0;
- for(j=0;j<8;j++)
- {
- for(i=0;i<8;i++)
- {
- LCD_write_command(tmp+i); // 設置自定義字符的 CGRAM 地址
- delay_nms(2);
- LCD_write_dat(table1[k]); // 向CGRAM寫入自定義字符表的數據
- k++;
- delay_nms(2);
- }
- tmp=tmp+8;
- }
- LCD_dsp_string(1,1,"heart");//在第一行第一列顯示“heart”
- for (i=0;i<4;i++)
- {
- LCD_dsp_char( 10+i,1,i);//在第一行第10列位置顯示心圖案的上半部
- delay_nms(1);
- }
- for (i=4;i<8;i++)
- {
- LCD_dsp_char( 10+i-4,2,i);//在第二行第10列位置顯示心圖案的下半部
- delay_nms(1);
- }
- while (1);
- }
復制代碼
|