找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 4252|回复: 0
收起左侧

基于51单片机12864液晶显示

[复制链接]
ID:309715 发表于 2018-8-20 10:56 | 显示全部楼层 |阅读模式
基于51单片机12864液晶显示
  1. /*========================LCD12864液晶并行驱动程序==========================
  2. 程序名称:12864液晶驱动程序(并行模式)
  3. ============================================================================*/
  4. #include <at89x52.h>
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. uchar t,p;
  8. /********************************引脚定义***********************************/
  9. #define RS P1_0 //RS=0为执行指令;RS=1为执行数据;
  10. #define RW P1_1 //读写
  11. #define E P1_2 //使能
  12. #define PSB P1_3 //低电平(串口驱动);高电平(并口驱动)
  13. #define RST P1_4 //LCD复位
  14. /********************************定义数组***********************************/
  15. uchar code title[] = {"LCD 并行接口测试"};
  16. uchar code website[]={"qwertyuioopplkjh"};
  17. uchar code dig[]={"0123456789"};
  18. uchar code dig2[]={0,1,2,3,':'}; //
  19. /*******************************相关子程序**********************************/
  20. void Init_lcd(); //初始化液晶
  21. void lcd_busy(); //忙标志查询
  22. void delay100us(); //100us延时程序
  23. void write(uchar x,uchar Data); //写单字节函数
  24. void Show(uchar address,uchar L,uchar STR1[]);
  25. void Show_dig(uchar address,uint number);
  26. /*******************************延时子程序**********************************/
  27. void delay100(int n)
  28. {
  29. unsigned char i;
  30. while(n--)
  31. for(i=0;i<100;i++);
  32. }
  33. /*******************************LCD 忙标志查询******************************/
  34. void lcd_busy(void)
  35. {
  36. uchar busy;
  37. P0=0xff;
  38. RS=0;
  39. RW=1;
  40. do{
  41. E=1;
  42. busy=P0;
  43. E=0;
  44. }
  45. while(busy>0x7f);
  46. }
  47. /*****************************写指令或数据**********************************/
  48. void write(uchar x,uchar Data)
  49. {
  50. lcd_busy(); //忙查询
  51. if(x==0)
  52. {
  53. RS=0;
  54. RW=0; //写单字节命令字
  55. }
  56. else if(x==1)
  57. {
  58. RS=1;
  59. RW=0; //写单字节数据
  60. }
  61. E=1;
  62. P0=Data;
  63. E=0;
  64. P0=0xff;
  65. }
  66. /*******************************初始化LCD **********************************/
  67. void Init_lcd(void)
  68. {
  69. delay100(20); //启动等待,等LCM讲入工作状态
  70. PSB=1; //并口驱动模式
  71. RST=0;
  72. delay100(4);
  73. RST=1; // 复位LCD
  74. write(0,0x30); //8 位介面,基本指令集
  75. write(0,0x0c); //显示打开,光标关,反白关
  76. write(0,0x01); //清屏,将DDRAM的地址计数器归零
  77. }
  78. /*******汉字和字符显示,参数入口:Show(地址,显示宽度,汉字数组)************/
  79. void Show(uchar address,uchar L,uchar STR1[])
  80. {
  81. uchar i;
  82. write(0,address);
  83. for(i=0;i<L;i++)
  84. write(1,STR1[i]);
  85. }
  86. /************纯阿拉伯数字显示,参数入口:Show_dig(地址,数字)**************/
  87. void Show_dig(uchar address,uint number)
  88. {
  89. uchar shi,ge;
  90. shi=number/10;
  91. ge=number%10;
  92. write(0,address);
  93. delay100(20);
  94. write(1,dig[shi]);
  95. delay100(20);
  96. wri
  97. te(1,dig[ge]);
  98. }
  99. /************************************主程序**********************************/
  100. void main(void)
  101. {
  102. Init_lcd();
  103. TMOD=0X01;
  104. TH0=0xdc;
  105. TL0=0x00;
  106. ET0=1;
  107. TR0=1;
  108. EA=1;
  109. P3_6=0;
  110. delay100(30);
  111. Show(0x83,4,"梁浩"); //写数组里的内容
  112. write(0,0x0d);
  113. delay100(30);
  114. Show(0x90,16,"电子科技协会会长");
  115. delay100(30);
  116. Show(0x88,16,"TEL 15281642659"); //写英文
  117. delay100(30);
  118. while(1)
  119. {
  120. Show_dig(0x99,p); //写实时数组
  121. }
  122. }
  123. void exter() interrupt 1
  124. {
  125. TH0=0xdc;
  126. TL0=0x00;
  127. t++;
  128. if(t==20)
  129. {
  130. t=0;
  131. p++;
  132. }
  133. if(p==60)
  134. p=0;
  135. }
  136. /***************************************end***********************************/

复制代码


51单片机-12864液晶显示程序.doc

36.5 KB, 下载次数: 36, 下载积分: 黑币 -5

回复

举报

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

本版积分规则

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

Powered by 单片机教程网

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