#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);//
} |