搜索
bottom↓
回复: 4

pic16f877 单片机的1602液晶显示程序,移植到pic18f452

[复制链接]

出0入0汤圆

发表于 2010-1-29 14:39:36 | 显示全部楼层 |阅读模式
昨天用pic16f877仿真 1602的液晶显示的程序,可以通过,并且能用proteus仿真,得到结果,我用的控制引脚的 PORTA <1.3>,数据输了用的是PROTC 端口,但是同样的电路,当改了头文件为  #include<p18f452.h>时,再改用  18f452来仿真的时候就没有结果了,MAPLAB编译能通过,但有prteus仿真就没有显示了,是怎么回事,请高手帮忙看到,感谢了!!!

程序如下,16f877的

#include<pic.h>
#define uchar unsigned char
uchar const table[]="ABCDEFGHIJKLMNOP";  
uchar num;
uchar const  table1[]="B";
unsigned int ys;
void _delay_ms(char a) //毫秒级延时子函数
{
unsigned char i,j;
for(i=0;i<a;i++)
for(j=0;j<40;j++);

}


void enable(void) //控制命令的子函数
{
  PORTA = PORTA &0xfd;//1111 1101 a1置0
  PORTA =PORTA &0xfb; //1111 1011  a2置0
  PORTA  =PORTA &0xf7; //1111 0111  a3置0
  _delay_ms(9);
  PORTA  = PORTA | 0x08;//0000 1000  a3置1;给a3一个上升沿的脉冲

}

void main()
{
_delay_ms(9); //调用延时子程序
ADCON1=0x07; //设置RA口全部为普通数字IO口
TRISA=0x00; //定义RA口为输出
TRISC=0x00; //定义RC口为输出
_delay_ms(9);
PORTC=0x01; //清屏
enable();
PORTC=0x38; //设置8位2行5x7点阵
enable();
PORTC=0x0C; //设置显示器开、光标开、闪烁开
enable();
PORTC=0x06; //设置文字不动,光标自动右移
enable();
PORTC=0x80; //设置写入显示起始地址
enable();
PORTA=PORTA|0x02;
PORTA=PORTA&0xFB;
for (num=0;num<15;num++)
{
PORTC=table[num];  //显示的字符
PORTA  =PORTA &0xf7; //1111 0111  a3置0
for(ys=10;ys>0;ys--);
PORTA  = PORTA | 0x08;
}

enable();
PORTC=0xC0; //设置写入显示起始地址
enable();
PORTA=PORTA|0x02;
PORTA=PORTA&0xFB;
PORTC=table1[0];  //显示的字符
PORTA  =PORTA &0xf7; //1111 0111  a3置0
for(ys=10;ys>0;ys--);
PORTA  = PORTA | 0x08;

while(1); //while死循环
}


我是直接改了头文件就在了18f452上,MAPLAB编译能通过,但有prteus仿真就没有显示

出0入0汤圆

发表于 2010-1-29 14:50:46 | 显示全部楼层
1602的液晶不是PORTC=XX就可以的吧,是米字型LED数码管吗?CCSC的要吗

出0入0汤圆

 楼主| 发表于 2010-1-29 17:45:49 | 显示全部楼层
楼上的说是1602的液晶不是PORTC=XX这段程序错了?不过我用16f877是可以仿真的。但改用18f42就不行了,我想应该是单片机型号的问题吧

出0入0汤圆

 楼主| 发表于 2010-1-29 17:46:24 | 显示全部楼层
米字型LED数码管?不是啊,我用的1602液晶啊

出0入0汤圆

发表于 2010-7-23 21:33:43 | 显示全部楼层
#include<p18f452.h>
#define uchar unsigned char
#define uint unsigned int
#define lcdrs PORTDbits.RD4
#define lcdwr PORTDbits.RD5
#define lcden PORTAbits.RA2
uchar table[]="I LIKE mcu!";
uchar table1[]="WWW.TXMCU.COM";
/*void delayx10us(int x)               //当x<10时,Delay的真实值会比10us*x大10us左右
{  //当x>10时,Delay的真实值会比10us*x略大
int i=0;
for(i=0;i<x;i++)
{
Nop();Nop();Nop();Nop();
Nop();Nop();Nop();Nop();
Nop();Nop();Nop();Nop();
Nop();Nop();Nop();Nop();
}
}*/
void delay(uint x)
{
       uint a,b;
       for(a=x;a>0;a--)
         for(b=110;b>0;b--);
}

void write_com(uchar com ,uchar rss)
{      
       TRISD=0;
       PORTD=0;
      
       lcden=1;
       TRISD=0xf0;
      
       PORTD=com>>4;
       TRISD=0;
      lcdrs=rss;
       lcdwr=0;
      
      
      
       lcden=0;
      
      
       lcden=1;
       TRISD=0xf0;
       PORTD=com;
       TRISD=0;
       lcdrs=rss;
       lcdwr=0;
       lcden=0;
       /*if(((com&0XFC) == 0) && (rss== 0)) //无论是写数据还是写指令都要一定的时间
       delayx10us(2); //当0x01和0x02两个指令(清屏和归位)
       else  //所以时间要>1.6ms,所以延时长一点
      delayx10us(20); //其他都是40us左右
             }*/
       delay(20);
}

void init()
{  
       TRISA=0;
       PORTA=0;
       lcden=0;
       lcdwr=0;
       lcdrs=0;
       write_com(0x01,0);
       write_com(0x28,0);//0x28四线程;0x38八线程
       write_com(0x06,0);
       write_com(0x0c,0);//0x0c不显示光标;0x0e显示光标
       write_com(0x80+0x10,0);
       delay(2);
}

void main()
{
    uint i;
    init();
    for(i=0;i<11;i++){
        write_com(table,1);
        delay(20);
                                }
       write_com(0x80+0x50,0);
     for(i=0;i<13;i++){
         write_com(table1,1);
        delay(20);
                      }
        for(i=0;i<16;i++)
         {
              write_com(0x18,0);//0x18整屏左移
              delay(200);
         }
    while(1);
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 13:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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