[DemoCode下载] 解决keil 51单片机驱动12864液晶显示...

[复制链接]
1653|2
 楼主| neeringstu 发表于 2016-5-18 16:45 | 显示全部楼层 |阅读模式
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit lcd_rs=P3^5;    //数据命令选择口
  6. sbit lcd_rw=P3^6;    //读写选择口
  7. sbit lcd_en=P3^4;    //使能信号
  8. sbit lcd_psb=P3^7;    //串/并选择端
  9. sbit wela=P2^6;
  10. sbit dula=P2^7;
  11. sbit diola=P2^5;
  12. uchar i;

  13. uchar code time3[]={"一二三四五六七"};

  14. void delay(uint z)         //延时函数
  15. {
  16. uint x,y;
  17. for(x=z;x>0;x--)
  18.   for(y=110;y>0;y--);
  19. }
  20. void delay4us()       //短延时
  21. {
  22. _nop_();
  23. _nop_();
  24. _nop_();
  25. _nop_();
  26. }
  27. /*              检查LCD忙状态               */
  28. /*lcd_busy为1时为忙,为0时为闲,可写指令数据*/
  29. void lcd_busy()
  30. {

  31. uchar busy;
  32. do
  33. {
  34.   lcd_en=0;
  35.   lcd_rs=0;
  36.   lcd_rw=1;
  37.   delay4us();
  38.   lcd_en=1;
  39.   busy=P0;        //在使能端的上升沿读走数据
  40.   delay4us();
  41.   lcd_en=0;
  42. }
  43. while(busy&0x80);
  44. }
  45. /*写指令到12864:RS=L,RW=L,E=高脉冲*/
  46. void write_command(uchar cmd)
  47. {
  48. lcd_busy();
  49. lcd_rs=0;
  50. lcd_rw=0;
  51. lcd_en=0;
  52. P0=cmd;
  53. delay4us();
  54. lcd_en=1;
  55. delay4us();
  56. lcd_en=0;
  57. }
  58. /*写显示数据到12864:RS=H,RW=L,E=高脉冲*/
  59. void write_data(uchar dat)
  60. {
  61. lcd_busy();
  62. lcd_rs=1;
  63. lcd_rw=0;
  64. lcd_en=0;
  65. P0=dat;
  66. delay4us();
  67. lcd_en=1;
  68. delay4us();
  69. lcd_en=0;
  70. }
  71. /*设定显示位置*/
  72. void lcd_position(uchar x,uchar y)
  73. {

  74. if(x==0)
  75.   write_command(0x80+y);
  76. else if (x==1)
  77.      write_command(0x90+y);
  78.     else if (x==2)
  79.      write_command(0x88+y);
  80.     else if (x==3)
  81.      write_command(0x98+y);
  82. }


 楼主| neeringstu 发表于 2016-5-18 17:08 | 显示全部楼层
  1. /*初始化12864*/
  2. void lcd_init()
  3. {

  4. dula=0;
  5. wela=0;
  6. diola=0;
  7. lcd_psb=1;      //并口方式
  8. delay(10);
  9. write_command(0x30);           //基本操作指令
  10. delay(5);

  11. write_command(0x0c);               //显示开光标关
  12. delay(5);
  13. write_command(0x01);              //清除LCD显示内容
  14. delay(5);

  15. }
  16. void main()
  17. {

  18. lcd_init();
  19. delay(10);

  20. lcd_position(0,0);
  21. i=0;
  22. while(time3[ i]!='\0')
  23. {
  24.   write_data(time3[ i]);
  25.   i++;
  26. }
  27. write_data(time3[ i]);
  28. while(1);

  29. }
稳稳の幸福 发表于 2016-5-18 22:00 | 显示全部楼层
我有个疑问,就是新唐的51内核单片机,头文件可以是REG52.h吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

235

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部