找回密码
 立即注册
查看: 299|回复: 1

51单片机四线spi驱动UC1601液晶屏

[复制链接]
  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 170 天

    [LV.7]常住居民III

    14

    主题

    53

    回帖

    778

    积分

    高级会员

    积分
    778
    发表于 2023-11-26 11:12:13 | 显示全部楼层 |阅读模式
    1. #include <STC89C5xRC.H>
    2. /*
    3. 丝印:HEM12864-12,驱动IC:UC1601
    4.         接线:1-CS;2-RST;3-DC;4-RW;5-SCK;8-SDA;13-VDD;14-BL-;15-BL+;16-GND
    5.         51单片机四线spi驱动UC1601液晶屏
    6.         焊盘1(BM0)\焊盘4(BM1)接地,BM[1:0]:"LL":S8(四线spi)
    7. */
    8. #define uchar unsigned char
    9. #define uint unsigned int
    10. #define Disp_On 0xaf // Display Enable
    11. #define Disp_Off 0xae // Display Disable
    12. #define Page_Add 0xb0 // Page Address Start
    13. //#define Row_Add 0x40 // Scroll Line Start
    14. sbit CD = P2^5; // Control or Data Select
    15. sbit CS0 = P2^7; // Chip select
    16. sbit RST = P2^6; // System reset
    17. sbit SCK=P2^3;
    18. sbit SDA=P2^2;
    19. uchar row,col; // 全局变量
    20. unsigned char code peom[]={
    21. 0x02,0xE2,0x22,0x22,0x22,0xFE,0x22,0x22,
    22. 0x22,0xFE,0x22,0x22,0x22,0xE2,0x02,0x00,
    23. 0x00,0xFF,0x00,0x08,0x06,0x01,0x16,0x08,
    24. 0x06,0x01,0x02,0x4C,0x80,0x7F,0x00,0x00,/*"两",0*/
    25. 0x80,0x80,0x40,0x20,0x10,0x08,0x04,0xC3,
    26. 0x04,0x08,0x10,0x20,0x40,0x80,0x80,0x00,
    27. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
    28. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"个",1*/
    29. 0x10,0x10,0x12,0xD2,0x52,0x5F,0x52,0xF2,
    30. 0x52,0x5F,0x52,0xD2,0x12,0x10,0x10,0x00,
    31. 0x00,0x00,0x00,0x9F,0x52,0x32,0x12,0x1F,
    32. 0x12,0x32,0x52,0x9F,0x00,0x00,0x00,0x00,/*"黄",2*/
    33. 0xF2,0x12,0x12,0xF2,0x02,0xF2,0x12,0x12,
    34. 0xF2,0x00,0xFC,0x16,0x25,0x84,0xFC,0x00,
    35. 0xFF,0x01,0x82,0xFF,0x00,0xFF,0x01,0x82,
    36. 0xFF,0x10,0x13,0x12,0x52,0x82,0x7E,0x00,/*"鹂",3*/
    37. 0x00,0xFC,0x04,0x04,0xFC,0x00,0x00,0xFC,
    38. 0x04,0x16,0x65,0x04,0x84,0xFC,0x00,0x00,
    39. 0x00,0x0F,0x04,0x04,0x0F,0x00,0x10,0x13,
    40. 0x12,0x12,0x12,0x52,0x92,0x42,0x3E,0x00,/*"鸣",4*/
    41. 0x00,0x22,0x26,0x1A,0x12,0x02,0x7E,0x80,
    42. 0x22,0x26,0x1A,0x12,0x02,0x7E,0x00,0x00,
    43. 0x20,0x21,0x29,0x25,0x23,0x25,0x29,0xF1,
    44. 0x29,0x25,0x23,0x25,0x29,0x21,0x20,0x00,/*"翠",5*/
    45. 0x10,0x10,0xD0,0xFF,0x90,0x10,0xFC,0x04,
    46. 0x02,0xF8,0x00,0xFC,0x04,0x04,0xFC,0x00,
    47. 0x04,0x03,0x00,0xFF,0x00,0x01,0x8F,0x44,
    48. 0x32,0x0F,0x00,0xFF,0x04,0x08,0x07,0x00,/*"柳",6*/
    49. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    50. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    51. 0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,
    52. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",7*/
    53. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
    54. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
    55. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    56. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"一",8*/
    57. 0x00,0x10,0x88,0xC4,0x33,0x00,0x40,0x42,
    58. 0x42,0x42,0xC2,0x42,0x42,0x42,0x40,0x00,
    59. 0x02,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,
    60. 0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,/*"行",9*/
    61. 0x00,0x00,0xF8,0x08,0x08,0x0C,0x0A,0x09,
    62. 0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,
    63. 0x00,0x00,0xFF,0x41,0x41,0x41,0x41,0x41,
    64. 0x41,0x41,0x41,0x41,0xFF,0x00,0x00,0x00,/*"白",10*/
    65. 0x00,0x80,0xEE,0x8A,0xFA,0xAA,0xAE,0x14,
    66. 0x12,0xF7,0xAA,0xAA,0xF6,0x12,0x10,0x00,
    67. 0x00,0x40,0x40,0x5E,0x52,0x53,0x56,0x5A,
    68. 0x52,0x5A,0x1E,0x50,0x90,0x70,0x00,0x00,/*"鹭",11*/
    69. 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x40,
    70. 0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
    71. 0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,
    72. 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"上",12*/
    73. 0x40,0x44,0x54,0x54,0x54,0x54,0x54,0x7F,
    74. 0x54,0x54,0x54,0x54,0x54,0x44,0x40,0x00,
    75. 0x00,0x00,0x00,0xFF,0x15,0x15,0x15,0x15,
    76. 0x15,0x55,0x95,0x7F,0x00,0x00,0x00,0x00,/*"青",13*/
    77. 0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,
    78. 0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x00,
    79. 0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,
    80. 0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00,/*"天",14*/
    81. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    82. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    83. 0x00,0x00,0x18,0x24,0x24,0x18,0x00,0x00,
    84. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"。",15*/
    85. 0x10,0x0C,0xC4,0x54,0x4C,0x64,0xD5,0x46,
    86. 0x44,0x44,0x4C,0x54,0xC4,0x14,0x0C,0x00,
    87. 0x00,0x00,0xFF,0x40,0x44,0x62,0x55,0x49,
    88. 0x55,0x43,0x40,0x40,0xFF,0x00,0x00,0x00,/*"窗",0*/
    89. 0x40,0x40,0x20,0x20,0x90,0x88,0x94,0xE3,
    90. 0x84,0x88,0x90,0x20,0x20,0x40,0x40,0x00,
    91. 0x00,0x00,0x00,0xFC,0x44,0x44,0x44,0x44,
    92. 0x46,0x45,0x44,0xFC,0x00,0x00,0x00,0x00,/*"含",1*/
    93. 0x02,0x02,0xE2,0x22,0x22,0xFE,0x22,0x22,
    94. 0x22,0xFE,0x22,0x22,0xE2,0x02,0x02,0x00,
    95. 0x00,0x00,0xFF,0x48,0x44,0x43,0x40,0x40,
    96. 0x40,0x43,0x44,0x44,0xFF,0x00,0x00,0x00,/*"西",2*/
    97. 0x00,0xF0,0x00,0xFF,0x00,0xF0,0x40,0x20,
    98. 0x10,0x0C,0x23,0xCC,0x10,0x20,0x40,0x00,
    99. 0x00,0x1F,0x10,0x0F,0x08,0x1F,0x00,0x01,
    100. 0x09,0x11,0x21,0xD1,0x0D,0x03,0x00,0x00,/*"岭",3*/
    101. 0x80,0x80,0x84,0x84,0x84,0x84,0x84,0xFC,
    102. 0x82,0x82,0x82,0x83,0x82,0x80,0x80,0x00,
    103. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
    104. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"千",4*/
    105. 0x24,0x24,0xA4,0xFE,0x23,0x22,0x80,0x70,
    106. 0x00,0xFF,0x00,0x80,0x40,0x30,0x00,0x00,
    107. 0x08,0x06,0x01,0xFF,0x01,0x86,0x40,0x30,
    108. 0x0E,0x01,0x06,0x18,0x20,0x40,0x80,0x00,/*"秋",5*/
    109. 0x10,0x0C,0x05,0x55,0x55,0x55,0x05,0x7F,
    110. 0x05,0x55,0x55,0x55,0x05,0x14,0x0C,0x00,
    111. 0x00,0x00,0x41,0x49,0x49,0x49,0x49,0x49,
    112. 0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,/*"雪",6*/
    113. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    114. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    115. 0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,
    116. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",7*/
    117. 0x00,0xF8,0x01,0x06,0x00,0x00,0x02,0x02,
    118. 0x02,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,
    119. 0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
    120. 0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,/*"门",8*/
    121. 0x10,0x60,0x02,0x0C,0xC0,0x00,0xF8,0x08,
    122. 0x0C,0x0B,0x08,0x08,0x08,0xF8,0x00,0x00,
    123. 0x04,0x04,0x7C,0x03,0x00,0x00,0xFF,0x41,
    124. 0x41,0x41,0x41,0x41,0x41,0xFF,0x00,0x00,/*"泊",9*/
    125. 0x00,0x08,0x88,0x48,0x28,0x18,0x0F,0xE8,
    126. 0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,
    127. 0x00,0x20,0x11,0x09,0x05,0x41,0x81,0x7F,
    128. 0x01,0x01,0x05,0x09,0x11,0x20,0x00,0x00,/*"东",10*/
    129. 0x00,0x00,0x80,0x9E,0x92,0x92,0x92,0x92,
    130. 0x92,0x92,0x92,0x9E,0x80,0x00,0x00,0x00,
    131. 0x84,0x84,0x44,0x44,0x24,0x14,0x0C,0x07,
    132. 0x0C,0x14,0x24,0x44,0x44,0x84,0x84,0x00,/*"吴",11*/
    133. 0x04,0x04,0x04,0x04,0x04,0xFC,0x44,0x44,
    134. 0x44,0x44,0x44,0xC4,0x04,0x04,0x04,0x00,
    135. 0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,
    136. 0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,/*"万",12*/
    137. 0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0xFE,
    138. 0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
    139. 0x40,0x40,0x44,0x44,0x44,0x44,0x44,0x7F,
    140. 0x44,0x44,0x44,0x44,0x44,0x40,0x40,0x00,/*"里",13*/
    141. 0x80,0x80,0xFC,0x96,0xE5,0x84,0xFC,0x80,
    142. 0x40,0x3E,0x02,0x02,0x7E,0x40,0x40,0x00,
    143. 0x80,0x60,0x1F,0x02,0x4C,0x80,0x7F,0x00,
    144. 0xFE,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,/*"船",14*/
    145. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    146. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    147. 0x00,0x00,0x18,0x24,0x24,0x18,0x00,0x00,
    148. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"。",15*/
    149. };
    150. /*------------------延时子程序1----------------------------*/
    151. void delay(uint i)
    152. {
    153.         while(i--);
    154. }
    155. /*------------------延时子程序2----------------------------*/
    156. void delay1s(uint t)
    157. {
    158.         uint i,j;
    159.         for(i=0;i<t;i++)
    160.         for(j=0;j<10000;j++)
    161.         ;
    162. }
    163. void write_byte(uchar byte)
    164. {
    165.         uchar i=0x80;
    166.         SCK=0;
    167.         delay(10);
    168.         SDA=0;
    169.        
    170.         while(i){
    171.                 if(byte&i) SDA=1;
    172.                 else SDA=0;
    173.                 SCK=1;
    174.                 delay(10);
    175.                 SCK=0;
    176.                 i>>=1;
    177.         }       
    178.        
    179.         SCK=0;
    180.         delay(10);
    181.         SDA=1;
    182. }
    183. /*------------------写命令到LCD-----------------------------*/
    184. void write_com(uchar cmdcode)
    185. {
    186.         CD = 0;
    187.         CS0 = 0;
    188.         write_byte(cmdcode);
    189.         CS0 = 1;
    190. }
    191. /*-------------------写数据到LCD----------------------------*/
    192. void write_data(uchar Dispdata)
    193. {
    194.         CD = 1;
    195.         CS0 = 0;
    196.         write_byte(Dispdata);
    197.         CS0 = 1;
    198. }
    199. /*-------------------清屏-----------------------------------*/
    200. void Clr_Scr()
    201. {
    202.         uchar j,k;
    203.         for(k=0;k<8;k++)
    204.         {
    205.                 write_com(Page_Add+k);
    206.                 write_com(0x10);
    207.                 write_com(0x00);
    208.                 for(j=0;j<132;j++)
    209.                         write_data(0x00);
    210.         }
    211. }
    212. /*------------------初始化LCD屏-----------------------------*/
    213. void Init_lcd()
    214. {
    215.         delay(6000);
    216.         RST=0;
    217.         delay(6000);
    218.         RST=1;
    219.         delay(6000);
    220.         write_com(0xe2); // Set System Reset
    221.         delay(6000);
    222.         write_com(0x2f); // Set Power Control loading 15-24nF
    223.         write_com(0xa6); // Set 正常 Display
    224.         write_com(0xc4); // Set Mapping Control
    225.         write_com(0xa0); // Set Frame Rate
    226.         write_com(0x89); // Set RAM Address Control
    227.         write_com(0xe8); // Set Bias Ratio : 1/6
    228.         write_com(0x81);
    229.         write_com(0xaf); // Set Vbias : 7.99V 0xff
    230.         write_com(0xf1);
    231.         write_com(0x3f); // Set COM End (63) 3f
    232.         write_com(0xf2);
    233.         write_com(0x00); // Set Partial Display Start (0)  0x20
    234.         write_com(0xf3);
    235.         write_com(0x3f); // Set Partial Display End (63) 3f
    236.         write_com(0x85); // Set Partial Display Control
    237.         write_com(Disp_On); // Set Display Enable
    238. }
    239. //-------LCD设置坐标---------------------------------------
    240. void LCD_SetPos(uint page, uint column)
    241. {
    242.     column = column - 1; //我们平常所说的第 1 列,在 LCD 驱动 IC 里是第 0 列。所以在这里减去 1.
    243.     page = page - 1;
    244.                 write_com(0xb0 + page);
    245.                 write_com(column & 0x0f);
    246.     column >>= 4;
    247.     column=column|0x10;
    248.                 write_com(column);                //取高4位行地址
    249. }
    250. //显示 16x16 点阵图像、汉字、生僻字或 16x16
    251. void display_graphic_16x16(uint page, uint column,uchar fs,signed char *dp)
    252. {
    253.                 uchar i;//;
    254.     LCD_SetPos(page, column);                //发送地址,第一页
    255.     for (i = 0; i < 16; i++)                                //第一页的数据16字节,列号自动累加
    256.     {
    257.         if(fs==0)  write_data( *dp); //写数据到LCD,如果要反色显示,就在*P前用~取反。
    258.                                 if(fs==1)  write_data(~*dp); //反色
    259.         dp++;
    260.     }
    261.     LCD_SetPos(page + 1, column);                //发送地址,第二页
    262.     for (i = 0; i < 16; i++)                                //第二页的数据16字节
    263.     {
    264.                         if(fs==0)  write_data( *dp); //写数据到LCD,如果要反色显示,就在*P前用~取反。
    265.                         if(fs==1)  write_data(~*dp); //反色
    266.       dp++;
    267.     }
    268. }
    269. void main()
    270. {
    271.         int i;
    272.         Init_lcd();
    273.         Clr_Scr();
    274.         while(1)
    275.         {
    276.                 Clr_Scr();
    277.                 for(i=0;i<32;i++)
    278.                 {
    279.                         display_graphic_16x16(1+(int)(i/8)*2, i*16%128+1, 0, peom+i*32);
    280.                 }
    281.                 delay1s(50);
    282.                 for(i=0;i<1024;i++)
    283.                 {
    284.                         display_graphic_16x16((1+(int)(i/8)%8*2)%8, i*16%128+1, 0, peom+(i%32)*32);
    285.                         write_com(0x40|i%64); // Set Scroll Line
    286.             delay1s(1);
    287.                 }
    288.                 delay1s(50);
    289.         }
    290. }
    复制代码

    70eb7bca7df4480d836cc75e081ee40b.jpg
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    11 小时前
  • 签到天数: 144 天

    [LV.7]常住居民III

    2

    主题

    89

    回帖

    606

    积分

    高级会员

    积分
    606
    发表于 2023-12-1 08:39:01 来自手机 | 显示全部楼层
    用的isp
    回复 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-18 16:42 , Processed in 0.061043 second(s), 35 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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