找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3462|回复: 5
收起左侧

lcd12864中数组指针不会用 求大神解答

[复制链接]
ID:162142 发表于 2017-1-17 13:28 | 显示全部楼层 |阅读模式
5黑币
本帖最后由 krystalky 于 2017-1-17 13:30 编辑

#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcd_rs=P2^6;
sbit lcd_rw=P2^5;
sbit lcd_e=P2^7;
sbit lcd_psb=P3^2;
uchar code dis[64][16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0D,0x06,0x01,0x01,0x0F,0x01,0x01,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x0F,
0x1F,0x1F,0x39,0x02,0x06,0x06,0x01,0x01,0x03,0x03,0x07,0x0F,0x1D,0x39,0x19,0x01,
0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x54,0x94,0xBF,0x14,0x10,
0xFF,0x11,0x52,0x30,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x08,0x98,0x69,0x38,0x48,0x88,0x88,0x49,0x38,0x08,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,
0x0E,0x0E,0x0E,0x0E,0x1E,0x1E,0x3C,0x38,0x3B,0x3B,0x3F,0x7E,0xFC,0xFC,0xFC,0xFC,
0xFC,0xFC,0xD4,0xF4,0xF0,0xD0,0xD8,0xD8,0xF8,0xFC,0xFE,0xDD,0xDC,0xFF,0x79,0x7F,
0x6F,0x7F,0x3F,0x3F,0x1A,0x19,0x08,0x0C,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0xE0,0x00,0x40,
0x80,0x80,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x20,0xC2,0xD1,0x37,0x20,0x00,0x40,0x9C,0x54,0x54,0x5D,
0x40,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x20,0x30,0x38,0xF8,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC3,0xBF,0xFF,0x7B,
0xFD,0xE7,0xFB,0xF7,0x73,0xBC,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,
0x80,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x07,0x07,0x07,0x07,0x0F,0x1B,0x2F,0x3F,0x3F,0x7F,0xEA,0xFC,0xDC,0xB8,0xF8,0xC0,
0xA0,0xFC,0xF8,0x80,0x00,0x00,0x00,0x03,0x03,0x02,0x04,0x07,0x0C,0x07,0x07,0x07,
0x06,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x08,0x08,0xC8,0xFB,0xC8,0x08,0x08,
0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7E,0x7D,0xBD,0x75,
0xD5,0xA4,0xD9,0xC4,0xF0,0xF8,0xFC,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0xF8,0xD8,0x7A,0x3F,0x07,0x0F,0x02,0x00,0x00,
0x80,0x80,0x80,0x30,0xF0,0xF8,0x3C,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x40,0x80,0x00,0x80,0x00,0x40,
0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xC0,0xF8,0xB8,0x76,
0xBC,0xBF,0x5E,0x3F,0x3F,0x0D,0x05,0x0E,0x1D,0x1F,0x1E,0x19,0x18,0x18,0x13,0x11,
0x03,0x03,0x03,0x03,0x07,0x05,0x07,0x0A,0x1B,0x2E,0xBC,0xDF,0x6C,0xFC,0x0C,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x80,0xC0,0xC0,0x40,0x80,0x40,0xC0,0xA0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xC0,0xC0,0x80,0xC0,0xC0,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
uchar *address;
void delay_1ms(uint x)  //1ms
{
   uint i,j;
        for(j=0;j<x;j++)
           for(i=0;i<112;i++);
}
void lcd_wcmd(char cmd) //写指令数据到lcd
{
lcd_rs=0;
lcd_rw=0;
lcd_e=0;
P0=cmd;
delay_1ms(5);
lcd_e=1;
delay_1ms(5);
lcd_e=0;        
}
void lcd_wdat(char dat) //写显示数据到lcd
{
lcd_rs=1;
lcd_rw=0;
lcd_e=0;
P0=dat;
delay_1ms(5);
lcd_e=1;
delay_1ms(5);
lcd_e=0;        
}
void init_picture()
   {
    lcd_wcmd(0x36);
        lcd_wcmd(0x36);
        lcd_wcmd(0x3e);
        lcd_wcmd(0x01);
   }
void show_pic(uchar *address)
   {
    uchar i,j;
         for(i=0;i<32;i++)
            {
                 lcd_wcmd(0x80+i);
                 lcd_wcmd(0x80);
                 for(j=0;j<16;j++)
                    {
                         lcd_wdat(*address);
                         address++;
                        }
                }
                for(i=0;i<32;i++)
                   {
                    lcd_wcmd(0x80+i);
            lcd_wcmd(0x88);
                        for(j=0;j<16;j++)
                           {
                            lcd_wdat(*address);
                                address++;
                           }
                   }
   }         

void main()
    {
         init_picture();
         show_pic(dis[64][16]);
         while(1)
         {}
        }

最佳答案

查看完整内容

show_pic(dis[64][16]);改为show_pic(dis);
回复

使用道具 举报

ID:61002 发表于 2017-1-17 13:28 | 显示全部楼层
show_pic(dis[64][16]);改为show_pic(dis);
回复

使用道具 举报

ID:162142 发表于 2017-1-17 13:45 | 显示全部楼层
g753388438 发表于 2017-1-17 13:42
show_pic(dis[64][16]);改为show_pic(dis);

void show_pic(uchar *address)
   {
    uchar i,j;
         for(i=0;i<32;i++)
            {
                 lcd_wcmd(0x80+i);
                 lcd_wcmd(0x80);
                 for(j=0;j<16;j++)
                    {
                         lcd_wdat(*address);
                         address++;
                        }
                }
                for(i=0;i<32;i++)
                   {
                    lcd_wcmd(0x80+i);
            lcd_wcmd(0x88);
                        for(j=0;j<16;j++)
                           {
                            lcd_wdat(*address);
                                address++;
                           }
                   }
   }         这个函数对不对 还有对address的定义 总觉得不对

评分

参与人数 1黑币 +5 收起 理由
yhw123456 + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:116683 发表于 2017-1-17 14:08 | 显示全部楼层
uchar *address;这个声明去掉呢?
回复

使用道具 举报

ID:111634 发表于 2017-1-17 21:50 | 显示全部楼层
本帖最后由 zl2168 于 2017-1-17 21:54 编辑

为什么一定要用数组指针?不用就不行或程序臃肿吗?给你一个不用数组指针的12864显示案例参考。
LCD12864显示屏显示汉字



Proteus仿真一下,确认有效。
实验25 LCD12864显示屏显示.rar (60.48 KB, 下载次数: 20)
回复

使用道具 举报

ID:162142 发表于 2017-1-21 10:25 | 显示全部楼层
zl2168 发表于 2017-1-17 21:50
为什么一定要用数组指针?不用就不行或程序臃肿吗?给你一个不用数组指针的12864显示案例参考。
LCD12864 ...

恩我去掉了 不用也可以运行 最近我试着弄垂直滚屏 我的12864带字库用不带字库的程序烧录进去不显示 是不是在中间加开启绘图命令用GD写才行? 一直困惑不带字库和带字库的12864 写垂直滚动程序有什么不同的地方求赐教 困扰我好几天了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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