找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2595|回复: 1
打印 上一主题 下一主题
收起左侧

stm32驱动5110液晶屏的程序源码

[复制链接]
跳转到指定楼层
楼主
ID:372015 发表于 2018-7-15 17:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32显示5110源代码

单片机源程序如下:
  1. #include "5110.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "math.h"
  5. #include <stdlib.h>
  6. //LCD的IO口宏定义
  7. #define CLR_RESET PAout(6)=0
  8. #define SET_RESET PAout(6)=1
  9. #define CLR_SCE         PAout(7)=0
  10. #define SET_SCE         PAout(7)=1
  11. #define CLR_DC                 PAout(5)=0
  12. #define SET_DC                PAout(5)=1
  13. #define CLR_SDIN         PAout(4)=0
  14. #define SET_SDIN         PAout(4)=1
  15. #define CLR_SCLK         PAout(3)=0
  16. #define SET_SCLK         PAout(3)=1
  17. #define CLR_BL                 PAout(2)=0
  18. #define SET_BL                PAout(2)=1

  19. unsigned int table[20]; //功能5110用于存放数字
  20. const unsigned char font6x8[][6]=//功能ASCII码

  21. {
  22. {0x00,0x00,0x00,0x00,0x00,0x00},//sp
  23. {0x00,0x00,0x00,0x2f,0x00,0x00},//!
  24. {0x00,0x00,0x07,0x00,0x07,0x00},//"
  25. {0x00,0x14,0x7f,0x14,0x7f,0x14},//#
  26. {0x00,0x24,0x2a,0x7f,0x2a,0x12},//$
  27. {0x00,0x62,0x64,0x08,0x13,0x23},//%
  28. {0x00,0x36,0x49,0x55,0x22,0x50},//&
  29. {0x00,0x00,0x05,0x03,0x00,0x00},//'
  30. {0x00,0x00,0x1c,0x22,0x41,0x00},//(
  31. {0x00,0x00,0x41,0x22,0x1c,0x00},//)
  32. {0x00,0x14,0x08,0x3E,0x08,0x14},//*
  33. {0x00,0x08,0x08,0x3E,0x08,0x08},//+
  34. {0x00,0x00,0x00,0xA0,0x60,0x00},//,
  35. {0x00,0x08,0x08,0x08,0x08,0x08},//-
  36. {0x00,0x00,0x60,0x60,0x00,0x00},//.
  37. {0x00,0x20,0x10,0x08,0x04,0x02},///
  38. {0x00,0x3E,0x51,0x49,0x45,0x3E},//0
  39. {0x00,0x00,0x42,0x7F,0x40,0x00},//1
  40. {0x00,0x42,0x61,0x51,0x49,0x46},//2
  41. {0x00,0x21,0x41,0x45,0x4B,0x31},//3
  42. {0x00,0x18,0x14,0x12,0x7F,0x10},//4
  43. {0x00,0x27,0x45,0x45,0x45,0x39},//5
  44. {0x00,0x3C,0x4A,0x49,0x49,0x30},//6
  45. {0x00,0x01,0x71,0x09,0x05,0x03},//7
  46. {0x00,0x36,0x49,0x49,0x49,0x36},//8
  47. {0x00,0x06,0x49,0x49,0x29,0x1E},//9
  48. {0x00,0x00,0x36,0x36,0x00,0x00},//:
  49. {0x00,0x00,0x56,0x36,0x00,0x00},//;
  50. {0x00,0x08,0x14,0x22,0x41,0x00},//<
  51. {0x00,0x14,0x14,0x14,0x14,0x14},//=
  52. {0x00,0x00,0x41,0x22,0x14,0x08},//>
  53. {0x00,0x02,0x01,0x51,0x09,0x06},//?
  54. {0x00,0x32,0x49,0x59,0x51,0x3E},//@
  55. {0x00,0x7C,0x12,0x11,0x12,0x7C},//A
  56. {0x00,0x7F,0x49,0x49,0x49,0x36},//B
  57. {0x00,0x3E,0x41,0x41,0x41,0x22},//C
  58. {0x00,0x7F,0x41,0x41,0x22,0x1C},//D
  59. {0x00,0x7F,0x49,0x49,0x49,0x41},//E
  60. {0x00,0x7F,0x09,0x09,0x09,0x01},//F
  61. {0x00,0x3E,0x41,0x49,0x49,0x7A},//G
  62. {0x00,0x7F,0x08,0x08,0x08,0x7F},//H
  63. {0x00,0x00,0x41,0x7F,0x41,0x00},//I
  64. {0x00,0x20,0x40,0x41,0x3F,0x01},//J
  65. {0x00,0x7F,0x08,0x14,0x22,0x41},//K
  66. {0x00,0x7F,0x40,0x40,0x40,0x40},//L
  67. {0x00,0x7F,0x02,0x0C,0x02,0x7F},//M
  68. {0x00,0x7F,0x04,0x08,0x10,0x7F},//N
  69. {0x00,0x3E,0x41,0x41,0x41,0x3E},//O
  70. {0x00,0x7F,0x09,0x09,0x09,0x06},//P
  71. {0x00,0x3E,0x41,0x51,0x21,0x5E},//Q
  72. {0x00,0x7F,0x09,0x19,0x29,0x46},//R
  73. {0x00,0x46,0x49,0x49,0x49,0x31},//S
  74. {0x00,0x01,0x01,0x7F,0x01,0x01},//T
  75. {0x00,0x3F,0x40,0x40,0x40,0x3F},//U
  76. {0x00,0x1F,0x20,0x40,0x20,0x1F},//V
  77. {0x00,0x3F,0x40,0x38,0x40,0x3F},//W
  78. {0x00,0x63,0x14,0x08,0x14,0x63},//X
  79. {0x00,0x07,0x08,0x70,0x08,0x07},//Y
  80. {0x00,0x61,0x51,0x49,0x45,0x43},//Z
  81. {0x00,0x00,0x7F,0x41,0x41,0x00},//[
  82. {0x00,0x55,0x2A,0x55,0x2A,0x55},//5
  83. {0x00,0x00,0x41,0x41,0x7F,0x00},//]
  84. {0x00,0x04,0x02,0x01,0x02,0x04},//^
  85. {0x00,0x40,0x40,0x40,0x40,0x40},//_
  86. {0x00,0x00,0x01,0x02,0x04,0x00},//'
  87. {0x00,0x20,0x54,0x54,0x54,0x78},//a
  88. {0x00,0x7F,0x48,0x44,0x44,0x38},//b
  89. {0x00,0x38,0x44,0x44,0x44,0x20},//c
  90. {0x00,0x38,0x44,0x44,0x48,0x7F},//d
  91. {0x00,0x38,0x54,0x54,0x54,0x18},//e
  92. {0x00,0x08,0x7E,0x09,0x01,0x02},//f
  93. {0x00,0x18,0xA4,0xA4,0xA4,0x7C},//g
  94. {0x00,0x7F,0x08,0x04,0x04,0x78},//h
  95. {0x00,0x00,0x44,0x7D,0x40,0x00},//i
  96. {0x00,0x40,0x80,0x84,0x7D,0x00},//j
  97. {0x00,0x7F,0x10,0x28,0x44,0x00},//k
  98. {0x00,0x00,0x41,0x7F,0x40,0x00},//l
  99. {0x00,0x7C,0x04,0x18,0x04,0x78},//m
  100. {0x00,0x7C,0x08,0x04,0x04,0x78},//n
  101. {0x00,0x38,0x44,0x44,0x44,0x38},//o
  102. {0x00,0xFC,0x24,0x24,0x24,0x18},//p
  103. {0x00,0x18,0x24,0x24,0x18,0xFC},//q
  104. {0x00,0x7C,0x08,0x04,0x04,0x08},//r
  105. {0x00,0x48,0x54,0x54,0x54,0x20},//s
  106. {0x00,0x04,0x3F,0x44,0x40,0x20},//t
  107. {0x00,0x3C,0x40,0x40,0x20,0x7C},//u
  108. {0x00,0x1C,0x20,0x40,0x20,0x1C},//v
  109. {0x00,0x3C,0x40,0x30,0x40,0x3C},//
  110. {0x00,0x1C,0xA0,0xA0,0xA0,0x7C},//y
  111. {0x00,0x44,0x64,0x54,0x4C,0x44},//z
  112. {0x14,0x14,0x14,0x14,0x14,0x14}//horizlines
  113. };
  114. unsigned char string[14]={"Nokia5110"};



  115. /******************************************************************************
  116. ----------------------功能:5110的IO口初始化--------------------------------------
  117. ******************************************************************************/
  118. void LCD_GPIO_Init(void)
  119.         {
  120. GPIO_InitTypeDef GPIO_InitStructure;
  121. /********************使能A口************************/
  122.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  123. //设置A0口
  124.                 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
  125.                 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  126.                 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  127.                 GPIO_Init(GPIOA,&GPIO_InitStructure);
  128.                 GPIO_SetBits(GPIOA,GPIO_Pin_2);
  129.                 //设置A1口
  130.                 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
  131.                 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  132.                 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  133.                 GPIO_Init(GPIOA,&GPIO_InitStructure);
  134.                 GPIO_SetBits(GPIOA,GPIO_Pin_3);
  135.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  136. //设置B6口 SCL
  137.                 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
  138.                 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  139.                 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  140.                 GPIO_Init(GPIOA,&GPIO_InitStructure);
  141.                 GPIO_SetBits(GPIOA,GPIO_Pin_4);
  142. //设置B7口 SDA
  143.                 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
  144.                 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  145.                 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  146.                 GPIO_Init(GPIOA,&GPIO_InitStructure);
  147.                 GPIO_SetBits(GPIOA,GPIO_Pin_5);


  148. /********************使能C口************************/
  149.         //        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
  150.                 //设置C3口
  151.                 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
  152.                 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  153.                 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  154.                 GPIO_Init(GPIOA,&GPIO_InitStructure);
  155.                 GPIO_SetBits(GPIOA,GPIO_Pin_6);
  156.                
  157.                 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
  158.                 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  159.                 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  160.                 GPIO_Init(GPIOA,&GPIO_InitStructure);
  161.                 GPIO_SetBits(GPIOA,GPIO_Pin_7);
  162. }
  163.         

  164. /******************************************************************************
  165. 功能:5110写数据/命令
  166. dat写入的数据,command写入的命令
  167. D/C=0命令,D/C=1数据。
  168. ******************************************************************************/
  169. void LCD_write_byte(unsigned char dat,unsigned char command)
  170. {
  171.         unsigned char i;
  172.         CLR_SCE;
  173. if(command==0)
  174.   CLR_DC;
  175. else
  176.   SET_DC;
  177. for(i=0;i<8;i++)
  178. {
  179.     if(dat&0x80)
  180.       SET_SDIN;
  181.     else
  182.       CLR_SDIN;
  183. CLR_SCLK;
  184.                 dat=dat<<1;
  185.                 SET_SCLK;
  186. }
  187. SET_SCE;
  188. }

  189. /******************************************************************************
  190. 功能:设置坐标X:0-83Y:0-5
  191. ******************************************************************************/

  192. void LCD_set_XY(unsigned char X,unsigned char Y)
  193. {
  194.                 LCD_write_byte(0x40|Y,0);
  195.                 LCD_write_byte(0x80|X,0);
  196. }

  197. /******************************************************************************
  198. 功能:清屏
  199. ******************************************************************************/
  200. void LCD_clear(void)
  201.         {
  202. unsigned int i;
  203.                         LCD_write_byte(0x0c,0);
  204.                         LCD_write_byte(0x80,0);
  205.                         for(i=0;i<504;i++)
  206.                 {
  207.                         LCD_write_byte(0,1);
  208.                 }
  209.         }
  210.         
  211.         /******************************************************************************
  212.         功能:5110初始化
  213.         ******************************************************************************/
  214.         void LCD_init(void)
  215.                 {
  216.                         CLR_RESET;
  217.                         delay_us(2);
  218.                         SET_RESET;
  219.                         CLR_SCE;
  220.                         SET_SCE;
  221.                         LCD_write_byte(0x21,0);
  222.                         LCD_write_byte(0xc8,0);
  223.                         LCD_write_byte(0x06,0);
  224.                         LCD_write_byte(0x13,0);
  225.                         LCD_write_byte(0x20,0);
  226.                         LCD_clear();
  227.                         LCD_write_byte(0x0c,0);
  228.                   CLR_SCE;
  229.                 }
  230.         
  231. /******************************************************************************
  232.                 功能:显示一个字符
  233. ******************************************************************************/
  234. void LCD_write_char(unsigned char c)
  235. {
  236. unsigned char line;
  237.                         c-=32;
  238. for(line=0;line<6;line++)
  239.         LCD_write_byte(font6x8[c][line],1);
  240. }        
  241.         
  242. /******************************************************************************
  243. 功能:显示一个字符串
  244. ******************************************************************************/
  245. void LCD_write_str(unsigned char*string)
  246.         {
  247.                 while(*string)
  248.                         {
  249.                                 LCD_write_char(*string);string++;
  250.                         }
  251.         }
  252.         
  253. /******************************************************************************
  254.         函数名称:Write_num(longintnum);
  255.         输入:longintnum
  256.         功能:显示10位十进制整数
  257. *****************************************************************************/
  258.         void Write_num(long int num)
  259.                
  260.         {
  261. char i,weishu=0;
  262. unsigned long int x,y;
  263. if(num<0)
  264.         LCD_write_char('-');//如果小于0,加负号
  265.                 x=labs(num);//取绝对值
  266. while(num=num/10)//此处必须是一个等于号
  267.         {
  268.     weishu++;
  269.         }
  270. weishu++;//计算输入的num的位数
  271.         num=x;//取回数值
  272.         for(i=0;i<weishu;i++)
  273.         {
  274. /*一位一位的取值放入table[20]中,table[20]根据输入的num的位数变为table[weishu]*/
  275. x=num/10;
  276.         y=num-x*10;
  277.         table[i]=y;
  278.         num=x;
  279.         }
  280.         
  281.         for(i=0;i<weishu;i++)
  282.         {
  283. /*对table[weishu]中寄存的数据一位一位的与十进制的数字比较然后显示*/
  284. if(table[weishu-1-i]==0)LCD_write_char('0');
  285.                 if(table[weishu-1-i]==1)LCD_write_char('1');
  286.                 if(table[weishu-1-i]==2)LCD_write_char('2');
  287.                 if(table[weishu-1-i]==3)LCD_write_char('3');
  288.                 if(table[weishu-1-i]==4)LCD_write_char('4');
  289.                 if(table[weishu-1-i]==5)LCD_write_char('5');
  290.                 if(table[weishu-1-i]==6)LCD_write_char('6');
  291.                 if(table[weishu-1-i]==7)LCD_write_char('7');
  292.                 if(table[weishu-1-i]==8)LCD_write_char('8');
  293.                 if(table[weishu-1-i]==9)LCD_write_char('9');
  294.         }
  295. }
  296.         

  297. /******************************************************************************
  298. 功能:位图绘制函数
  299. XY起始坐标
  300. *map:位图点阵数据
  301. Pix_x:长
  302. Pix_y:宽
  303. ******************************************************************************/
  304. void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char*map,unsigned char
  305.         Pix_x,unsigned char Pix_y)
  306.         {
  307.                 unsigned int i,n;
  308.                 unsigned char row;
  309.                 if(Pix_y%8==0)
  310.                         row=Pix_y/8;
  311.                 else
  312.                 row=Pix_y/8+1;
  313.                 LCD_set_XY(X,Y);
  314.                 for(n=0;n<row;n++)
  315.                 {
  316.         for(i=0;i<Pix_x;i++)
  317. ……………………

  318. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
5110.rar (272.68 KB, 下载次数: 89)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:727275 发表于 2020-5-29 14:44 | 只看该作者
此帖仅作者可见

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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