找回密码
 立即注册
查看: 713|回复: 10

大佬们,我写了一个LCD12864(不带字库)液晶程序显示不对,能不能帮忙指点下,谢谢了

[复制链接]
  • 打卡等级:常住居民II
  • 打卡总天数:97
  • 最近打卡:2025-06-19 08:39:32
已绑定手机

24

主题

183

回帖

937

积分

高级会员

积分
937
发表于 2024-6-14 10:10:33 | 显示全部楼层 |阅读模式
本帖最后由 欢迎哈哈哈3 于 2024-6-14 10:13 编辑

主程序


#include "main.h"
#include <intrins.h>
#include "LCD12864.h"//液晶显示程序
#include "ZIFU.h"//数字、汉字字模
#define     MAIN_Fosc       11059200UL   //定义主时钟

void setinoutport()//
{
        P0M1=0X00;P0M0=0X00;
        P2M1=0X00;P2M0&=0XFF;
        P1M1=0X00;P1M0=0X00;
        P3M1|=0XFC;P3M0|=0XFC;
}
void main()
{        
        setinoutport();
        init12864();
        clear12864();
        for(;;)
        {  
                play816(0,0,0,shuzi1[1],0);
                play816(1,7,0,shuzi1[0],0);//显示8x16大小的取模后数字         
          play1616(1,0,3,zhong,0);//显示16x16大小的取模汉字“钟”

        }
}


LCD12864.h

液晶显示程序

#ifndef _12864_H__
#define _12864_H__
#define uchar unsigned char
#define uint unsigned int

/************12864**************/
#define DBport  P0
sbit E=P2^3;  //使能端
sbit RW=P2^4;  //读写端
sbit RS=P2^5;  //数据命令端口
sbit CS1=P2^6;
sbit CS2=P2^7;
/****选屏****/
void choose12864(uchar i)//i是要写的屏.0是左屏,1是右屏,2是双屏
{
  switch (i)
  {
    case 0: CS1=0;CS2=1;break;
    case 1: CS1=1;CS2=0;break;
          case 2: CS1=0;CS2=0;break;
        default: break;
  }
}
/******写命令*****/
void cmd_w12864(uchar cmd)                //写命令
{
  RS=0;                    //指令模式
  RW=0;             //写模式
        DBport=cmd;
  E=1;
  
  E=0;
}
/****写数据******/
void  dat_w12864(uchar dat)
{
  RS=1;
  RW=0;
        DBport=dat;
  E=1;
  
  E=0;
}

/*****清屏*****/
void clear12864()
{
  uchar page,row,i;
  for(i=0;i<2;i++)
  {
          choose12864(i);
          for(page=0xb8;page<0xc0;page++)
          {
            cmd_w12864(page); //x地址设置,x地址需指令加1
                cmd_w12864(0x40); //y地址设置,y地址在写入数据后会加1
                for(row=0;row<64;row++)
                 {
                   dat_w12864(0x00);
                 }
          }
     }
}
/*******选择性清屏或填充(一次清除/填充一列的8点)*******/
void chsfill(uchar ch,uchar row,uchar page,uchar ads) //row=0~64、page=0~7
{
          choose12864(ch);                                          
          cmd_w12864(row+0x40);
          cmd_w12864(page+0xb8);
           dat_w12864(ads);
}
/***初始化****/
void init12864(void)
{
        
  cmd_w12864(0xc0); //设置起始行,此为0行开始。
  cmd_w12864(0x3f);  //显示器开,0x3e为关
}

/**8X16字符的显示*/
/******************
其中:        ch:要写的屏.0是左屏,1是右屏,2是双屏
                row:从哪一列开始显示,每一屏有0~7列
                page:从哪一行开始显示,0~3
                *adr:数据地址
*******************/
void play816(uchar ch,uchar row,uchar page,uchar *adr,bit stype)
{
        uchar i;
        choose12864(ch);
        page=page*2; //行地址(x地址)范围为0~7,每一个为8位,而字的竖向都占16位,所以page为0,2,4,6。
        row=row*8;//每个屏分成8个8位的列,每个字母数字占一列,每个汉字占两列
        if(stype==0)
        {
                cmd_w12864(row+0x40);
                cmd_w12864(page+0xb8);
                for(i=0;i<8;i++)
                {        
                         dat_w12864(*(adr+i));
                }
                  cmd_w12864(row+0x40);
                  cmd_w12864(page+0xb9);
                  for(i=8;i<16;i++)
                  {
                        dat_w12864(*(adr+i));
                  }
        }
        else
        {
                cmd_w12864(row+0x40);
                cmd_w12864(page+0xb8);
                for(i=0;i<8;i++)
                {        
                         dat_w12864(~(*(adr+i)));
                }
                  cmd_w12864(row+0x40);
                  cmd_w12864(page+0xb9);
                  for(i=8;i<16;i++)
                  {
                        dat_w12864(~(*(adr+i)));
                  }
        }
}

/**16X16显示**/
/******************
其中:        ch:要写的屏.0是左屏,1是右屏,2是双屏
                row:从哪一列开始显示,每一屏有0~7列
                page:从哪一行开始显示,0~3
                *adr:数据地址,字模软件里设置:CADB,右旋90度
数据输入方式:先上8行从左到右一列列输入,后下8行从左到右一列列输入
*******************/
void play1616(uchar ch,uchar row,uchar page,uchar *adr,bit stype)
{
  uchar i;
  choose12864(ch);
  page=page*2;                                          
  row=row*8;
        if(stype==0)
        {
                cmd_w12864(row+0x40);
                cmd_w12864(page+0xb8);
                for(i=0;i<16;i++)
                {
                        dat_w12864(*(adr+i));
                }
                cmd_w12864(row+0x40);
                cmd_w12864(page+0xb9);
                for(i=16;i<32;i++)
                {
                        dat_w12864(*(adr+i));
                }
  }
        else
        {
                cmd_w12864(row+0x40);
                cmd_w12864(page+0xb8);
                for(i=0;i<16;i++)
                {
                        dat_w12864(~(*(adr+i)));
                }
                cmd_w12864(row+0x40);
                cmd_w12864(page+0xb9);
                for(i=16;i<32;i++)
                {
                        dat_w12864(~(*(adr+i)));
                }
        }
}

#endif



ZIFU.h

字符取模

uchar code shuzi1[1][16]={/*8 x 16*/
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},/*"0",0*/
{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"1",1*/
}

uchar code zhong[]={         //钟字
0x80,0x40,0x70,0xCF,0x48,0x48,0x00,0xF0,0x10,0x10,0xFF,0x10,0x10,0xF8,0x10,0x00,
0x02,0x02,0x02,0x7F,0x22,0x12,0x00,0x07,0x02,0x02,0xFF,0x02,0x02,0x07,0x00,0x00};


回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:345
  • 最近打卡:2025-06-19 07:48:56
已绑定手机

4

主题

400

回帖

1909

积分

金牌会员

积分
1909
发表于 2024-7-25 11:09:57 | 显示全部楼层
能显示就说明接口没问题,主要看看时序有没有问题额,降低频率看看
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:97
  • 最近打卡:2025-06-19 08:39:32
已绑定手机

24

主题

183

回帖

937

积分

高级会员

积分
937
发表于 2024-7-26 11:01:38 | 显示全部楼层
wnag*** 发表于 2024-7-10 22:20
手头没有12864的,不能实验了,你说显示不对,那就是能显示?

是的,
谢谢了,已经解决了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-04-27 08:30:06

4

主题

13

回帖

145

积分

注册会员

积分
145
发表于 2024-12-3 09:10:31 | 显示全部楼层
请问是如何解决显示不对的?能否提供最新源码?谢谢!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:97
  • 最近打卡:2025-06-19 08:39:32
已绑定手机

24

主题

183

回帖

937

积分

高级会员

积分
937
发表于 2024-12-3 16:14:44 | 显示全部楼层
dq*** 发表于 2024-12-3 09:10
请问是如何解决显示不对的?能否提供最新源码?谢谢!

加延时的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:97
  • 最近打卡:2025-06-19 08:39:32
已绑定手机

24

主题

183

回帖

937

积分

高级会员

积分
937
发表于 2024-12-3 16:15:46 | 显示全部楼层

<br /> <br />

加延时

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:97
  • 最近打卡:2025-06-19 08:39:32
已绑定手机

24

主题

183

回帖

937

积分

高级会员

积分
937
发表于 2024-12-3 16:16:24 | 显示全部楼层
dq*** 发表于 2024-12-3 09:10
请问是如何解决显示不对的?能否提供最新源码?谢谢!

源码怎么传给您
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-04-27 08:30:06

4

主题

13

回帖

145

积分

注册会员

积分
145
发表于 2024-12-8 17:00:04 | 显示全部楼层

请您将源码发1913075212@qq.com,谢谢!

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:97
  • 最近打卡:2025-06-19 08:39:32
已绑定手机

24

主题

183

回帖

937

积分

高级会员

积分
937
发表于 2024-12-10 12:17:50 来自手机 | 显示全部楼层
dqjs 发表于 2024-12-8 17:00
请您将源码发1913075212@qq.com,谢谢!

好的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-04-27 08:30:06

4

主题

13

回帖

145

积分

注册会员

积分
145
发表于 2025-1-12 19:06:35 | 显示全部楼层
请您将源码发1913075212@qq.com,谢谢!
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-19 09:13 , Processed in 0.162842 second(s), 104 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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