打印
[STM8]

STM8用LCD1602显示C程序出了点问题,哪位牛人给点指导一下啊

[复制链接]
3824|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
20091613310050|  楼主 | 2012-8-28 17:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"STM8S105C_S.h"
unsigned char table[]="mcustudio.com.cn";
unsigned char table1[]="TEL:159808545601";
/***************函数声明***************/
void delay(unsigned char x);   //声明延时函数
void lcd_init(void);
void lcdwrcom(unsigned char cdat);//写指令数据到LCD  
void lcdwrdata(unsigned char dat);//写数据到LCD
/***************主函数*****************/
main(void)
{
     unsigned char n;
    //CLK_SWR= 0xE1;//选择芯片内部的 16MHZ 的 RC 振荡器为 主时钟
    //CLK_CKDIVR= 0x08;//主时钟=16MHZ/2
                     //CPU 时钟 =主时钟= 8MHZ
   
  PD_DDR = 0xFF;      //设置PD为LCD1602   8位数据输出口
    PD_CR1 = 0xFF;      
    PD_CR2 = 0x00;      

    PE_DDR = 0x25;      //设置rs=PE0;//H数据,L命令,rw=PE2;lcden=PE5;
    PE_CR1 = 0x25;      //设置IO口E为推挽方式
    PE_CR2 = 0x00;         
  PE_ODR = 0x00;      //设置输出寄存器的输出数值,初始化
  PD_ODR = 0x00;
   
  PE_ODR&= 0xFB;      //rw=0;
  



delay(200);
delay(200);
PE_ODR&= 0xDF;     //lcden=0;
lcd_init();
  lcdwrcom(0x00|0x80);
  for(n=0;n<16;n++)
  {
   lcdwrdata(table[n]);
   delay(10);
  }
  
  
  lcdwrcom(0x40|0x80);
  for(n=0;n<16;n++)
  {
   lcdwrdata(table1[n]);
   delay(10);
   }

while(1)
   {
  }
}
/************延时子程序************************/
void delay(unsigned char x)
{
   unsigned int y;
   for(;x>0;x--)
      {         
       for(y=100;y>0;y--)
       {};
    }
}
/************写数据到LCD子程序************************/
void lcdwrdata(unsigned char dat)//写数据到LCD
{
//dat=((dat&0x01)<<7)|((dat&0x02)<<5)|((dat&0x04)<<3)|((dat&0x08)<<1)|((dat&0x10)>>1)|((dat&0x20)>>3)|((dat&0x40)>>5)|((dat&0x80)>>7);
PE_ODR|=0x01;             //写数据时RS拉高

PD_ODR=dat;
delay(1);
PE_ODR|=0x20;       //lcden=1;
delay(20);
PE_ODR&=0xDF;           //lcden=0;
delay(20);
}
/************写指令数据到LCD子程序************************/
void lcdwrcom(unsigned char cdat)//写指令数据到LCD  
{
    //cdat=((cdat&0x01)<<7)|((cdat&0x02)<<5)|((cdat&0x04)<<3)|((cdat&0x08)<<1)|((cdat&0x10)>>1)|((cdat&0x20)>>3)|((cdat&0x40)>>5)|((cdat&0x80)>>7);
    PE_ODR&=0xFE;            //写指令时RS拉低
    PD_ODR=cdat;
  delay(1);
  PE_ODR|=0x20;       //lcden=1;
   delay(20);//不加此延时将导致不能写入指令,但能写入显示数据
   PE_ODR&=0xDF;
   delay(20);
  
}
/************LCD初始化子程序************************/
void lcd_init()
{
lcdwrcom(0x38);//0x38设置显示模式为:16X2 显示,5X7 点阵,8 位数据接口
lcdwrcom(0x0c);//打开显示光标闪烁
lcdwrcom(0x06);//显示模式:0x04屏幕不移光标移;0x06光标移但只显示前面16个;0x07滚屏显示所有,但最后只会显示前16个
lcdwrcom(0x01);//
}
沙发
20091613310050|  楼主 | 2012-8-30 15:15 | 只看该作者
程序管脚定义错了,结果弄了两天,总算把STM8用LCD1602显示弄好了,哈哈!!!!!!!!!!!!

使用特权

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

本版积分规则

3

主题

27

帖子

0

粉丝