打印
[51单片机]

指针转换不合法 怎么更改程序

[复制链接]
768|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1154775677|  楼主 | 2018-12-16 14:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#include<intrins.h>

typedef unsigned char uchar;
typedef unsigned int uint;

sbit RS = P3^5;
sbit RW = P3^6;
sbit EN = P3^4;

#define LCD1602_A P0

void delay_ms(uint n)
{
uint i,y;
for(i=n;i>0;i--)
        {
  for(y=114;y>0;y--);
        }               
}


// º¯ÊýÃû£ºÅÐ溯Êý
// º¯Êý¹¦ÄÜ£ºÅжÏÒº¾§ÊÇ·ñ·±Ã¦
void Read_busy()
{
   uchar busy;
         LCD1602_A = 0xff;
         RS = 0;
         RW = 1;
        do{
           EN = 1;
                 busy = LCD1602_A;
                 EN = 0;//À­µÍʹÄÜ¶Ë ±ãÓÚÏ´ÎʹÓÃ
        }while(busy & 0x80);//²»ÎªÁã¾ÍÒ»Ö±Ö´ÐÐ
}
//º¯ÊýÃû³Æ£ºÐ´ÃüÁî
//º¯Êý¹¦ÄÜ£ºÏòLCDÖÐдÈëÃüÁî
void Write_cmd(uchar cmd)
  {
    Read_busy();
          RS = 0;
                RW = 0;
                LCD1602_A = cmd;
                EN = 1;
                EN = 0;
}
//º¯ÊýÃû³Æ£ºÐ´Êý¾Ý
//º¯Êý¹¦ÄÜ£ºÏòLCDÖÐдÈëÊý¾Ý
void Write_dat(uchar dat)
{
  Read_busy();
        RS = 1;
        RW = 0;
        LCD1602_A = dat;
        EN = 1;
        EN = 0;
}
//º¯ÊýÃû³Æ£ºÏÔʾһ¸ö×Ö·û
//º¯Êý¹¦ÄÜ£ºÔÚÖ¸¶¨µÄλÖÃÏÔʾһ¸ö×Ö·û
void Dis_onechar(uchar x, uchar y, uchar dat)
{
   if(y) x |= 0x40;
           x |= 0x80;
        Write_cmd(x);
        Write_dat(dat);
}
//º¯ÊýÃû³Æ£ºÏÔʾһ¸ö×Ö·û´®
//º¯Êý¹¦ÄÜ£ºÁ¬ÐøµÄÏÔʾ×Ö·û
void Dis_str(uchar x, uchar y, uchar *str)//strÊÇÖ¸Õë±äÁ¿(µØÖ·)*strÊÇÖ¸Õë»òµØÖ·ÀïµÄÄÚÈÝ
{
   if(y) x |= 0x40;
            x |= 0x80;
         Write_cmd(x);
         while(*str != '\0')
         {
            Write_dat(*str++);//Ö¸ÏòÏÂÒ»¸öµØÖ· µÄÄÚÈÝ
         }
}
//º¯ÊýÃû³Æ£ºLCD³õʼ»¯
//º¯Êý¹¦ÄÜ£º³õʼ»¯LCD
void Init_LCD1602()
{
   Write_cmd(0x38);//ÉèÖÃÏÔʾģʽ
         Write_cmd(0x0c);// ¿ªÏÔʾ ÏÔʾ¹â±ê ¹â±ê²»ÉÁ
         Write_cmd(0x06);//µØÖ·Ö¸Õë¼ÓÒ» ¹â±ê¼ÓÒ»
         Write_cmd(0x01);//ÇåÆÁ
}
void main()
{
        uchar i = 1;
        uchar *p;
        p = "Just do it ! ";
       
        Init_LCD1602();
        while(*p)
        {
  Dis_str(i,0,*p);
        i++;
        P++;
        delay_ms(1000);
        }
}

相关帖子

沙发
1154775677|  楼主 | 2018-12-16 14:52 | 只看该作者
注释复制过来就乱码了

使用特权

评论回复
板凳
mcu5i51| | 2018-12-16 15:09 | 只看该作者
void main()
{
        uchar i = 1;
                                uchar code str[]="Just do it ! ";
        uchar *p = str;
        
        Init_LCD1602();
        while(*p)
        {
                                        Dis_str(i,0,p);
                                        i++;
                                        p++;
                                        delay_ms(1000);
        }
}

使用特权

评论回复
地板
mcu5i51| | 2018-12-16 15:13 | 只看该作者
1. 用 char *p="...."的方式时p是不能修改的,改后就找不到这个位置了,你的程序只用了一次,当我没有说;
2.disp(u8,u8,u8*),你把*p传过去,谁知道指向哪里呀;

使用特权

评论回复
5
mcu5i51| | 2018-12-16 15:16 | 只看该作者
不对,main中是个循环,p++之后就想像不出显示什么来了;

使用特权

评论回复
6
1154775677|  楼主 | 2018-12-16 18:41 | 只看该作者
mcu5i51 发表于 2018-12-16 15:16
不对,main中是个循环,p++之后就想像不出显示什么来了;

感谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

48

帖子

0

粉丝