求诺基亚5110液晶显示程序

2019-07-16 06:50发布

谁有诺基亚5110液晶显示的C程序啊?多谢啦。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
assingle
1楼-- · 2019-07-16 09:09
诺基亚5110显示屏51单片机驱动程序
  1. #include <stc.h>
  2. #include "intrins.h"                      //_nop_();延时函数用
  3. #include <dmb.h>                          //字符代码表
  4. #define uchar unsigned char
  5. #define uint unsigned int


  6. sbit    sce = P3^4; //片选
  7. sbit    res = P0^0; //复位,0复位
  8. sbit    dc = P3^5; //1写数据,0写指令
  9. sbit    sdin = P3^7; //数据
  10. sbit    sclk = P3^6; //时钟
  11. uint data temp_data[2]={0x00,0x00};             //读出温度暂放
  12. //================18b20数据口定义===============
  13. sbit     DQ=P0^0;                               //温度输入口
  14. uint     h;
  15. uint     temp;
  16. unsigned char presence,flash=0;
  17. /*****************延时函数*************************/
  18. void delay(uint t)
  19. {
  20. for (;t>0;t--);
  21. }
  22. //================延时函数=====================
  23. void delay_1ms(void)//1ms延时函数
  24. {
  25. unsigned int i;
  26. for (i=0;i<500;i++);
  27. }

  28. /*---------------lcd显示函数开始----------------
  29. LCD_write_byte: 使用SPI接口写数据到LCD
  30. 输入参数:dt:写入的数据;
  31. command :写数据/命令选择;
  32. 编写日期:20080918
  33. ----------------------------------------------*/
  34. void LCD_write_byte(unsigned char dt, unsigned char command)
  35. {
  36. unsigned char i;
  37. sce=0;
  38. dc=command;
  39. for(i=0;i<8;i++)
  40. {
  41.    if(dt&0x80)
  42.    sdin=1;
  43.    else
  44.    sdin=0;
  45.    dt=dt<<1;   
  46.    sclk=0;   
  47.    sclk=1;
  48. }
  49. dc=1;
  50. sce=1;
  51. sdin=1;
  52. }
  53. /*---------------------------------------
  54. LCD_init: 5110LCD初始化
  55. 编写日期:20080918
  56. ----------------------------------------- */
  57. void LCD_init(void)
  58. {
  59. res=0;   
  60.    delay_1ms();
  61.    res=1;   
  62. LCD_write_byte(0x21,0);//初始化Lcd,功能设定使用扩充指令
  63. LCD_write_byte(0xd0,0);//设定液晶偏置电压
  64. LCD_write_byte(0x20,0);//使用基本指令
  65. LCD_write_byte(0x0C,0);//设定显示模式,正常显示
  66. }
  67. /*-------------------------------------------
  68. LCD_set_XY: 设置LCD坐标函数
  69. 输入参数:X:0-83 Y:0-5
  70. 编写日期:20080918
  71. ---------------------------------------------*/
  72. void LCD_set_XY(unsigned char X, unsigned char Y)
  73. {
  74. LCD_write_byte(0x40 | Y, 0);// column
  75. LCD_write_byte(0x80 | X, 0);// row
  76. }
  77. /*------------------------------------------
  78. LCD_clear: LCD清屏函数
  79. 编写日期:20080918
  80. --------------------------------------------*/
  81. void LCD_clear(void)
  82. {
  83. unsigned char t;
  84. unsigned char k;
  85. LCD_set_XY(0,0);
  86. for(t=0;t<6;t++)
  87. {
  88.    for(k=0;k<84;k++)
  89.    {
  90.    LCD_write_byte(0x00,1);   
  91.    }
  92. }
  93. }
  94. /*---------------------------------------------
  95. LCD_write_shu: 显示8(宽)*16(高)点阵列数字字母符号等半角类
  96. 输入参数:c:显示的字符;
  97. 编写日期:20080918
  98. -----------------------------------------------*/
  99. void LCD_write_shu(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
  100. {
  101. unsigned char i;   

  102. LCD_set_XY(row*8, page);// 列,页
  103. for(i=0; i<8;i++)
  104. {
  105. LCD_write_byte(shuzi[c*16+i],1);
  106. }
  107.    
  108.     LCD_set_XY(row*8, page+1);// 列,页
  109. for(i=8; i<16;i++)
  110. {
  111. LCD_write_byte(shuzi[c*16+i],1);
  112. }   
  113. }
  114. /*---------------------------------------------
  115. LCD_write_hanzi: 显示16(宽)*16(高)点阵列汉字等半角类
  116. 输入参数:c:显示的字符;
  117. 编写日期:20080918
  118. -----------------------------------------------*/
  119. void LCD_write_hanzi(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
  120. {
  121. unsigned char i;   

  122. LCD_set_XY(row*8, page);// 列,页
  123. for(i=0; i<16;i++)
  124. {
  125. LCD_write_byte(hanzi[c*32+i],1);
  126. }

  127.     LCD_set_XY(row*8, page+1);// 列,页
  128. for(i=16; i<32;i++)
  129. {
  130. LCD_write_byte(hanzi[c*32+i],1);
  131. }
  132. }
  133. //=================lcd显示函数结束================

  134. //=================18b20相关函数开始==============
  135. /****************DS18B20复位函数************************/
  136. ow_reset(void)
  137. {
  138. char presence=1;
  139. while(presence)
  140. {
  141. while(presence)
  142.    {
  143.     DQ=1;_nop_();_nop_(); //从高拉倒低
  144. DQ=0;                                       
  145. delay(50);                //550 us
  146. DQ=1;                                         
  147. delay(6);                 //66 us
  148. presence=DQ;              //presence=0 复位成功,继续下一步
  149.    }
  150.    delay(45);             //延时500 us
  151.    presence=~DQ;         
  152. }
  153. DQ=1;                     //拉高电平
  154. }
  155. //
  156. //
  157. /****************DS18B20写命令函数************************/
  158. void write_byte(uchar val)                //向1-WIRE 总线上写1个字节
  159. {
  160. uchar i;
  161. for(i=8;i>0;i--)
  162. {
  163.    DQ=1;_nop_();_nop_();                  //从高拉倒低
  164.    DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 us
  165.    DQ=val&0x01;                           //最低位移出
  166.    delay(6);                              //66 us
  167.    val=val/2;                             //右移1位
  168.    }
  169.    DQ=1;
  170.    delay(1);
  171. }

  172. /****************DS18B20读1字节函数************************/
  173. uchar read_byte(void) //从总线上取1个字节
  174. {
  175. uchar i;
  176. uchar value=0;
  177. for(i=8;i>0;i--)
  178. {
  179. DQ=1;_nop_();_nop_();
  180. value>>=1;
  181. DQ=0;_nop_();_nop_();_nop_();_nop_();         //4 us
  182. DQ=1;_nop_();_nop_();_nop_();_nop_();         //4 us
  183. if(DQ)value|=0x80;
  184. delay(6);                                     //66 us
  185. }
  186. DQ=1;
  187. return(value);
  188. }
  189. //
  190. /****************读出温度函数************************/
  191. read_temp()
  192. {
  193.    ow_reset();                           //总线复位
  194.    if(presence==1)         
  195.    {flash=1;}                           //DS18B20不正常,蜂鸣器报警
  196.     delay(200);
  197. write_byte(0xcc);                     //发命令
  198. write_byte(0x44);                     //发转换命令
  199. ow_reset();
  200. delay(1);
  201. write_byte(0xcc);                     //发命令
  202. write_byte(0xbe);
  203. temp_data[0]=read_byte();             //读温度值的第字节
  204. temp_data[1]=read_byte();             //读温度值的高字节
  205. temp=temp_data[1];
  206. temp<<=8;                                                
  207. temp=temp|temp_data[0];               // 两字节合成一个整型变量。
  208. return temp;                          //返回温度值
  209. }
  210. //=================18b20相关函数结束==============
  211. //=================主函数=========================
  212. void main(void)
  213. {
  214.    unsigned char k;
  215. res=0;
  216. for(k=0;k<250;k++);
  217. res=1;     
  218.    LCD_init(); //初始化LCD模块
  219. LCD_clear(); //清屏幕
  220. LCD_write_hanzi(1,0,0); //
  221. LCD_write_hanzi(3,0,1); //
  222. LCD_write_hanzi(5,0,2); //
  223. LCD_write_hanzi(7,0,3); //

  224. LCD_write_hanzi(1,2,4); //
  225. LCD_write_hanzi(4,2,5); //
  226. LCD_write_hanzi(7,2,6); //

  227.      
  228. LCD_write_shu(0,4,5);    //
  229. LCD_write_shu(1,4,1);   //
  230. LCD_write_shu(2,4,35);   //
  231. LCD_write_shu(3,4,33);   //
  232. LCD_write_shu(4,4,13);   //
  233. LCD_write_shu(5,4,25);   //
  234. LCD_write_shu(6,4,19);   //
  235. LCD_write_shu(7,4,45);   //
  236. LCD_write_shu(8,4,12);   //
  237. LCD_write_shu(9,4,23);   //
  238.    while(1)
  239.       {


  240.       }
  241. }
复制代码
诺基亚5110显示屏51单片机驱动程序
Flying_Heat
2楼-- · 2019-07-16 11:51
assingle 发表于 2011-8-11 10:34
诺基亚5110显示屏51单片机驱动程序

诺基亚5110显示屏51单片机驱动程序

非常感谢!!
huangjunbo
3楼-- · 2019-07-16 16:29
{:44:}顶!
Flying_Heat
4楼-- · 2019-07-16 18:01
huangjunbo 发表于 2011-8-12 11:25
顶!

多谢,我终于搞定了
huangjunbo
5楼-- · 2019-07-16 23:40
 精彩回答 2  元偷偷看……
朝夕
6楼-- · 2019-07-17 01:48
assingle 发表于 2011-8-11 10:34
诺基亚5110显示屏51单片机驱动程序

诺基亚5110显示屏51单片机驱动程序

1.
诺基亚5110中的
void LCD_Write_Byte(uchar DT,uchar Command)
{
SCE = 0; //片选有效,允许数据输入
DC = Command;
SPI0CN &= 0x01; // 1:使能SPI
SPI0DAT = DT;
while(!(SPI0CN&0x80));
DC = 1;
SCE = 1;
SDIN = 1;
}
中的
while(!(SPI0CN&0x80));
DC = 1;
SCE = 1;
SDIN = 1;
怎么理解?

2.
void LCD_Init(void)
{
    RES = 0;      
      delay(10);
      RES = 1;  
    LCD_Write_Byte(0x21,0);    //初始化LCD,功能设定使用扩充指令
    LCD_Write_Byte(0xd0,0);    //设定LCD偏置电压
    LCD_Write_Byte(0x20,0);    //使用基本指令
    LCD_Write_Byte(0x0C,0);    //设定显示模式,正常显示
}
像0x21,0xd0,0x20,0x0c我怎么知道它们代表的含义,
有没有资料可以查到它们代表的硬件含义

3.
void LCD_Write_HanZi(uchar Row,uchar Page,uchar c)     //Row:列   Page:页   c:字符
{
    uchar i;         
    LCD_Set_XY(Row*7,Page);       //列,页
    for(i=0;i<12;i++)
    {
        LCD_Write_Byte(HanZi[c*24+i],1);
    }   
    LCD_Set_XY(Row*7,Page+1);     //列,页
    for(i=12;i<24;i++)
    {
        LCD_Write_Byte(HanZi[c*24+i],1);
    }   
}
想12我知道代表的是一个汉字的宽度,那24代表的含义是什么?

一周热门 更多>