P0=date; //输入数据,就是你要在液晶上显示什么
EN=1;
//使能端拉高,开始输入
数据 delay(5);
EN=0; //拉低使能端,停止工作
delay(5);
}
void delay(uint z) //延时函数 { uintj,k;
for(j=0;j 大约一毫秒 } voidwrite_sfm(ucharadd,uchar date) { write_com(0x80+0x40+add); //写完光标自动到下一位 write_data(0x30+date); } /*****************ADC转换和数据采集****************/ void read(uint a) { START=0; P2=0x00; P2=tab[a]; _nop_(); _nop_(); _nop_(); _nop_(); START=1; _nop_(); START=0; _nop_(); delay(5); while(!AD_INT); P2 = 0xff; _nop_(); _nop_(); AD_ENA=1; _nop_(); shuju=P2; _nop_(); AD_ENA=0; _nop_(); P2 = 0xff; b1 = shuju/51; //整数部分 b2 = (shujuQ)*10/51;//小数部 分 } /*****************显示数据*****************/ void display(uint a) { write_sfm(0x04,a); write_sfm(0x07,b1); write_sfm(0x09,b2); } /*****************按键扫描*****************/ void key() { if(k0!=1) { read(ii); display(ii); delay(5); } if(k1!=1) { for(i=0;i<8;i++) { read(i); display(i); delay(500); } } if(k2!=1) { for(i=0;i<8;i++) { read(i); display(i); delay((t+t*(i%2))*1000); } } if(k3!=1) { } if(k4!=1) { b=b1+0.1*b2; if(b<=1.8||b>=2.2) { delay(5); while(1) { read(2); display(2); ii++; delay(500); if(ii>=8) { } write_sfm(0x04,ii); ii=0; } LED1=0; TR0=1; TR1=1; flag=0; LED1=1; TR0=0; TR1=0; } } } } else { fre=50000; 四、调试及结果 1、可以单点采集、多路巡测、采集时间间隔: 图12 运行显示结果图 2、可以实现IN2通道采集电压报警功能: 图13 IN2通道电压大于等于2.2V报警 图14 IN2通道电压小于等于1.8V报警 五、结束语 通过这次课程设计巩固了自己的单片机编程能力,扎实了自己的专业能力。在程序 设计中由于自己不够细心,在一些很细小的错误中耗费了很多时间,使得在完成课程设计时很赶。因此,在以后程序编写时应该更加认真,做到高效率完成任务。另外,感觉自己的专业十分强大,如果好好学以后会有很好的发展。 六、参考文献 百度文库