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