| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 410 人关注过本帖
标题:大家好,我有个问题 我在 89c52 上面好用,但是转移到 stc12c5 上面就乱了。 ...
只看楼主 加入收藏
hongba1988
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-9-25
收藏
 问题点数:0 回复次数:1 
大家好,我有个问题 我在 89c52 上面好用,但是转移到 stc12c5 上面就乱了。
之前在89c52上面写的程序,一切正常,在12864屏幕上面显示四行字,但是换成12系列单片机之后就全是乱码了,所有的延时我都延长了,还是不行,请指教。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define Lcd_IO P0
#define Commd 0
#define Data 1
sbit LCDRS=P3^4;   //12864是数据选择端还是指令选择端
sbit LCDRW=P3^5;   //12864的读写操作端
sbit LCDEN=P3^6;   //12864的使能端
sbit LCDPSB=P3^7;   //选择12864是并行输入还是串行输入
sbit wei=P2^7;    //定义数码管的位选
sbit duan=P2^6;    //定义数码管的段选

void DelayUs(uint iNumber)
{
  for(iNumber=0;iNumber>0;iNumber--);
}

void DelayMs(uint Delay_MS)
{
 uint iNumber,iValue;
 for(iNumber=0;iNumber<Delay_MS;iNumber++)
 {
     iValue=107;
     while(iValue--);
 }
}

void WriteLCD_CommdData(uchar cCommd,uchar cData)
{
  if(cCommd)
  LCDRS=1;            //数据
  else LCDRS=0;       //命令
  Lcd_IO=cData;
  LCDRW=0;
  LCDEN=1;
  DelayUs(30);
  LCDEN=0;
}

void Init_LCD()  //液晶初始化
{
  DelayUs(10);         //外部复位
  LCDPSB=1;     //选择12864为并行模式
  WriteLCD_CommdData(Commd,0x30);   //基本指令格式
  DelayUs(30);
  WriteLCD_CommdData(Commd,0x01);   //液晶清屏
  DelayMs(30);   
  WriteLCD_CommdData(Commd,0x06);   //设置显示格式,光标位置
  WriteLCD_CommdData(Commd,0x0c);
}

void LCD_Position(uchar cX,uchar cY)  //设置显示坐标
{           
  uint iLine;
  switch(cY)  //判断要显示在那一行
  {
    case 0:iLine=0x00;break;
    case 1:iLine=0x10;break;
    case 2:iLine=0x08;break;
    case 3:iLine=0x18;break;
    default :break;
  }
  WriteLCD_CommdData(Commd,0x80+iLine+cX); //把地址写给12864
}

void Write_String(uchar *cString)
{
  while(*cString!='\0')  //判断是否到了字符串末尾
  {
    WriteLCD_CommdData(Data,*cString);
    cString++;
  }
}

void main()
{
  wei=1;
  P0=0XFF;
  wei=0;
  duan=1;
  P0=0x00;
  duan=0;
  Init_LCD();         //初始化12864液晶
  LCD_Position(0,0);  //定义显示在第一行的字符串的位置
  Write_String("1234566788"); //写入要显示的字符串
  LCD_Position(0,1);  //定义显示在第二行的字符串的位置
  Write_String("哈尔滨香坊区");//写入要显示的字符串
  LCD_Position(0,2);  //定义显示在第三行的字符串的位置
  Write_String("jackliao");  //写入要显示的字符串
  LCD_Position(0,3);  //定义显示在第四行的字符串的位置
  Write_String(" 12864 LCD test"); //写入要显示的字符串
  while(1);
}
搜索更多相关主题的帖子: include 单片机 数码管 延长 
2014-09-25 21:54
hjxlj
Rank: 10Rank: 10Rank: 10
来 自:江西
等 级:贵宾
威 望:14
帖 子:292
专家分:1519
注 册:2013-6-25
收藏
得分:0 
这2种属于不同系列的单片机,它们之间内部的寄存器结构,以及存储器访问方式等都不同,当然不能将一种单片机的代码拿到另一种单片机上直接运行了。举个例子,你有兄弟姐妹6人,难道别人也必须刚好和你一样,也是兄弟姐妹6人吗?凭什么别人就不能比你少或者多几个兄弟姐妹呢?而且,别人的兄弟姐妹就必须与你的兄弟姐妹同名同姓吗?很显然不可能。

本人QQ:775420425
2014-09-26 11:25
快速回复:大家好,我有个问题 我在 89c52 上面好用,但是转移到 stc12c5 上面就 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023571 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved