标题: stc89c52单片机控制12864(ST7920) 程序没报错可是不显示,在线等,急急急 [打印本页]

作者: jing2587    时间: 2015-5-10 22:27
标题: stc89c52单片机控制12864(ST7920) 程序没报错可是不显示,在线等,急急急

#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

作者: 任何人个个发    时间: 2015-5-10 23:29
tongqiu
作者: DanielLuo    时间: 2015-5-11 01:32
没有;号
作者: jing2587    时间: 2015-5-11 11:07
DanielLuo 发表于 2015-5-11 01:32
没有;号

我好想都写了啊。。。
作者: zhanghanli007    时间: 2015-7-13 16:12
带字库的还是不带字库的啊?我也弄了好久都点不亮
作者: 海阔天空2015    时间: 2015-7-13 23:10
带字库的驱动很简单,感觉与1602一样,楼主还是自己尝试调试
作者: 云帝辰    时间: 2015-7-14 16:11
tongqiu
作者: 可爱的梦扬    时间: 2015-7-14 16:29
你这个程序要想显示文字的话,必须要有字库。我这儿有一个参考例子,你拿去看看。附带仿真图的

12864显示文字.zip

41.11 KB, 下载次数: 90


作者: chenguangyou    时间: 2015-7-14 22:22
还有可能是硬件上的问题,12864背部有个电位器,可以调试试。(在保证软件程序正确的前提下进行调这个电位器喔,可以先用别人正确的程序测试一下是否是硬件问题);
作者: sxlwh    时间: 2015-7-18 10:14
调过对比度了么?
要不就少分号




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1