切换到宽版
  • 4497阅读
  • 12回复

我也来折腾建行U盾,附三平台驱动程序 [复制链接]

上一主题 下一主题
离线sxlwh
 

发帖
18
M币
-443
专家
0
粉丝
5
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2016-07-12
教大家如何点亮建行网银盾的液晶屏(附代码指令) 看到了驱动19264液晶,于是我也来试试,我驱动的U盾是这两种
这种U盾液晶是12864的,线序如下

最后驱动效果如图所示



我完成了在 51 MSP430 及STM32 的驱动程序的编写,现共享代码,顺便提一句,
U盾上的FLASH也被我做成了字库,用来显示汉字,具体过程略微麻烦,便不再赘述

下边是 51 的驱动代码 及所有代码打包的附件

  1. #include "12864.h"
  2. void Send_Cmd_To_Lcd12864(char cmd) //发送命令到Lcd
  3. {
  4.   char i=0;
  5.   Lcd12864_AO(0);
  6.   for(i=0;i<8;i++)                 //从高位到地位依次发送数据
  7.   {
  8.     Lcd12864_CLK(0);
  9.     if( cmd&0x80) {Lcd12864_DIO(1);}
  10.     else          {Lcd12864_DIO(0);}  
  11.     cmd <<= 1;
  12.     Lcd12864_CLK(1);
  13.   }
  14. }
  15. void Send_Data_To_Lcd12864(char dat) //发送数据到Lcd
  16. {
  17.   char i=0;
  18.   Lcd12864_AO(1);
  19.   for(i=0;i<8;i++)                   //从高位到地位依次发送数据
  20.   {
  21.     Lcd12864_CLK(0);
  22.     if( dat&0x80) {Lcd12864_DIO(1);}
  23.     else           {Lcd12864_DIO(0);}
  24.     dat <<= 1;
  25.     Lcd12864_CLK(1);
  26.   }
  27. }
  28. void Lcd12864_Init(void)
  29. {
  30.     #ifdef Lcd12864_CS_Pin
  31.         Lcd12864_CS(0);
  32.     #endif
  33.     #ifdef Lcd12864_RES_Pin
  34.         Lcd12864_RES(1);
  35.     #endif
  36.     Send_Cmd_To_Lcd12864(0xE2); //软件复位
  37.   Send_Cmd_To_Lcd12864(0xA6); //0xA6:常规显示;0xA7:反色显示
  38.   Send_Cmd_To_Lcd12864(0xA3); //0xA3:偏压1/7;0xA2:偏压1/9
  39.   Send_Cmd_To_Lcd12864(0xA0); //0xA0:段方向正常;0xA1:段方向取反
  40.   Send_Cmd_To_Lcd12864(0xC8); //0xC0:普通扫描顺序;0xC8:反转扫描顺序
  41.   Send_Cmd_To_Lcd12864(0xA4); //0xA4:正常显示;0xA5:显示全开
  42.   
  43.   Send_Cmd_To_Lcd12864(0xF8);
  44.   Send_Cmd_To_Lcd12864(0x00); //升压倍数选择,默认即可
  45.   
  46.   Send_Cmd_To_Lcd12864(0x23); //调节电阻率,粗调对比度
  47.   
  48.   Send_Cmd_To_Lcd12864(0x81);
  49.   Send_Cmd_To_Lcd12864(0x5f); //内部电阻微调,微调对比度
  50.   
  51.   Send_Cmd_To_Lcd12864(0x2F); //打开内部升压,调压,跟随器电路
  52.   Send_Cmd_To_Lcd12864(0x40); //设置显示初始行
  53.   
  54.   Send_Cmd_To_Lcd12864(0xAF); //0xAE:关显示;0xAF:开显示
  55. }
  56. /********************************************
  57. 函数功能:跳转至液晶坐标(row,column)处
  58.        x:液晶第x行,数值范围1~8
  59.        y:液晶x行的第y个地址,数值范围1~128
  60. ********************************************/
  61. void Lcd12864_Jump_Place(unsigned char row,unsigned char column)
  62. {
  63.   char temp;
  64.   if(row>=1&&row<=8&&column>=1&&column<=128)
  65.   {
  66.     Send_Cmd_To_Lcd12864(0xB0+row-1);
  67.     temp = ((column-1)>>4)|0x10;
  68.     Send_Cmd_To_Lcd12864(temp);
  69.     temp = ((column-1)&0x0f);
  70.     Send_Cmd_To_Lcd12864(temp);
  71.   }
  72. }
  73. /********************************************
  74.     函数功能:以坐标(row,column)为起点显示width(宽)*height(高)的字模
  75.            x:液晶第x行,数值范围1~8
  76.            y:液晶x行的第y个地址,数值范围1~128
  77.        width: 图片宽度0<width<=128
  78.       height: 图片高度,为8的倍数,最大为8倍
  79. reverse_flag: 反白显示标志位,flag=0,常规显示;flag=1,反白显示
  80.          add:字符数据地址
  81. ********************************************/
  82. void Lcd12864_Print(unsigned char row,unsigned char column,unsigned char width,unsigned char height,char reverse_flag,char* add)
  83. {
  84.   unsigned char i=0,j=0,k=0;
  85.   char* temp = add;
  86.   k = height/8;
  87.   if(reverse_flag)
  88.   {
  89.     for(i=0;i<k;i++)
  90.     {
  91.       Lcd12864_Jump_Place(row+i,column);
  92.       for(j=0;j<width;j++)
  93.       {
  94.         Send_Data_To_Lcd12864(~(*temp++));
  95.       }
  96.     }
  97.   }
  98.   else
  99.   {
  100.     for(i=0;i<k;i++)
  101.     {
  102.       Lcd12864_Jump_Place(row+i,column);
  103.       for(j=0;j<width;j++)
  104.       {
  105.         Send_Data_To_Lcd12864(*temp++);
  106.       }
  107.     }
  108.   }
  109. }
  110. /********************************************
  111. 函数功能:液晶清屏
  112. ********************************************/
  113. void Lcd12864_Clear(void)
  114. {
  115.   unsigned char i=0,j=0;
  116.   for(i=0;i<8;i++)
  117.   {
  118.     Lcd12864_Jump_Place(i+1,1);
  119.     for(j=0;j<128;j++)
  120.     {
  121.       Send_Data_To_Lcd12864(0x00);
  122.     }
  123.   }
  124. }




  1. #ifndef __12864_H__
  2. #define __12864_H__
  3. #include <reg52.h>
  4. #ifndef BIT0
  5. #define BIT0 0x01
  6. #endif
  7. #ifndef BIT1
  8. #define BIT1 0x02
  9. #endif
  10. #ifndef BIT2
  11. #define BIT2 0x04
  12. #endif
  13. #ifndef BIT3
  14. #define BIT3 0x08
  15. #endif
  16. #ifndef BIT4
  17. #define BIT4 0x10
  18. #endif
  19. #ifndef BIT5
  20. #define BIT5 0x20
  21. #endif
  22. #ifndef BIT6
  23. #define BIT6 0x40
  24. #endif
  25. #ifndef BIT7
  26. #define BIT7 0x80
  27. #endif
  28. /**********************重定义寄存器***********************/
  29. #define Lcd12864_Control_Port     P1
  30. /************************定义结束************************/
  31. /***********************端口定义*************************/
  32. #define Lcd12864_CS_Pin           BIT0
  33. //#define Lcd12864_RES_Pin          BIT4
  34. #define Lcd12864_AO_Pin           BIT1
  35. #define Lcd12864_CLK_Pin          BIT2
  36. #define Lcd12864_DIO_Pin          BIT3
  37. /************************定义结束************************/
  38. /********************定义IO端口赋值宏定义*****************/
  39. #ifdef Lcd12864_CS_Pin
  40. #define Lcd12864_CS(a)    if(a)    \
  41.                                                     Lcd12864_Control_Port |= Lcd12864_CS_Pin;    \
  42.                                                 else    \
  43.                                                     Lcd12864_Control_Port &= ~Lcd12864_CS_Pin;
  44. #endif
  45. #ifdef Lcd12864_RES_Pin
  46. #define Lcd12864_RES(a)    if(a)    \
  47.                                                     Lcd12864_Control_Port |= Lcd12864_RES_Pin;    \
  48.                                                 else    \
  49.                                                     Lcd12864_Control_Port &= ~Lcd12864_RES_Pin;
  50. #endif
  51. #define Lcd12864_AO(a)    if(a)    \
  52.                                                     Lcd12864_Control_Port |= Lcd12864_AO_Pin;    \
  53.                                                 else    \
  54.                                                     Lcd12864_Control_Port &= ~Lcd12864_AO_Pin;
  55. #define Lcd12864_CLK(a)    if(a)    \
  56.                                                     Lcd12864_Control_Port |= Lcd12864_CLK_Pin;    \
  57.                                                 else    \
  58.                                                     Lcd12864_Control_Port &= ~Lcd12864_CLK_Pin;
  59. #define Lcd12864_DIO(a)    if(a)    \
  60.                                                     Lcd12864_Control_Port |= Lcd12864_DIO_Pin;    \
  61.                                                 else    \
  62.                                                     Lcd12864_Control_Port &= ~Lcd12864_DIO_Pin;
  63. /******************************定义结束*******************************/    
  64. void Send_Cmd_To_Lcd12864(char cmd);   //发送命令到Lcd12864
  65. void Send_Data_To_Lcd12864(char dat); //发送数据到Lcd12864
  66. void Lcd12864_Init(void);              //液晶初始化
  67. void Lcd12864_Jump_Place(unsigned char row,unsigned char column);
  68. void Lcd12864_Print(unsigned char row,unsigned char column,
  69.                     unsigned char width,unsigned char height,
  70.                     char reverse_flag,char* add);
  71. void Lcd12864_Clear(void);
  72.                                                 
  73. #endif






百度云下载链接http://pan.baidu.com/share/link?shareid=3038866867&uk=204610742
[ 此帖被sxlwh在2016-07-13 18:34重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共5条打赏M币+20
离线信徒1102

发帖
231
M币
5267
专家
5
粉丝
37
只看该作者 1楼 发表于: 2016-07-12
顶一下    不知道能不能共享网盘一份呢    有的坛友m币没有多少不能下载。麻烦了
离线sxlwh

发帖
18
M币
-443
专家
0
粉丝
5
只看该作者 2楼 发表于: 2016-07-13
回 信徒1102 的帖子
信徒1102:顶一下    不知道能不能共享网盘一份呢    有的坛友m币没有多少不能下载。麻烦了 (2016-07-12 18:56) 回 信徒1102 的帖子

已发百度云共享链接
离线jpdd521

发帖
25680
M币
8582
专家
15
粉丝
339
只看该作者 3楼 发表于: 2016-07-13
有用,好评,正好需要STM32点U盾。
离线kuodie
发帖
3
M币
-497
专家
0
粉丝
0
只看该作者 4楼 发表于: 2017-01-29
看到三平台内心一阵狂喜!却发现没有arduino的代码。。。
离线disassembly

发帖
84
M币
861
专家
0
粉丝
6
只看该作者 5楼 发表于: 2017-03-07
看我的贴子,已经在arduino上成功驱动
离线funinuk

发帖
190
M币
1025
专家
0
粉丝
3
只看该作者 6楼 发表于: 2017-11-28
非常好, 感谢楼主的共享精神!
离线桃源客

发帖
3415
M币
1250
专家
18
粉丝
223
只看该作者 7楼 发表于: 02-05
改天也改一个玩玩.比19264的少了一些像素.
离线hewayking

发帖
635
M币
533
专家
1
粉丝
5
只看该作者 8楼 发表于: 02-06
大师 百度链接失效
离线greatfun2006

发帖
40
M币
14
专家
0
粉丝
1
只看该作者 9楼 发表于: 03-12
太强了,不过U盾还在用,能不能去银行申请更换U盾一个呢?