查看: 3987|回复: 13

[其他] QC12864B液晶显示屏学习笔记_4

[复制链接]
  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7123
    最后登录
    2023-4-20
    发表于 2016-1-24 14:04:17 | 显示全部楼层 |阅读模式
    经多次测试,在YL-KL26Z 开发板上要实现QC12864B的显示功能,可采用串行模式来实现,方法是将VDDVoCSLEDA连在一起接+5V电源,将VSSPSBLEDK连在一起接GND,将SIDPD4SCKPD5
        在QC12864B上以串行模式显示汉字的代码如下:
    1. /***********************************************
    2. 标题:        LCD12864程序
    3. 效果:        基于YL-KL26Z 开发板的QC12864B液晶屏
    4.            串行模式测试程序    (已经验证  OK)
    5. ***************************************************/
    6. #include "includes.h"
    7. //SID   PD4   
    8. //SCLK  PD5  
    9. #define BIT(x) (1<<(x))
    10. #define uchar unsigned char
    11. #define uint unsigned int
    12. #define nop()         delay_us()
    13. #define xtal 10
    14. #define Set_CS()        GPIO_SET(MKL_PORTD,3)
    15. #define Set_SID()        GPIO_SET(MKL_PORTD,4)
    16. #define Set_SCLK()        GPIO_SET(MKL_PORTD,5)
    17. #define Clr_CS()              GPIO_CLR(MKL_PORTD,3)
    18. #define Clr_SID()        GPIO_CLR(MKL_PORTD,4)
    19. #define Clr_SCLK()        GPIO_CLR(MKL_PORTD,5)
    20. void delay_us(void);
    21. void Delay(uint32_t a);                          
    22. void W_1byte(uchar RW, uchar RS, uchar W_data);
    23. void Write_8bits(uint W_bits);
    24. void LCD_Init(void);
    25. void Char_Set_XY(uchar x, uchar y, const uchar *p);
    26. void Set_XY(uchar x, uchar y, uchar *p);
    27. void Set_White(uchar x,uchar y,uchar end_x,uchar clear);         
    28. void Setxy(uchar x, uchar y);
    29. void myDelay (INT32U ulTime)
    30. {
    31.     INT32U i;

    32.     i = 0;
    33.     while (ulTime--) {
    34.         for (i = 0; i < 5000; i++);
    35.     }
    36. }
    37. int  main (void)
    38. {
    39.     SystemCoreClockUpdate();
    40.     SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK
    41.                   | SIM_SCGC5_PORTB_MASK
    42.                   | SIM_SCGC5_PORTC_MASK
    43.                   | SIM_SCGC5_PORTD_MASK
    44.                   | SIM_SCGC5_PORTE_MASK );   
    45.        PORT_ENABLE_CLK(MKL_PORTD);
    46.        IO_FUN_SEL(MKL_PORTD,3,1);
    47.        IO_FUN_SEL(MKL_PORTD,4,1);
    48.        IO_FUN_SEL(MKL_PORTD,5,1);
    49.        GPIO_DDR_OUTPUT(MKL_PORTD,3);
    50.           GPIO_DDR_OUTPUT(MKL_PORTD,4);
    51.           GPIO_DDR_OUTPUT(MKL_PORTD,5);
    52.           Clr_CS();
    53.           Clr_SID();
    54.           Clr_SCLK();
    55.           LCD_Init();
    56.           Delay(50);
    57.           LCD_Init();                                
    58.           nop();
    59.           nop();
    60.           Delay(500);
    61.           Char_Set_XY(0,0, "秦时明月汉时关");
    62.           Char_Set_XY(0,1,"万里长征人未还");
    63.           Char_Set_XY(0,2, "但使龙城飞将在");
    64.           Char_Set_XY(0,3, "不教胡马度阴山");
    65.        while(1);
    66. }
    67. void LCD_Init(void)
    68. {
    69.         uchar cmd;
    70.         cmd=0x30;                       
    71.         W_1byte(0,0,cmd);
    72.         Delay(2);
    73.         cmd=0x0C;                       
    74.         W_1byte(0,0,cmd);       
    75.         Delay(2);
    76.         cmd=0x01;                       
    77.         W_1byte(0,0,cmd);       
    78.         Delay(2);
    79.         cmd=0x02;                       
    80.         W_1byte(0,0,cmd);       
    81.         Delay(2);
    82.         cmd=0x80;                       
    83.         W_1byte(0,0,cmd);       
    84.         Delay(2);                       
    85. }
    86. void W_1byte(uchar RW, uchar RS,uchar W_data)
    87. {        uint H_data,L_data,S_ID = 0xf8;         
    88.         if(RW == 0)
    89.         {
    90.                  S_ID &=~ 0x04;
    91.         }
    92.         else                                       
    93.         {
    94.                  S_ID |= 0X04;
    95.         }
    96.         if(RS == 0)
    97.         {
    98.                  S_ID &=~ 0x02;
    99.         }
    100.         else                                       
    101.         {
    102.                  S_ID |= 0X02;
    103.         }
    104.         H_data = W_data;
    105.         H_data &= 0xf0;                       
    106.         L_data = W_data;                  
    107.         L_data &= 0x0f;                       
    108.         L_data <<= 4;                       
    109.         Set_CS();
    110.         Write_8bits(S_ID);                
    111.         Write_8bits(H_data);       
    112.         Write_8bits(L_data);       
    113.         Clr_CS();       
    114. }
    115. void Write_8bits(uint W_bits)
    116. {        uint i,Temp_data;
    117.         for(i=0; i<8; i++)
    118.         {        Temp_data = W_bits;
    119.                 Temp_data <<= i;
    120.                 if((Temp_data&0x80)==0)
    121.                 {
    122.                          Clr_SID();
    123.                 }
    124.                 else
    125.                 {
    126.                          Set_SID();
    127.                 }
    128.                 nop();
    129.                 Set_SCLK();
    130.                 nop();
    131.                 nop();
    132.                 Clr_SCLK();
    133.                 nop();
    134.                 Clr_SID();
    135.         }
    136. }
    137. void delay_us()
    138. {     unsigned char  i;  
    139.      for(i=1;i<10;i++);   
    140. }
    141. void Delay(uint32_t a)    //1ms????
    142. { uint32_t i;
    143.   while( --a != 0)
    144.   {
    145.    for(i = 0; i<5200; i++);
    146.   }            
    147. }
    148. void Char_Set_XY(uchar x, uchar y,const uchar *p)
    149. {     if(y == 0)
    150.         {
    151.                  W_1byte(0,0,(0x80+x));       
    152.         }
    153.         if(y == 1)
    154.         {
    155.                 W_1byte(0,0,(0x90+x));
    156.         }
    157.         if(y == 2)
    158.         {
    159.                 W_1byte(0,0,(0x88+x));
    160.         }
    161.         if(y == 3)
    162.         {
    163.                 W_1byte(0,0,(0x98+x));
    164.         }
    165.         while(*p != 0)
    166.         {
    167.                 W_1byte(0,1,*p++);
    168.         }
    169. }
    170. void Set_XY(uchar x, uchar y, uchar *p)
    171. {     if(y == 0)
    172.         {
    173.                  W_1byte(0,0,(0x80+x));       
    174.         }
    175.         if(y == 1)
    176.         {
    177.                 W_1byte(0,0,(0x90+x));
    178.         }
    179.         if(y == 2)
    180.         {
    181.                 W_1byte(0,0,(0x88+x));
    182.         }
    183.         if(y == 3)
    184.         {
    185.                 W_1byte(0,0,(0x98+x));
    186.         }
    187.         while(*p != 0)
    188.         {
    189.                 W_1byte(0,1,*p++);
    190.         }
    191. }
    192. void Setxy(uchar x, uchar y)
    193. {     if(y == 0)
    194.         {
    195.                  W_1byte(0,0,(0x80+x));       
    196.         }
    197.         if(y == 1)
    198.         {
    199.                 W_1byte(0,0,(0x90+x));
    200.         }
    201.         if(y == 2)
    202.         {
    203.                 W_1byte(0,0,(0x88+x));
    204.         }
    205.         if(y == 3)
    206.         {
    207.                 W_1byte(0,0,(0x98+x));
    208.         }
    209. }
    210. void Set_White(uchar x,uchar y,uchar end_x,uchar clear)
    211. {         uchar i, j, white_x, white_y,white_end_x,clr_x,clr_y;               
    212.         white_end_x = (end_x-x+1);
    213.         white_end_x <<= 1;
    214.         if(y==1)
    215.         {         white_x = (0x80+x-1);
    216.                 white_y = 0x80;
    217.                 clr_x = 0x80;
    218.                 clr_y = 0x80;
    219.         }
    220.         else if(y==2)
    221.         {         white_x = (0x80+x-1);
    222.                 white_y = 0x90;
    223.                 clr_x = 0x80;
    224.                 clr_y = 0x90;
    225.         }
    226.         else if(y==3)
    227.         {         white_x = (0x88+x-1);
    228.                 white_y = 0x80;
    229.                 clr_x = 0x88;
    230.                 clr_y = 0x80;
    231.         }
    232.         else if(y==4)
    233.         {         white_x = (0x88+x-1);
    234.                 white_y = 0x90;
    235.                 clr_x = 0x88;
    236.                 clr_y = 0x90;
    237.         }
    238.         if(clear==0)
    239.         {         for(i=0;i<16;i++ )                       
    240.                 {         W_1byte(0,0,clr_y++);       
    241.                         W_1byte(0,0,clr_x);               
    242.                         for(j=0;j<16;j++)               
    243.                         {         W_1byte(0,1,0x00);       
    244.                                  nop();
    245.                         }
    246.                 }
    247.         }
    248.         nop();
    249.         for(i=0;i<16;i++ )                               
    250.         {        W_1byte(0,0,white_y++);               
    251.                 W_1byte(0,0,white_x);               
    252.                 for(j=0;j<white_end_x;j++)       
    253.                 {         if(clear==1)
    254.                          {
    255.                                   W_1byte(0,1,0x00);
    256.                          }
    257.                          else
    258.                          {
    259.                                 W_1byte(0,1,0xff);
    260.                          }
    261.                          nop();
    262.                 }
    263.         }
    264. }
    复制代码
    经实际验证,说明程序的移植是成功的,可以在YL-KL26Z 开发板上由QC12864B实现常规的显示功能。

    我知道答案 目前已有13人回答
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2016-1-24 20:07:24 | 显示全部楼层
    学习了。。。 null - 副本 - 副本 - 副本.png null - 副本 - 副本 (2).png null - 副本 - 副本 (3).png null - 副本 - 副本.png null - 副本 (2) - 副本.png null - 副本 (2).png null - 副本 (3).png null - 副本 (4).png null - 副本.png null.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    59

    帖子

    0

    注册会员

    Rank: 2

    积分
    183
    最后登录
    2016-4-26
    发表于 2016-3-10 09:48:37 | 显示全部楼层
    一直没搞定,用12864动态显示数字跳动,为什么会有时出现中文汉字
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7123
    最后登录
    2023-4-20
     楼主| 发表于 2016-3-11 18:25:33 | 显示全部楼层
    think8 发表于 2016-3-10 09:48
    一直没搞定,用12864动态显示数字跳动,为什么会有时出现中文汉字

    是否在显示数字时未转换为相应的字符显示,因为QC12864的内部带字库,当显示的编码为汉字值时就会出现中文汉字。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7123
    最后登录
    2023-4-20
     楼主| 发表于 2016-3-11 18:25:48 | 显示全部楼层
    think8 发表于 2016-3-10 09:48
    一直没搞定,用12864动态显示数字跳动,为什么会有时出现中文汉字

    是否在显示数字时未转换为相应的字符显示,因为QC12864的内部带字库,当显示的编码为汉字值时就会出现中文汉字。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7123
    最后登录
    2023-4-20
     楼主| 发表于 2016-3-11 18:26:12 | 显示全部楼层
    think8 发表于 2016-3-10 09:48
    一直没搞定,用12864动态显示数字跳动,为什么会有时出现中文汉字

    是否在显示数字时未转换为相应的字符显示,因为QC12864的内部带字库,当显示的编码为汉字值时就会出现中文汉字。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7123
    最后登录
    2023-4-20
     楼主| 发表于 2016-3-11 18:26:39 | 显示全部楼层
    think8 发表于 2016-3-10 09:48
    一直没搞定,用12864动态显示数字跳动,为什么会有时出现中文汉字

    是否在显示数字时未转换为相应的字符显示,因为QC12864的内部带字库,当显示的编码为汉字值时就会出现中文汉字。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    40

    主题

    500

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1089
    最后登录
    2025-1-13
    发表于 2016-3-11 19:28:25 | 显示全部楼层
    谢谢!!分享!!!!!!!
    xingxiny75@gmail.com.png
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    59

    帖子

    0

    注册会员

    Rank: 2

    积分
    183
    最后登录
    2016-4-26
    发表于 2016-3-11 20:57:35 | 显示全部楼层
    jinglixixi 发表于 2016-3-11 18:26
    是否在显示数字时未转换为相应的字符显示,因为QC12864的内部带字库,当显示的编码为汉字值时就会出现中 ...

    转化成assic码了啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18

    主题

    67

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    310
    最后登录
    2018-3-25
    发表于 2016-3-14 08:03:57 | 显示全部楼层
    请问是通过SPI通信吗?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 12:42 , Processed in 0.105396 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表