STM8 LCD602显示子程序

来自丢石头百科
Admin讨论 | 贡献2019年11月19日 (二) 09:22的版本 (文本替换 - 替换“www.waveshare.net”为“{{SERVERNAME}}”)
<tbody></tbody>
软件设计

/********************************************************************* 微 雪 电 子 WaveShare <a class="Blue_2_12px_" href="http://wiki.diustou.com/" style="color: rgb(7, 66, 184);">http://www.waveShare.net   目 的: 建立LCD1602操作库 目标系统: 基于STM8单片机  应用软件: Cosmic CxSTM8  说 明: 若用于商业用途,请保留此段文字或注明代码来源 深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权 

                                                                                                                                          • /
                                                                                                                                            #define PORT_busy PB_DDR=0x00;PB_CR1=0xff;
                                                                                                                                            #define busy PB_IDR
                                                                                                                                            
                                                                                                                                            #define PORT_OUT PB_DDR=0xff;PB_CR1=0xff;
                                                                                                                                            #define PORT PB_ODR
                                                                                                                                            #define EN_SET sbi(PC_DDR,5);sbi(PC_CR1,5);sbi(PC_ODR,5);
                                                                                                                                            #define EN_CLR sbi(PC_DDR,5);sbi(PC_CR1,5);cbi(PC_ODR,5);
                                                                                                                                            
                                                                                                                                            #define RW_SET sbi(PC_DDR,6);sbi(PC_CR1,6);sbi(PC_ODR,6);
                                                                                                                                            #define RW_CLR sbi(PC_DDR,6);sbi(PC_CR1,6);cbi(PC_ODR,6);
                                                                                                                                            
                                                                                                                                            #define RS_SET sbi(PE_DDR,5);sbi(PE_CR1,5);sbi(PE_ODR,5);
                                                                                                                                            #define RS_CLR sbi(PE_DDR,5);sbi(PE_CR1,5);cbi(PE_ODR,5);
                                                                                                                                            
                                                                                                                                            _Bool lcd1602_busy(void)
                                                                                                                                            {
                                                                                                                                            	_Bool result;
                                                                                                                                            	RS_CLR;
                                                                                                                                            	RW_SET;
                                                                                                                                            	EN_SET;
                                                                                                                                            	delay(5);
                                                                                                                                            	PORT_busy;
                                                                                                                                            	result=(busy &amp; 0x80);
                                                                                                                                            	EN_CLR;
                                                                                                                                            	return result;
                                                                                                                                            }
                                                                                                                                            
                                                                                                                                            void lcd1602_write_com(u8 com)
                                                                                                                                            {
                                                                                                                                            	while(lcd1602_busy());
                                                                                                                                            	RS_CLR;
                                                                                                                                            	RW_CLR;
                                                                                                                                            	EN_CLR;
                                                                                                                                            	PORT_OUT;
                                                                                                                                            	PORT=com;
                                                                                                                                            	EN_SET;
                                                                                                                                            	delay(5);
                                                                                                                                            	EN_CLR;
                                                                                                                                            }
                                                                                                                                            
                                                                                                                                            void lcd1602_write_data(u8 dat)
                                                                                                                                            {
                                                                                                                                            	while(lcd1602_busy());
                                                                                                                                            	RS_SET;
                                                                                                                                            	RW_CLR;
                                                                                                                                            	EN_CLR;
                                                                                                                                            	PORT_OUT;
                                                                                                                                            	PORT=dat;
                                                                                                                                            	EN_SET;
                                                                                                                                            	delay(5);
                                                                                                                                            	EN_CLR;
                                                                                                                                            }
                                                                                                                                            
                                                                                                                                            void lcd1602_gotoxy(u8 x,u8 y)
                                                                                                                                            {
                                                                                                                                            	u8 add;
                                                                                                                                            	if(y==0)
                                                                                                                                            		add=0x80+x;
                                                                                                                                            	else
                                                                                                                                            		add=0xc0+x;
                                                                                                                                            	lcd1602_write_com(add);
                                                                                                                                            	
                                                                                                                                            }
                                                                                                                                            
                                                                                                                                            void lcd1602_init(void)
                                                                                                                                            {
                                                                                                                                            	delay(100);
                                                                                                                                            	lcd1602_write_com(0x38);
                                                                                                                                            	lcd1602_write_com(0x0c);
                                                                                                                                            	lcd1602_write_com(0x06);
                                                                                                                                            	lcd1602_write_com(0x01);
                                                                                                                                            }
                                                                                                                                            
                                                                                                                                            
                                                                                                                                            void lcd1602_display(void)
                                                                                                                                            {
                                                                                                                                            	for(num=0;num<12;num++)
                                                                                                                                            		{
                                                                                                                                            			lcd1602_write_data(table[num]);
                                                                                                                                            			delay(5);
                                                                                                                                            		}
                                                                                                                                            }