1691 views|0 replies
- Last login
- 2024-10-18
- Online Time
- 124 hours
- Prestige
- 757 points
- Points
- 576 points
|
#include //Contains the header file of the microcontroller register #include //Header file containing _nop_() function definition //ADC0832 port pin definition sbit CS=P3^0; //Define CS bit as P3.4 pin sbit CLK=P3^6; //Define CLK bit as P1.0 pin sbit DIO=P3^7; //Define DIO bit as P1.1 pin //Global variable declaration unsigned char code digit[10]={"0123456789"}; //Define character array to display numbers unsigned char code Str[]={"Volt="}; //Indicates that voltage is displayed //LCD port definition sbit RS=P2^0; //Register select bit, define RS bit as P2.0 pin sbit RW=P2^1; //Read/write select bit, define RW bit as P2.1 pin sbit E=P2^2; //Enable signal bit, define E bit as P2.2 pin sbit BF=P0^7; //Busy flag, define the BF bit as P0.7 pin/******************************************************** Function function: Delay 1ms (3j+2)*i=(3×33+2)×10=1010(microseconds), which can be considered as 1 millisecond************************************************/ void delay1ms() { unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<33;j++) ; } /********************************************************* Function function: Delay for several milliseconds Entry parameter: n *******************************************************/ void delaynms(unsigned char n) { unsigned char i; for(i=0;i="" writeaddress(0x03);="" writeaddress(0x08);="" writeaddress(0x09);="" writeaddress(0x0a);="" writeaddress(0x0c);="" writeaddress(unsigned="" writedata('.');="" writedata('v');="" writedata(digit);="" writedata(digit[j]);="" writedata(digit[x]);="" writedata(str);="" writedata(unsigned="" writeinstruction="" writeinstruction(0x01);="" writeinstruction(0x06);="" writeinstruction(0x0c);="" writeinstruction(0x38);="" writeinstruction(x|0x80);="" w同时为低电平时,可以写入指令="" x)="" y)="" {="" }="" 一个转换周期开始="" 为第一个脉冲作准备="" 从第一个字符开始显示="" 储存a="" 入口参数:dictate="" 入口参数:x="" 入口参数:y(为字符常量)="" 写显示地址,将在第1行第11列开始显示="" 写显示地址,将在第2行第7列开始显示="" 写显示地址,将在第1行第10列开始显示="" 写显示地址,将在第2行第13列开始显示="" 写显示地址,将在第2行第1列开始显示="" 函数功能:主函数="" 函数功能:判断液晶模块的忙碌状态="" 函数功能:对lcd的显示模式进行初始化设置="" 函数功能:将数据(字符的标准ascii码)写入液晶模块="" 函数功能:将模式设置指令或显示地址写入液晶模块="" 函数功能:将模拟信号转换成数字信号="" 函数功能:指定字符显示的实际地址="" 函数功能:显示电压的单位(v)="" 函数功能:显示电压的小数数部分="" 函数功能:显示电压的小数点="" 函数功能:显示电压的整数部分="" 函数功能:显示电压符号="" 分别储存转换后的整数部分与小数部分="" 取个位(小数点后第二位)="" 取十位(小数点后第一位)="" 只要没有写到结束标志,就继续写="" 在proteus中新建仿真文件ex68.dsn,电路原理图="" 如果忙就等待="" 将e恢复低电平="" 将下面储存的低位数据向右移="" 将字符常量写入lcd="" 将小数点的字符常量写入lcd="" 将小数部分的第一位数字字符常量写入lcd="" 将忙碌标志电平赋给result="" 将数据送入p0口,即写入指令或地址="" 将数据送入p0口,即将数据写入液晶模块="" 将液晶初始化="" 将百位数字的字符常量写入lcd="" 将读书的数据返回="" 将输出数据dio通过或运算储存在dat最低位="" 就是让e从0到1发生正跳变,所以应先置"0"="" 延时15ms,首次写指令时应给lcd一段较长的反应时间="" 延时250ms="" 延时5ms="" 延时5ms给硬件一点反应时间="" 当e由高电平跳变成低电平时,液晶模块开始执行命令="" 指向下一个字符="" 显示位置的确定方法规定为"80h+地址码x"="" 显示小数部分="" 显示整数部分="" 显示模式设置:16×2显示,5×7点阵,8位数据接口="" 显示模式设置:光标右移,字符不移="" 显示模式设置:显示开,无光标,光标不闪烁="" 显示温度的单位="" 显示温度的小数点="" 显示温度说明="" 根据规定,rs为低电平,rw为高电平时,可以读状态="" 根据规定,rs和r="" 清屏幕指令,将以前的显示内容清除="" 片选无效="" 空操作="" 空操作两个机器周期,给硬件反应时间="" 空操作四个机器周期,给硬件反应时间="" 第一个脉冲="" 第一个脉冲的下降沿,此前dio必须是高电平="" 第三个脉冲="" 第三个脉冲下沉之后,输入端dio失去作用,应置1="" 第三个脉冲下降沿="" 第二个脉冲下降沿="" 第二个脉冲,第2、3个脉冲下沉之前,di必须跟别输入两位数据用于选择通道,这里选通道ch0="" 第四个脉冲="" 计算小数部分="" 计算整数部分="" 返回值:result。result="1,忙碌;result=0,不忙" 进行a="" 连续三次,确保初始化成功="" 通道选择信号="" 高位在前="" ,给硬件一点反应时间="">
Digital voltmeter based on ADC0832
|
|