#include <p18f452.h>
#define uint unsigned int
#define uchar unsigned char
#define e PORTBbits.RB4 //液晶屏e端接RB5
#define rw PORTBbits.RB4 //液晶屏rw端接RB6
#define rs PORTBbits.RB5 //液晶屏rs端接RB7
uchar num;
//AD转换结果保存在lednum
uchar a1,a2,a3,a4,num; //a1--a4分别为液晶屏第二行第1、3、4、5位数
void disp(uchar num1,uchar num2,uchar num3,uchar num4); //ADC液晶显示
void delay(uint z); //延时子程序
void disp_init(void); //液晶屏初始化
const uchar table[]="The Voltage Is:"; //液晶屏第一行显示的字样
void write_com(uchar com); //对液晶屏写指令
void write_data(uchar dat); //写数据
void main()
{
unsigned int lednum=2589;
unsigned int a1=0,a2=0,a3=0,a4=0;
disp_init();
while(1)
{
delay(50);
a1=lednum/1000; //ADC结果千位上的数字
a2=lednum%1000/100; //ADC结果百位上的数字
a3=lednum%100/10; //ADC结果十位上的数字
a4=lednum%10;
disp(a1,a2,a3,a4);
}
}
void write_com(uchar com) //LED1602控制字输入
{
TRISB=0b000000000; //TRISB=0b00010000;
TRISD=0;
e=0;
rw=0;
rs=0; //写指令:RS=L,RW=L,D0~D7=指令码,E=高脉冲
PORTD=com; //写指令到液晶
delay(5);
e=1;
delay(5);
e=0;
}
void write_data(uchar dat) //LCD1602数据输入
{
TRISD=0;
e=0;
rw=0;
rs=1; //写数据:RS=H,RW=L,D0~D7=指令码,E=高脉冲
PORTD=dat; //写数据到液晶
delay(5);
e=1;
delay(5);
e=0;
}
void disp_init()
{
TRISD=0; //选择D端口为液晶屏数据的输入口
write_com(0x38); //液晶开显示
write_com(0x0c); //显示光标,光标闪烁
write_com(0x06); //读或写一个字符后地址指针加一,光标加一
write_com(0x01); //显示清屏:1、数据指针清零;2、所有显示清零
write_com(0x80); //第一行首位
}
void disp(uchar num1,uchar num2,uchar num3,uchar num4)
{
write_com(0x80+0x40);
write_data(num1+0x30); //液晶第二行第一位数
delay(1);
write_com(0x80+0x41);
write_data('.'); //液晶第二行第二位放置小数点
delay(1);
write_com(0x80+0x42);
write_data(num2+0x30); //液晶第二行第三位数
delay(1);
write_com(0x80+0x43);
write_data(num3+0x30); //液晶第二行第四位数
delay(1);
write_com(0x80+0x44);
write_data(num4+0x30); //液晶第二行第五位数
delay(1);
}
void delay(uint z) //z毫秒延时子程序
{
uint x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
LCD_driver.rar_PIC18F驱动_pic18f
版权申诉
53 浏览量
2022-09-22
22:23:47
上传
评论
收藏 1KB RAR 举报
我虽横行却不霸道
- 粉丝: 75
- 资源: 1万+