使用的是山外的库函数
单片机源程序如下:
- #include "nokia5110.h"
- #include "fontbank.h"
- #include "MK60_gpio.h"
- void Nokia5110_Send(uint8 data, DCType dc)
- {
- uint8 i;
- if(dc == DC_DATA)
- Nokia5110_DC_DATA();
- else
- Nokia5110_DC_CMD();
- for(i=0; i<8; i++)
- {
- if((data<<i)&0x80)
- Nokia5110_DIN_H();
- else
- Nokia5110_DIN_L();
- Nokia5110_CLK_L();
- DELAY_US(1);
- Nokia5110_CLK_H();
- }
- }
- void Nokia5110_Init(void)
- {
- gpio_init(PTD1,GPO,1);
- gpio_init(PTD2,GPO,1);
- gpio_init(PTD3,GPO,1);
- gpio_init(PTD4,GPO,1);
- gpio_init(PTD5,GPO,1);
- gpio_init(PTD6,GPO,1);
-
- Nokia5110_LIGHT_ON(); //打开背光灯
- Nokia5110_RST_L();
- DELAY_US(10); //这个延时是必须的
- Nokia5110_RST_H();
-
- Nokia5110_CE_H();
- Nokia5110_CE_L();
- //设置LCD
- Nokia5110_Send(0x21, DC_CMD); //使用扩展命令设置Nokia5110模式
- Nokia5110_Send(0xC8, DC_CMD); //设置偏置电压
- Nokia5110_Send(0x06, DC_CMD); //温度校正
- Nokia5110_Send(0x13, DC_CMD); //1:48
- Nokia5110_Send(0x20, DC_CMD); //使用基本命令
- Nokia5110_Send(0x0E, DC_CMD); //设定显示模式,反转显示
-
- Nokia5110_Clear();
- }
- void Nokia5110_Clear(void)
- {
- uint16 i;
- Nokia5110_Send(0x40,DC_CMD); //设置RAM的Y坐标地址为0
- Nokia5110_Send(0x80,DC_CMD); //设置RAM的X坐标地址为0
-
- for(i=0; i<504; i++) //共计504个像素点
- Nokia5110_Send(0, DC_DATA); //全部写零达到清除的目的
- }
- void Nokia5110_SetXY(uint8 X, uint8 Y)
- {
- if(X > 13) X = 13;
- if(Y > 5) Y = 5;
- X *=6;
-
- Nokia5110_Send(0x80 | X,DC_CMD);
- DELAY_US(10);
- Nokia5110_Send(0x40 | Y,DC_CMD);
- }
- /*设置屏幕对比度,contrast的范围为0~64;*/
- void Nokia5110_SetContrast(uint8 contrast)
- {
- if(contrast > 64) contrast = 64;
- Nokia5110_Send(0x21,DC_CMD); //进入拓展命令模式
- Nokia5110_Send(0x80 | contrast,DC_CMD); //设置对比度
- Nokia5110_Send(0x20,DC_CMD); //进入基本命令模式
- }
- /*写一个字节*/
- void Nokia5110_WriteChar(uint8 ascii)
- {
- uint8 i;
- for(i=0; i<6; i++)
- Nokia5110_Send(Font6x8[ascii-32][i],DC_DATA);
- }
- uint8 LongToString(uint8 *str, signed long dat)
- {
- signed char i = 0;
- unsigned char len = 0;
- unsigned char buf[12];
- if(dat < 0)
- {
- dat = -dat;
- *str++ = '-';
- len++;
- }
- do{
- buf[i++] = dat % 10;
- dat /= 10;
- }while(dat > 0);
- len += i;
- while(i-- > 0)
- {
- *str++ = buf[i] + '0';
- }
- *str = '\0';
- return len;
-
- }
- /* 在液晶上写数字*/
- void Nokia5110_WriteNum(uint8 X,uint8 Y,uint32 number)
- {
- uint8 str[12];
-
- LongToString(str,number);
- Nokia5110_WriteEnStr(X,Y,str);
- }
- /* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针 */
- void Nokia5110_WriteEnStr(uint8 X, uint8 Y, uint8 *str)
- {
- Nokia5110_SetXY(X,Y); //设置起始地址
- while (*str != '\0') //连续写入字符串数据,直到检测到结束符
- {
- Nokia5110_WriteChar(*str++);
- }
- Nokia5110_Send(0,DC_DATA);
- }
- /*写一个中文字符*/
- void Nokia5110_WriteChinese(uint8 X, uint8 Y,uint8 GBK)
- {
- uint8 i;
- Nokia5110_SetXY(X,Y);
- for(i=0; i<12; i++)
- {
- Nokia5110_Send(Font12x16_chinese[GBK][i],DC_DATA);
- }
- //delay_us(10);
- Nokia5110_SetXY(X,Y+1);
- for(i=12; i<24; i++)
- {
- Nokia5110_Send(Font12x16_chinese[GBK][i],DC_DATA);
- }
- }
- /*写一幅图像到液晶*/
- void Nokia5110_WriteImage(void)
- {
- uint8 row,column;
- for(row=0; row<6; row++)
- {
- Nokia5110_SetXY(0,row);
- for(column=0; column<83; column++)
- {
- Nokia5110_Send(image1[row][column],DC_DATA);
- }
- }
- }
复制代码
所有资料51hei提供下载:
nokia5110.zip
(4.14 KB, 下载次数: 6)
|