找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1888|回复: 0
收起左侧

自己移植的Nokia5110的代码驱动基于K60

[复制链接]
ID:226456 发表于 2017-8-10 10:15 | 显示全部楼层 |阅读模式
使用的是山外的库函数
0.png

单片机源程序如下:
  1. #include "nokia5110.h"
  2. #include "fontbank.h"
  3. #include "MK60_gpio.h"

  4. void Nokia5110_Send(uint8 data, DCType dc)
  5. {
  6.   uint8 i;
  7.   if(dc == DC_DATA)
  8.     Nokia5110_DC_DATA();
  9.   else
  10.     Nokia5110_DC_CMD();
  11.    for(i=0; i<8; i++)
  12.   {
  13.     if((data<<i)&0x80)
  14.       Nokia5110_DIN_H();
  15.     else
  16.       Nokia5110_DIN_L();
  17.       Nokia5110_CLK_L();
  18.       DELAY_US(1);
  19.       Nokia5110_CLK_H();
  20.   }
  21. }


  22. void Nokia5110_Init(void)
  23. {
  24.    gpio_init(PTD1,GPO,1);   
  25.    gpio_init(PTD2,GPO,1);   
  26.    gpio_init(PTD3,GPO,1);   
  27.    gpio_init(PTD4,GPO,1);     
  28.    gpio_init(PTD5,GPO,1);
  29.    gpio_init(PTD6,GPO,1);   
  30.   
  31.     Nokia5110_LIGHT_ON();   //打开背光灯
  32.     Nokia5110_RST_L();
  33.     DELAY_US(10);          //这个延时是必须的       
  34.     Nokia5110_RST_H();
  35.        
  36.     Nokia5110_CE_H();
  37.     Nokia5110_CE_L();
  38.                      //设置LCD
  39.     Nokia5110_Send(0x21, DC_CMD);        //使用扩展命令设置Nokia5110模式
  40.     Nokia5110_Send(0xC8, DC_CMD);        //设置偏置电压
  41.     Nokia5110_Send(0x06, DC_CMD);        //温度校正
  42.     Nokia5110_Send(0x13, DC_CMD); //1:48
  43.     Nokia5110_Send(0x20, DC_CMD);        //使用基本命令
  44.     Nokia5110_Send(0x0E, DC_CMD);        //设定显示模式,反转显示
  45.        
  46.     Nokia5110_Clear();
  47. }

  48. void Nokia5110_Clear(void)
  49. {
  50.     uint16 i;
  51.     Nokia5110_Send(0x40,DC_CMD);  //设置RAM的Y坐标地址为0   
  52.     Nokia5110_Send(0x80,DC_CMD);  //设置RAM的X坐标地址为0
  53.        
  54.     for(i=0; i<504; i++)          //共计504个像素点
  55.     Nokia5110_Send(0, DC_DATA);   //全部写零达到清除的目的  
  56. }

  57. void Nokia5110_SetXY(uint8 X, uint8 Y)
  58. {
  59.     if(X > 13) X = 13;
  60.     if(Y > 5)  Y = 5;
  61.     X *=6;
  62.        
  63.     Nokia5110_Send(0x80 | X,DC_CMD);
  64.     DELAY_US(10);
  65.     Nokia5110_Send(0x40 | Y,DC_CMD);
  66. }

  67. /*设置屏幕对比度,contrast的范围为0~64;*/
  68. void Nokia5110_SetContrast(uint8 contrast)
  69. {
  70.         if(contrast > 64) contrast = 64;
  71.         Nokia5110_Send(0x21,DC_CMD);  //进入拓展命令模式
  72.         Nokia5110_Send(0x80 | contrast,DC_CMD);  //设置对比度
  73.         Nokia5110_Send(0x20,DC_CMD);  //进入基本命令模式
  74. }

  75. /*写一个字节*/
  76. void Nokia5110_WriteChar(uint8 ascii)
  77. {
  78.         uint8 i;
  79.         for(i=0; i<6; i++)
  80.         Nokia5110_Send(Font6x8[ascii-32][i],DC_DATA);
  81. }

  82. uint8 LongToString(uint8 *str, signed long dat)
  83. {
  84.         signed char i = 0;
  85.         unsigned char len = 0;
  86.         unsigned char buf[12];

  87.         if(dat < 0)
  88.         {
  89.                 dat = -dat;
  90.                 *str++ = '-';
  91.                 len++;
  92.         }
  93.         do{
  94.                 buf[i++] = dat % 10;
  95.                 dat /= 10;
  96.                 }while(dat > 0);
  97.         len += i;
  98.         while(i-- > 0)
  99.         {
  100.                 *str++ = buf[i] + '0';
  101.         }
  102.         *str = '\0';

  103.         return len;
  104.                
  105. }

  106. /* 在液晶上写数字*/
  107. void Nokia5110_WriteNum(uint8 X,uint8 Y,uint32 number)
  108. {
  109.         uint8 str[12];
  110.        
  111.         LongToString(str,number);
  112.         Nokia5110_WriteEnStr(X,Y,str);
  113. }

  114. /* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针 */
  115. void Nokia5110_WriteEnStr(uint8 X, uint8 Y, uint8 *str)
  116. {
  117.     Nokia5110_SetXY(X,Y);  //设置起始地址
  118.     while (*str != '\0')  //连续写入字符串数据,直到检测到结束符
  119.     {
  120.         Nokia5110_WriteChar(*str++);
  121.     }
  122.                 Nokia5110_Send(0,DC_DATA);
  123. }

  124. /*写一个中文字符*/
  125. void Nokia5110_WriteChinese(uint8 X, uint8 Y,uint8 GBK)
  126. {
  127.         uint8 i;
  128.   Nokia5110_SetXY(X,Y);
  129.         for(i=0; i<12; i++)
  130.         {
  131.           Nokia5110_Send(Font12x16_chinese[GBK][i],DC_DATA);
  132.         }
  133.         //delay_us(10);
  134.         Nokia5110_SetXY(X,Y+1);
  135.         for(i=12; i<24; i++)
  136.         {
  137.           Nokia5110_Send(Font12x16_chinese[GBK][i],DC_DATA);
  138.         }
  139. }

  140. /*写一幅图像到液晶*/
  141. void Nokia5110_WriteImage(void)
  142. {
  143.     uint8 row,column;
  144.     for(row=0; row<6; row++)
  145.     {
  146.        Nokia5110_SetXY(0,row);
  147.        for(column=0; column<83; column++)
  148.       {
  149.         Nokia5110_Send(image1[row][column],DC_DATA);
  150.        }
  151.     }
  152. }
复制代码

所有资料51hei提供下载:
nokia5110.zip (4.14 KB, 下载次数: 6)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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