生活所迫,衣食都没有保障,很久没有折腾单片机了,很多东西忘得差不多了.
近来逛下数坛的我爱单片机,看到有坛友在坛子里发帖:
http://bbs.mydigit.cn/read.php?tid=1737475驱动了建行U盾小型的12864LCD屏,想到很久以前在地摊上2元一个入手了一个这样的U盾,于是拿出来折腾一番.拆了U盾主控和存贮芯片,连上6条线,在单片机上驱动成功,想着做个什么好玩的,原来做个电压电流表,但手上己有了好几个USB电压电流表,用不上.想来想去来是做个带遥控显温度的小小时钟,可能实用一点.也比较熟手.其它的想不到能做些什么好玩的.于是翻出以前做点阵时钟的驱动板,带18B20和红外接收头,改下程序就正常了.
为了小型化,因为焊工很好,我不敢只拆屏下来,我割去U盾的USB口,截短按那板子,得了小型化,加个1K电阻直接接通背光,装入以前买的1元POS机盒子里,用一手机电池供电.3-4.2V工作正常 .
这个LCD屏是ST7567主控串口的,和其它的主控串口屏驱动差不多,只是初始化代码不一样.我拿原来的US1601S主控的12864屏的驱动,改下初始化代码就成功驱动.,单片机用以前买的STC15W408AS,28脚,8KROM,事实上用STC15系列的都可以,如果用STC别的,可以小改下就能用.
单片机与LCD屏联接,可以在程序"ST7567Drv_12864.c"中任意改动IO口.
//sbit CS0 = P2^2; //我的屏不用片选脚.直接接地,不引出
sbit CD = P1^5;
sbit LCD_RST = P1^6;
sbit SDA = P1^7;
sbit SCK = P5^4;
DS1302与单片机接法,可以在源程序中改下sbit SCLK= P2^6; //DS1302时钟口
sbit IO = P2^7; //DS1302数据口sbit RST = P1^0; //DS1302片选口
按住KEYS键约3秒钟,就进入红外键学习,拿任一个NEC格式红外遥控器对着接收头按,就能学习和显红外码(机码和键码同时显示)到KEYS键1,见图,再短按KEYS,再学入KEYA到键2,再短按KEYS,再学入KEYD到键3,之后就可以用遥控器设置时间日期了.顺便在显温度的那地方显红外码,从而可以当个红外测码器使用,算是有点实用功能. 按键与单片机接法,在源程序中可根据实际硬件连接任意改动.
sbit KEYS=P3^2; //调整键,按一次设置状态位加1,轮流切换到设置或转换显示状态等.sbit KEYA=P3^3; //加一键,在设置状态时按一次相应设置位加1
sbit KEYD=P3^4; //减一键,在设置状态时按一次相应设置位减1
DS18B20的数据口位P5.5,实际上可在"DS18B20.h"头文件中改成任何IO接口,我是图方便连接接在P5.5口sbit DQ = P5^5;
红外线接口接P2^5,(实际上可在"IR_NEC.H"头文件中改成任何IO接口任意引脚) sbit IR = P2^5;
下载程序时,要选单片机工作主频24M,要是别的频率,请在IR_NEC.H文件中改以下: //【用户必填项:USER_H、USER_L、Check_EN、CPU_Fosc、IR】
#define USER_H 0x80 //用户码高8位#define USER_L 0x7F //用户码低8位
#define Check_EN0 //是否要校验16位用户码:不校验填0,校验则填1
#define CPU_Fosc24013000//输入主频,自适应解码(单位:Hz,范围:6MHz ~ 40MHz),我的是24M,实际是24.013M.
#define CA_S 8 //长按时间设置,单位:108mS(即 108mS整数倍,10倍以上为宜)
经过上面就可以正常工作了,原来想把电池电压显示上,奈何只有8KROM,加上显电压怎样压缩都超过8K代码了.只好作罢.正常工作,装入POS盒子,好看了不少.测工作电流18ma,一个1000mah电池可以工作50小时以上.也算利用了这个U盾LCD屏.