起因:前不久跟着公司领导去给车上换装ETC,在装ETC的场地捡了一个别人扔下的ETC整体,还是带屏幕的,顺手捡了回来,准备驱动点亮他。
目的:准备先用89C52点亮试试,后续再添加/改造成其他用途的工具
材料:STC89C52RC主板、ETC屏幕、洞洞板、线若干、人
材料都有了,接着便是着手开始制作了,话不多说,走曲
虚҉伪҉ 原创
- 捡回来先拆外壳
2.屏幕参数
LCD屏幕大小为48mm15mm,加上白色外壳有50mm23mm
确定屏幕型号为:HEM12832-19B3 1604
找了很久,终于找到这么一张有关的图片:
PDF文件通过蓝奏云分享:HEM12832-19B5-C-02.pdf - 蓝奏云
查看规格得知 Vop=6.5V,Vdd=3.3 ~ 0.2V。
驱动IC是ST7567
图片中有和我们屏幕一样的引脚编号,查看fpc pin def就行
将每个引脚做好标记之后,拿出我们的单片机
我用的是这款单片机,将二者全部置放于洞洞板上,并使用线将单片机与屏幕引脚相连接
这里我接了三个按钮开关,你可以加也可以不加
很好,估计看到这儿你已经懵了,不要着急,你只需要按照我给出的连接方式连接即可
ETC屏幕 | stc89c52rc | ||
1 | CS1 | P12 | |
2 | RES | P13 | |
3 | AO | P14 | |
4 | SCK | P10 | |
5 | SDA | P11 | |
6 | VDD | 按钮 | 5V |
7 | VSS | GND | |
8 | VG | —||— | GND |
加了个按钮 这里的电容为1uf | |||
9 | A | 按钮 | 5V |
10 | K | GND |
根据规格图中得知屏幕的驱动IC是ST7567,那我们直接百度download一个ST7567的示例程序,下载好之后,通过左上角的file→open→选择刚才下载的文件,导入进我们的keil5软件
双击main.c打开程序
再经过短暂的程序调试,我们得到了一个不多不少的显示小车的程序:
本人程序通过蓝奏云分享:12832.rar - 蓝奏云
或者可以通过下方复制:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit cs=P1^2; //CS
sbit sda=P1^1; //SDA
sbit sclk=P1^0; //SCLK
sbit rst=P1^3; //RST
sbit rs=P1^4; //RS »ò AO
unsigned char code hz0[128]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0x78,0x08,0x00,0x00,0x00,0x00,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0xE0,0xF0,0x70,0x60,0x00,0x00,0x00,
0x00,0x02,0x02,0x02,0x02,0xE2,0xFF,0xFF,0x0F,0x02,0x02,0xF2,0xFF,0xFF,0x06,0x00,
0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFE,0x03,0x01,0x00,0x00,0x80,0x80,0x00,0x00,
0x00,0x00,0x00,0x20,0x3C,0x3F,0x67,0x40,0xC0,0xE0,0xFE,0xFF,0x8F,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
0x00,0x40,0x40,0x60,0x30,0x18,0x0C,0x0E,0x07,0x03,0x01,0x03,0x07,0x0F,0x0E,0x00,
0x10,0x10,0x30,0x30,0x70,0x7F,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"ºÃ",0*/
};
unsigned char code hz1[128]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0x78,0x08,0x00,0x00,0x00,0x00,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0xE0,0xF0,0x70,0x60,0x00,0x00,0x00,
0x00,0x02,0x02,0x02,0x02,0xE2,0xFF,0xFF,0x0F,0x02,0x02,0xF2,0xFF,0xFF,0x06,0x00,
0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFE,0x03,0x01,0x00,0x00,0x80,0x80,0x00,0x00,
0x00,0x00,0x00,0x20,0x3C,0x3F,0x67,0x40,0xC0,0xE0,0xFE,0xFF,0x8F,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
0x00,0x40,0x40,0x60,0x30,0x18,0x0C,0x0E,0x07,0x03,0x01,0x03,0x07,0x0F,0x0E,0x00,
0x10,0x10,0x30,0x30,0x70,0x7F,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"ºÃ",1*/
};
unsigned char code hz2[128]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x78,0xF0,0xE0,0xC0,0x00,0x04,0x3C,0xF8,
0xF0,0xE0,0x00,0x00,0x00,0xC0,0xF0,0x7C,0x3C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x60,0x7C,0x7C,0x3C,0x84,0x84,0x85,0x85,0x85,0x84,0x84,0x84,0x85,
0x85,0x84,0x84,0x84,0x87,0xC7,0xC5,0xC4,0x84,0x24,0x34,0x1E,0x1E,0x0E,0x04,0x00,
0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFC,
0xFC,0xFC,0x24,0x26,0x23,0x21,0x21,0x20,0x20,0x20,0x30,0x38,0x38,0x30,0x20,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x30,0x70,0x7F,
0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"ѧ",2*/
};
unsigned char code hz3[128]={
0x00,0x00,0x00,0x00,0x20,0x60,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xE0,0xF0,0xF0,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x06,0x0C,0x1C,0x78,0x78,
0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xC0,0xC0,0xC0,0xE0,0x60,0x30,0x30,0x10,0x18,
0x08,0x0C,0x04,0x06,0x02,0x02,0x02,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x04,0x0C,0x08,0x08,0x18,0x38,0x38,0x3F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,/*"Ï°",3*/
};
unsigned char code bmp[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x80,0x80,0x80,0x80,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,0xE8,0xB0,0x90,0x88,0x8C,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x80,0x80,0xC0,0xC0,0x40,0x40,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
0x60,0x60,0x70,0x70,0xF0,0xB8,0x98,0xB8,0x3C,0x3C,0xB4,0x36,0x36,0x3E,0x27,0x27,
0x23,0x23,0x23,0x23,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x2E,0x20,0x20,0x21,0x21,0x21,
0x21,0x21,0x21,0x23,0x22,0x2B,0x27,0x25,0xA5,0xAF,0xAB,0xEB,0x7A,0x76,0x46,0x26,
0x0C,0x0C,0x1C,0x18,0x78,0x78,0x70,0x70,0x70,0x60,0xE0,0x40,0xC0,0x80,0x80,0x80,
0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x78,0xF8,0xC8,0x8C,0x06,0x07,0x07,
0x05,0x13,0xE3,0xF1,0xF8,0xFC,0x1C,0xEE,0x1E,0x1E,0x0E,0x0E,0xCE,0xEE,0xCE,0x2E,
0x5E,0x1E,0xBE,0xEC,0x3C,0xFC,0xF8,0xF5,0xC9,0x03,0x02,0x0C,0xB8,0xF0,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0xF0,0xB8,0x8C,0x06,0x03,0x81,0xE1,0xF8,0xF8,0xFC,0xDC,0xFE,0x1E,0x1E,
0x0E,0x4E,0xEE,0xEE,0x4E,0x0E,0x1E,0x1E,0xFE,0xDC,0xFD,0xF9,0xFB,0xE3,0x87,0x87,
0x87,0x83,0xC6,0xC4,0x7C,0x38,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x05,0x05,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x03,0x07,0x07,0x0E,0x0F,0x0F,0x0E,0x1E,0x1E,0x1E,0x1E,0x0E,
0x0E,0x0F,0x0F,0x0E,0x07,0x07,0x03,0x01,0x03,0x03,0x03,0x03,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x03,0x07,0x07,0x0F,0x0D,0x0E,
0x0E,0x1E,0x1E,0x1E,0x1E,0x0E,0x0E,0x0D,0x0F,0x07,0x07,0x03,0x03,0x01,0x01,0x01,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
} ;
void delay(int m) //ÑÓʱԼ0.5ms
{
unsigned char h,l;
for(l=0;l<=m;l++)
for(h=249;h>0;h--);
}
//void write_byte(uchar byte) //д×Ö½Ú
//{
//}
//ÃüÁîдÈ뺯Êý
void write_com(uchar com)
{
int i,j;
j = 0x80;
cs = 0;
rs = 0;
for(i=0;i<8;i++)
{
sclk = 0;
if(com&j)
sda = 1;
else
sda = 0;
sclk = 1;
j=j>>1;
}
}
//Êý¾ÝдÈ뺯Êý
void write_data(uchar data1) //дÊý¾Ý
{
int i,j;
j = 0x80;
cs = 0;
rs = 1;
for(i=0;i<8;i++)
{
sclk = 0;
if(data1&j)
sda = 1;
else
sda = 0;
sclk = 1;
j=j>>1;
}
}
void led_set_pos(uchar x, uchar y)
{
write_com(0xb0|y); //Ò³µØÖ·0£¬12832×ܹ²4Ò³£¨0~3£©
write_com(((x&0xf0)>>4)|0x10); //ÁеØÖ·¸ß4λ0x1£¿
write_com((x&0x0f)|0x01); //ÁеØÖ·µÍ4λ0x0£¿
}
void led_clear(uchar dispdata)
{
uchar x,y;
for(y=0;y<4;y++)
{
write_com(0xb0|y);
write_com(0x01);
write_com(0x10);
for(x=0;x<128;x++)
write_data(dispdata);
}
}
void led_init()
{
rst=0; //µÍµçƽ¸´Î»
delay(100);
rst=1; //¸´Î»Íê±Ï
delay(100);
write_com(0xe2); //Èí¸´Î»
delay(5);
write_com(0xae); //¿ªÏÔʾ
write_com(0x2f); //Éýѹ
delay(5);
write_com(0x21); //´Öµ÷¶Ô±È¶È£¬¿ÉÉèÖ÷¶Î§0x20¡«0x27 23
write_com(0x81); //΢µ÷¶Ô±È¶È
write_com(0x20); //΢µ÷¶Ô±È¶ÈµÄÖµ£¬¿ÉÉèÖ÷¶Î§0x00¡«0x3f 20
write_com(0xa2); //1/9 ƫѹ±È£¨bias£©
write_com(0xc8); //ÐÐɨÃè˳Ðò£º´ÓÉϵ½ÏÂ
write_com(0xa0); //ÁÐɨÃè˳Ðò£º´Ó×óµ½ÓÒ
write_com(0x40); //ÆðʼÐУºµÚÒ»ÐпªÊ¼
write_com(0xaf); //¿ªÏÔʾ
led_clear(0x00);
}
//ÏÔʾ32*32ºº×Ö£¬xÈ¡Öµ0,32,64,96 yÖ»ÄÜÈ¡Öµ0
void led_show32hz(uchar x,uchar y,uchar *hz)
{
uchar i,j;
for(i=0;i<4;i++)
{
led_set_pos(x,y+i);
for (j=0;j<32;j++)
{
write_data(*hz);
hz++;
}
}
}
//»Í¼
void led_draw(uchar x,uchar y,uchar *bmp)
{
int i,j;
for(i=0;i<4;i++)
{
led_set_pos(x,y+i);
for(j=0;j<128;j++)
{
write_data(*bmp);
bmp++;
}
}
}
void main()
{
led_init();
//led_show32hz(0,0,hz0);
//led_show32hz(32,0,hz1);
//led_show32hz(64,0,hz2);
//led_show32hz(96,0,hz3);
//delay(2000);
led_draw(0,0,bmp);
while(1);
//delay(2000);
}
接下来需要上传我们的程序到单片机上
点击这里的小锤子:
在弹出来的框中,点击Output
勾选"生成HEX文件"
再点击ok关闭
再点击这两个按钮(先点击框中的按钮,再点击框右侧的按钮)编译程序:
紧接着,控制台会输出以下内容
0 ERROR即可,Warning不用管
上传程序时,需要通过stc-isp软件上传,这里就不过多赘述了。。。
打开我们的stc-isp软件
1.选择我们的单片机,我的是STC89C52RC
2.选择你的端口号,
3.默认我们的波特率为115200
假若你不知道你的端口号是多少,可以打开设备管理器查看端口这一栏
我的是
当这些选择好后,还需要选择刚才生成的HEX文件
点击“打开程序文件”
在弹出的框中选择你自己的HEX文件,
以我的为例,在“桌面→12832→Objects→12832.hex”,
选中后点击打开
再次点击下载/编程
点击后,右侧控制台输出“正在检测目标单片机 ...”
我的单片机需要将电源开关关闭再打开便可以上传了
操作成功!!!
最后,在看我们的成品前,我讲过,我又加了三个按钮,分别控制LCD屏幕的总电源,LCD的背光电源,以及一个暗色背景开关:
作者:Huski( 虚҉伪҉ )
转载请注明出处