【求助】Attiny85 驱动SPI TFT 9664液晶
本帖最后由 maxims 于 2016-3-8 12:30 编辑我想用Attiny85 驱动SPI TFT 9664液晶
但是,这个该死的ATTINY85的SPI是USI接口,不是UNO系列的SPI。
网络找遍了,资料很少很少。。。有用过的兄弟,请不吝赐教,谢谢。
PS:找到了这个库,编译能通过,但是我点spi的lcd没成功
PSS:然后又找到这个库,能显示了,但是显示的东西不正确。感觉丢数据了。
:(78个人当中,就没一个对这个问题有看法的吗? 没怎么用过tiny85,看了官方的手册,的确是USI,应该和SPI有通用的地方,不然也没办法烧写bootloader了吧
没用过 Attiny85,不清楚。不知道有没类似库文件可以使用。。。 xinhoujue 发表于 2016-3-6 09:41 static/image/common/back.gif
没用过 Attiny85,不清楚。不知道有没类似库文件可以使用。。。
1楼已上传了usi的驱动lib,能否帮忙测试一下? maxims 发表于 2016-3-7 19:37 static/image/common/back.gif
1楼已上传了usi的驱动lib,能否帮忙测试一下?
我没有【Attiny85 驱动SPI TFT 9664液晶】啊,没法帮你了~~~~~~ maxims 发表于 2016-3-7 19:37 static/image/common/back.gif
1楼已上传了usi的驱动lib,能否帮忙测试一下?
什么样的屏幕,我这边可测试的spi的模块没有,但是我有tiny85. 164335413 发表于 2016-3-7 22:40 static/image/common/back.gif
什么样的屏幕,我这边可测试的spi的模块没有,但是我有tiny85.
试试读Tf? 本帖最后由 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[] = {
/*--文字:两--*/
/*--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);
}
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板子上完全没问题。
页:
[1]