📄 1.c
字号:
/****************http://bbs.cepark.com/register.php?fromuid=2975 ********
显示格式(单位V):
H0:4.03 H1:4.03
bbs.cepark.com
/*Writen by kidcao1987 2009-3-7*/
/****************http://bbs.cepark.com/register.php?fromuid=2975 *********/
#include <REG52.H>
#define uint unsigned int
#define uchar unsigned char
sbit lcd_rs=P1^0;
sbit lcd_rw=P1^1;
sbit lcd_en=P1^2; //液晶控制端
sbit cs=P2^0;
sbit clk=P3^6;
sbit dodi=P3^7;//adc0832控制端
uchar temp;
float result;
uchar code name[]="SWU-LiJin";
void lcd_delay(uint m) //延时函数
{
while(m--);
}
void read1602() //忙检测
{
uchar i;
i=254;
P0=0xff;
lcd_rs=0;
lcd_rw=1;
lcd_en=1;
while((i--)&&(P0&0x80));//若一段时间以后仍低,则认为是不忙
lcd_en=0;
}
void write1602(uchar wdata,bit rw)//向LCD1602写数据(rw=1)或者命令(rw=0)
{
read1602();
P0=wdata;
lcd_rs=rw;
lcd_rw=0;
lcd_en=1;
lcd_delay(1);
lcd_en=0;
}
void lcd_init() //LCD1602液晶的初始化
{
lcd_delay(1500);
write1602(0x38,0);
lcd_delay(500);
write1602(0x38,0);
lcd_delay(500);
write1602(0x38,0);
write1602(0x38,0); //置功能,8位数据,2行显示,5x7字符
write1602(0x0c,0); //只打开屏显
write1602(0x06,0); //左到右显示,自加1
write1602(0x01,0); //清屏
}
void lcd_printf(uchar *str)//显示字符串
{
while(*str!='\0')
{
write1602(*str,1); //写入数据
str++;
}
}
void lcd_moveto(uchar x,uchar y)//指定显示的行列坐标
{
if(x==0)
write1602(0x80|y,0);
if(x==1)
write1602(0xc0|y,0);
}
uchar readadc0832(bit ch) //获取数值
{
uchar i,data1=0,data2=0;
clk=0;
dodi=1;
cs=0;//cs=0时ADC0832有效
clk=1;
clk=0;//第一个脉冲,开始位
dodi=1;
clk=1;
clk=0;//第二个脉冲,模式选择
dodi=ch;//通道选择
clk=1;
clk=0; //第三个脉冲,通道选择
dodi=1;
for(i=0;i<8;i++) //第一次读数从高到低 ,时钟下降沿有效
{
clk=1;
clk=0;
if(dodi)data1|=0x80>>i;
}
for(i=0;i<8;i++) //第二次从低到高读数,下降沿有效
{
if(dodi)data2|=0x01<<i;
clk=1;
clk=0;
}
cs=1;
dodi=1;
clk=1;
if(data1==data2)return(data1);
}
void main()//测试用MAIN函数
{
lcd_init();
lcd_moveto(0,0);
lcd_printf(name);
while(1)
{
lcd_moveto(1,0);//定位在第二行第一列
lcd_printf("H0:");
temp=readadc0832(0);//读取通道0的电压值
result=temp*0.017725490;//得到实际的电压值
temp=(uchar)(result);//取得电压值的整数部分
write1602(temp+48,1);//显示电压值的整数部分
write1602('.',1);//显示小数点
result=(result-temp)*10;
temp=(uchar)(result);//获得电压值的小数点后第一位
write1602(temp+48,1);
result=(result-temp)*10;
temp=(uchar)(result); //获得电压值的小数点后第二位
write1602(temp+48,1);
lcd_moveto(1,8); //定位在第二行第八列
lcd_printf("H1:");
temp=readadc0832(1); //读取通道1的电压值
result=temp*0.017725490; //得到实际的电压值
temp=(uchar)(result); //取得电压值的整数部分
write1602(temp+48,1); //显示电压值的整数部分
write1602('.',1); //显示小数点
result=(result-temp)*10;
temp=(uchar)(result); //获得电压值的小数点后第一位
write1602(temp+48,1);
result=(result-temp)*10;
temp=(uchar)(result); //获得电压值的小数点后第二位
write1602(temp+48,1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -