|
楼主 |
发表于 2016-3-8 12:32:46
|
显示全部楼层
本帖最后由 maxims 于 2016-3-8 12:34 编辑
后来又找到了一个库,能驱动显示图标了,但是感觉还有问题,比如天线只显示一部分(跳空一格显示)
代码如下: - #include <tinySPI.h>
- int dc = 0;
- int rst = 3;
- int SS = 4;
- #define NOP 0x00
- #define Function_Set 0x20
- #define Display_Control 0x08
- #define Set_Y_Address 0x40
- #define Set_X_Address 0x80
- #define Set_V0 0x80
- #define Set_Test_Mode 0x30
- #define DIS_PHONEANT_0 0 //天线
- #define DIS_PHONEANT_1 4 //信号1 格
- #define DIS_PHONEANT_2 5 //信号2 格
- #define DIS_PHONEANT_3 7 //信号3 格
- #define DIS_PHONEANT_4 8 //信号4 格
- #define DIS_PHONEANT_5 10
- #define DIS_PHONE 20 //电话
- #define DIS_LOCK 30 //锁定
- #define DIS_Gr 40 //Gr 符号
- #define DIS_SMS 50 //短信符号
- #define DIS_SHAKE 60 //震动符号
- #define DIS_HOME 61 // 室内符号
- #define DIS_HOME_ANT 65 //室内天线符号
- #define DIS_HOME_ANT_1 67 //室内天线1 格
- #define DIS_HOME_ANT_2 68 //室内天线 2 格
- #define DIS_HOME_ANT_3 69 //室内天线 3 格
- #define DIS_MUTE 70 //静音符号
- #define DIS_ALAM 75 //闹钟符号
- #define DIS_CELL_0 80 //电池电量符号
- #define DIS_CELL_1 94 //电池电量 1格
- #define DIS_CELL_2 95 //电池电量2 格
- #define DIS_CELL_3 93 //电池电量 3 格
- #define DIS_ON 0xFF
- #define DIS_OFF 0x00
- const char write_chinese[][24] = {
- /*-- 文字: 两 --*/
- /*-- Trebuchet MS9; 此字体下对应的点阵为:宽x高=12x12 --*/
- /*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
- 0x01, 0xF9, 0x89, 0x7F, 0x49, 0x89, 0x7F, 0x49, 0x89, 0xF9, 0x01, 0x00,
- 0x00, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x04, 0x07, 0x00, 0x00,
- };
- void setup() {
- pinMode(rst, OUTPUT);//bl
- pinMode(dc, OUTPUT);//dc
- pinMode(SS, OUTPUT);//cs
- SPI.begin ();
- LCDInit();
- cls();
- putdraw(DIS_PHONEANT_0, DIS_ON);
- putdraw(DIS_PHONEANT_1, DIS_ON);
- putdraw(DIS_PHONEANT_2, DIS_ON);
- putdraw(DIS_PHONEANT_3, DIS_ON);
- putdraw(DIS_PHONEANT_4, DIS_ON);
- putdraw(DIS_CELL_0, DIS_ON);
- putdraw(DIS_CELL_1, DIS_ON);
- putdraw(DIS_CELL_2, DIS_ON);
- putdraw(DIS_CELL_3, DIS_ON);
- }
- void send_cmd(unsigned char cmd, unsigned char dat)
- {
- digitalWrite(SS, LOW);
- digitalWrite(dc, LOW);
- SPI.transfer(cmd | dat);
- digitalWrite(SS, HIGH);
- }
- void send_dat(unsigned char dat)
- {
- digitalWrite(SS, LOW);
- digitalWrite(dc, HIGH);
- SPI.transfer(dat);
- digitalWrite(SS, HIGH);
- }
- void LCDInit(void)
- {
- digitalWrite(rst, LOW);
- delay(10);
- digitalWrite(rst, HIGH);
- delay(10);
- send_cmd(Function_Set, 0x01);
- send_cmd(Set_V0, 0x30);
- send_cmd(Set_Test_Mode, 0x02);
- send_cmd(Function_Set, 0x00);
- send_cmd(Display_Control, 0x04);//显示模式控制:0x04正常模式,0x05镜像模式
- cls();
- }
- void LCD_set_XY(unsigned char x, unsigned char y)
- {
- send_cmd(Set_X_Address, x);
- send_cmd(Set_Y_Address, y);
- }
- void cls(void)
- {
- int i;
- send_cmd(Set_X_Address, 0);
- send_cmd(Set_Y_Address, 0);
- for (i = 0; i < 960; i++)
- send_dat(0x00);
- send_cmd(Set_X_Address, 0);
- send_cmd(Set_Y_Address, 0);
- }
- void LCD_write_chinese_string(unsigned char X, unsigned char Y,
- unsigned char ch_with, unsigned char num,
- unsigned char line, unsigned char row)
- {
- unsigned char i, n;
- LCD_set_XY(X, Y);
- for (i = 0; i < num;)//设置字符数
- {
- for (n = 0; n < ch_with * 2; n++)//设置字符宽度
- {
- if (n == ch_with)
- {
- if (i == 0) LCD_set_XY(X, Y - 1);
- else
- LCD_set_XY((X + (ch_with + row)*i), Y - 1);
- }
- send_dat(write_chinese[line + i][n]);
- }
- i++;
- LCD_set_XY((X + (ch_with + row)*i), Y);
- }
- }
- void putdraw(unsigned char x, unsigned char s )
- {
- unsigned char i;
- send_cmd(Set_X_Address, x);
- send_cmd(Set_Y_Address, 8);
- send_dat(s);
- }
- void loop() {
- // SHOW_BMP();
- //LCD_write_chinese_string(0, 7, 12, 7, 0, 0);
- }
复制代码
putdraw(DIS_PHONEANT_0, DIS_ON);
putdraw(DIS_PHONEANT_1, DIS_ON);
putdraw(DIS_PHONEANT_2, DIS_ON);
putdraw(DIS_PHONEANT_3, DIS_ON);
putdraw(DIS_PHONEANT_4, DIS_ON);
putdraw(DIS_CELL_0, DIS_ON);
putdraw(DIS_CELL_1, DIS_ON);
putdraw(DIS_CELL_2, DIS_ON);
putdraw(DIS_CELL_3, DIS_ON);
这几条就是显示图标的,分别是天线和电池,天线0是叉叉,1~4是信号格,结果就是0/2/4显示,1/3是空的。电池图标完全不见了。
该代码在Atmega328@5v@16Mhz板子上完全没问题。 |
|