- //----0---6格信號強度指示----
- #include <reg52.h>
- #include "stdio.h"
- #define u8 unsigned char
- #define u16 unsigned int
- #define DATA P2
- sbit RS=P0^5;
- sbit RW=P0^6;
- sbit EN=P0^7;
- u8 code font[8]={0x04,0x0e,0x15,0x04,0x04,0x04,0x04,0x00};
- u8 code sign_font[7][8]={{0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x00},
- {0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x00},
- {0x00,0x00,0x00,0x08,0x18,0x18,0x18,0x00},
- {0x00,0x00,0x04,0x0c,0x1c,0x1c,0x1c,0x00},
- {0x00,0x02,0x06,0x0e,0x1e,0x1e,0x1e,0x00},
- {0x01,0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f},
- };
- u8 code clear_font[8]={0};
- bit f_busy;
- void delay(u16 x)
- {
- while(x--);
- }
- void busy()
- {
- u8 st;
- if(f_busy!=1)
- {
- return;
- }
- else
- {
- EN=0;
- RW=1;
- RS=0;
- DATA=0xff;
- do
- {
- EN=0;
- EN=1;
- delay(10);
- st=DATA;
- }while(st&0x80);
- EN=0;
- delay(10);
- }
- }
- void write_ddram(u8 add)
- {
- busy();
- EN=0;
- RW=0;
- RS=0;
- DATA=add|0x80;
- EN=1;
- delay(10);
- EN=0;
- delay(10);
- }
- void write_dat(u8 dat)
- {
- busy();
- EN=0;
- RW=0;
- RS=1;
- DATA=dat;
- EN=1;
- delay(10);
- EN=0;
- delay(10);
- }
- void write_cmd(u8 cmd)
- {
- busy();
- EN=0;
- RW=0;
- RS=0;
- DATA=cmd;
- EN=1;
- delay(10);
- EN=0;
- delay(10);
- }
- void show_string(u8 add,u8 *p)
- {
- write_ddram(add);
- while(*p)
- {
- write_dat(*p);
- p++;
- }
- }
- void show_char(u8 add,u8 n)
- {
- write_ddram(add);
- write_dat(n);
- }
- void set_cgram(u8 add) //設置cgram地址
- {
- busy();
- EN=0;
- RW=0;
- RS=0;
- DATA=add|0x40; //設置地址時候用
- EN=1;
- delay(10);
- EN=0;
- delay(10);
- }
- void set_code_cgram(u8 *font, u8 add)
- {
- u8 i;
- set_cgram(add*8); //一個字符8行
- for(i=0;i<8;i++)
- {
- write_dat(font[i]);
- }
- }
- void show_strength(u8 add,u8 x)
- {
- if(x<2)
- {
- set_code_cgram(clear_font,6);
- show_char(add+1,6);
- set_code_cgram(sign_font[x],x);
- show_char(add,x);
- }
- else
- {
- set_code_cgram(sign_font[1],1);
- show_char(add,1);
- set_code_cgram(sign_font[x],x);
- show_char(add+1,x);
- }
- if(x>6)x=0;
- }
- void LCD_init() //------------
- {
- f_busy=0;
- delay(15000);
- write_cmd(0x38);
- delay(5000);
- write_cmd(0x38);
- delay(5000);
- write_cmd(0x38);
- f_busy=1;
- write_cmd(0x38);
- write_cmd(0x08);
- write_cmd(0x01);
- write_cmd(0x06);
- write_cmd(0x0f);
- }
- void main()
- {
- u8 i;
- LCD_init();
- show_string(0," Sign test!!!");
- show_string(40," Strength: ");
- while(1)
- {
- for(i=0;i<6;i++)
- {
- delay(60000);
- show_strength(50,i);
- }
- }
- }
復制代碼


|