智能仪表综合课程设计
{
dis1>>= 1; if (DO) dis1|= 0x80; else dis1|= 0x00; _nop_(); Clk=1; _nop_(); Clk=0; }
if(dis0==dis1) //两次结束数据比较,若相等 date=dis0; //则赋值给dat
_nop_();
CS=1; //释放ADC0832
DO=1; //拉高输出端,方便下次通道选择DI端有效 Clk=1; //拉高时钟 return date; }
/*********************************************** 数据转换程序
功能:将0-255级换算成0.00-5.00的电压数
***********************************************/ void convert(uchar a) {
uint temp; //特别注意这里需定义int型(余数将大于255)
dis[0]=a/51; //取个位 temp=aQ; temp=temp*10;
dis[1]=temp/51; //取小数点后第一位 temp=tempQ;
24
智能仪表综合课程设计
}
temp=temp*10;
dis[2]=temp/51; //取小数点后第二位
/***************************************** LCD1602驱动程序
******************************************/ void delay(uchar z) { }
void write_cmd(uchar cmd)//lcd1602写命令函数 { }
void write_date(uchar date)//lcd1602写数据函数 {
lcdrs=1;
lcdrw=0; //选择数据寄存器 lcden=1;
P0=date; //写数据 delay(5);
lcden=0; //使能拉低 lcden=1; lcdrs=0;
lcdrw=0; //选择指令寄存器 lcden=1;
P0=cmd; //写数据 delay(5);
lcden=0; //使能拉低 lcden=1; uint x,y; for(x=z;x>0;x--)
for(y=122;y>0;y--);
25
智能仪表综合课程设计
}
void init_lcd1602()//lcd1602初始化 { }
/***************************************** 显示函数
*****************************************/ void display(void) { }
/************************************************ 主函数
***************************************************/
void main(void)
uchar i;
write_cmd(0x80); for(i=0;i<3;i++) { }
write_date('V'); //最后一位后显示字符'V'
if(i==1) write_date('.'); //第二位显示小数点 write_date (0x30+dis[i]); delay(5);
write_cmd(0x01); //清屏 write_cmd(0x38); //功能设置 write_cmd(0x0c); //显示设置
write_cmd(0x06); //输入方式从左到右 delay(1);
26
智能仪表综合课程设计
{
CH=0; //选择通道0或1 init_lcd1602();//液晶1602显示初始化 while(1) //主循环 { date=ADC0832(CH);//启动ADC0832转换并接受数据
delay(1);
convert(date); display(); } }
//数据转换成BCD码
//显示数值 27