找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5867|回复: 10
打印 上一主题 下一主题
收起左侧

stc89c52单片机控制12864(ST7920) 程序没报错可是不显示,在线等,急急急

  [复制链接]
跳转到指定楼层
楼主
ID:79584 发表于 2015-5-10 22:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include <reg51.h>
#include <intrins.h>
#include <string.h>
#include <stdlib.h>

#define uchar unsigned char
#define uint  unsigned int
/*端口定义*/
#define LCD_data P0
   sbit LCD_RS = P3^5;
   sbit LCD_RW = P3^6;
   sbit LCD_EN = P3^4;
   sbit LCD_PSB = P3^7;
   sbit wela = P2^6;
   sbit dula = P2^7;

   uchar dis1[10];
   uchar dis2[]={"aaaaa"};
   uchar dis3[]={"马静"};
   uchar dis4[]={"欢迎各位"};

   void delay_lms(uint x)
   {
   uint i,j;
   for(j=0;j<x;j++)
       for(i=0;i<110;i++);
   }
   /*写指令数据到LCD*/
   /*RS=L, RW=L, E=高脉冲, D0-D7=指令码*/
   void write_cmd(uchar cmd){
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_EN = 0;
    P0 = cmd;
    delay_lms(5);
    LCD_EN = 1;
    delay_lms(5);
    LCD_EN = 0;
   }
   /*写显示数据到LCD*/
   /*RS=H, RW=L, E=高脉冲, D0-D7=数据*/
   void write_dat(uchar dat){
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_EN = 0;
    P0 = dat;
    delay_lms(5);
    LCD_EN = 1;
    delay_lms(5);
    LCD_EN = 0;
   }
   /*设定显示位置*/
   void lcd_pos(uchar X,uchar Y){
   uchar pos;
   if(X == 0){
     X = 0x80;
   }else if(X == 1){
        X = 0x90;
   }else if(X == 2){
     X = 0x88;
   }else if(X == 3){
     X = 0x98;
   }
   pos = X + Y;
   write_cmd(pos);  //显示地址
   }
   void makerand(){
   uint ran;
   ran = rand();
   dis1[0] = ran/10000 + 0x30;
   dis1[1] = ran%10000/10000 + 0x30;
   dis1[2] = ran%1000/100 + 0x30;
   dis1[3] = ran%100/10 + 0x30;
   dis1[4] = ran%10 + 0x30;
   ran = rand();
    dis1[5] = ran/10000 + 0x30;
    dis1[6] = ran%10000/10000 + 0x30;
    dis1[7] = ran%1000/100 + 0x30;
    dis1[8] = ran%100/10 + 0x30;
    dis1[9] = ran%10 + 0x30;
   }
   /*LCD初始化设定*/
   void lcd_init(){
    LCD_PSB = 1;  //并口方式
    write_cmd(0x30);  //基本指令操作
    delay_lms(5);
    write_cmd(0x0C);   //显示开,关光标
    delay_lms(5);
    write_cmd(0x01);    //清除LCD显示内容
    delay_lms(5);
   }
   /*主程序*/
   main(){
    uchar i;
    wela = 0;
    dula = 0;
    delay_lms(10);
    lcd_init();
    lcd_pos(1,0);
    i = 0;
    while(dis2[i]!='\0'){
       write_dat(dis2[i]);  //显示字符
       i++;
    }
    lcd_pos(2,0);
    i=0;
    while(dis3[i]!='\0'){
       write_dat(dis3[i]);     //显示字符
       i++;
    }
    lcd_pos(3,0);
    i=0;
    while(dis4[i]!='\0'){
       write_dat(dis4[i]);     //显示字符
       i++;
    }
    while(1){
      lcd_pos(0,0);
      makerand();                        
      for(i=0;i<10;i++){
             write_dat(dis1[i]);
      }
    }
   }


IMG_0397.JPG (215.88 KB, 下载次数: 114)

IMG_0397.JPG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

受到警告 沙发
ID:79585 发表于 2015-5-10 23:29 | 只看该作者
tongqiu
回复

使用道具 举报

板凳
ID:79597 发表于 2015-5-11 01:32 | 只看该作者
没有;号

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:79584 发表于 2015-5-11 11:07 | 只看该作者

我好想都写了啊。。。
回复

使用道具 举报

5#
ID:85547 发表于 2015-7-13 16:12 | 只看该作者
带字库的还是不带字库的啊?我也弄了好久都点不亮

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:84566 发表于 2015-7-13 23:10 | 只看该作者
带字库的驱动很简单,感觉与1602一样,楼主还是自己尝试调试

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:85654 发表于 2015-7-14 16:11 | 只看该作者
tongqiu
回复

使用道具 举报

8#
ID:85124 发表于 2015-7-14 16:29 | 只看该作者
你这个程序要想显示文字的话,必须要有字库。我这儿有一个参考例子,你拿去看看。附带仿真图的

12864显示文字.zip

41.11 KB, 下载次数: 90

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:82476 发表于 2015-7-14 22:22 | 只看该作者
还有可能是硬件上的问题,12864背部有个电位器,可以调试试。(在保证软件程序正确的前提下进行调这个电位器喔,可以先用别人正确的程序测试一下是否是硬件问题);

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

10#
ID:84598 发表于 2015-7-18 10:14 | 只看该作者
调过对比度了么?
要不就少分号
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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