https://static.assets-stash.eet-china.com/album/old-resources/2008/10/1/d6fb148b-4e53-486b-814c-3883221c128f.rar
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
/////////////////////////////////////////////////
// 液晶显示控制库函数
// 函数如下
// lcd_init() ----- 初始化函数
// lcd_cmd(cmd) ----- 指令输出
// lcd_data(chr) ----- 单字符显示输出
// lcd_clear() ----- 全消去
/////////////////////////////////////////////////
#define mode 0 //低4位也全输出
#define input_x input_D
#define output_x output_D
#define set_tris_x set_tris_D
#define stb PIN_D3 //Enable 信号引脚指定
#define rs PIN_D2 //RS 信号引脚指定
/////数据输出子函数
void lcd_out(int code,int flag)
{
output_x((code & 0xF0) | (input_x() & 0x0F));
if (flag==0)
output_high(rs); //显示数据的情况
else
output_low(rs); //指令数据的情况
delay_cycles(1); //NOP
output_high(stb); //strobe out
delay_cycles(2); //NOP X 2
output_low(stb); //reset strobe
}
/////单字符表示函数
void lcd_data (int asci)
{
lcd_out(asci,0); //高4位输出
lcd_out(asci<<4,0); //低4位输出
delay_us(50); //50微秒
}
/////指令输出函数
void lcd_cmd(int cmd)
{
lcd_out(cmd,1); //高4位输出
lcd_out(cmd<<4,1); //低4位输出
delay_us(2); //2微秒
}
/////全消去函数
void lcd_clear()
{
lcd_cmd(0x01); //初始化指令输出
delay_ms(15); //15 ms
}
/////初始化函数
void lcd_init()
{
set_tris_x(mode); //模式设置
delay_ms(15);
lcd_out(0x30,1); //8bit mode set
delay_ms(5);
lcd_out(0x30,1); //8bit mode set
delay_ms(1);
lcd_out(0x30,1); //8bit mode set
delay_ms(1);
lcd_out(0x20,1); //4bit mode set
delay_ms(1);
lcd_cmd(0x2E); //DL=0 4bit mode
lcd_cmd(0x08); //display 0FF C="D"=B=0
lcd_cmd(0x0D); //display ON C="D"=1 B="0"
lcd_cmd(0x06); //entyr I/D=1 S="0"
lcd_cmd(0x02); //cursor home
}
void main()
{
long data;
data=0;
lcd_init();
lcd_clear();
printf(lcd_data,"Start!!");
while(1)
{
lcd_cmd(0xc0); //到第2行开头
printf(lcd_data,"Data= %lu",data++);
delay_ms(100);
}
}
2008-10-10 更新了双屏,找出第三行,第四行的始地址.
https://static.assets-stash.eet-china.com/album/old-resources/2008/10/10/99af5659-c7de-4a43-83d0-f2bd57ac85c5.rar
文章评论(0条评论)
登录后参与讨论