找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5222|回复: 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
回复

使用道具 举报

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 | 显示全部楼层

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

使用道具 举报

ID:85547 发表于 2015-7-13 16:12 | 显示全部楼层
带字库的还是不带字库的啊?我也弄了好久都点不亮

评分

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

查看全部评分

回复

使用道具 举报

ID:84566 发表于 2015-7-13 23:10 | 显示全部楼层
带字库的驱动很简单,感觉与1602一样,楼主还是自己尝试调试

评分

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

查看全部评分

回复

使用道具 举报

ID:85654 发表于 2015-7-14 16:11 | 显示全部楼层
tongqiu
回复

使用道具 举报

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

12864显示文字.zip

41.11 KB, 下载次数: 90

评分

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

查看全部评分

回复

使用道具 举报

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

评分

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

查看全部评分

回复

使用道具 举报

ID:84598 发表于 2015-7-18 10:14 | 显示全部楼层
调过对比度了么?
要不就少分号
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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