1、3、超详细TL2543测电压实例说明(带电路图) By 即墨天2一、 电路图/-/读2543AD转换程序/-#include #include #include /使用了LCD1602封装程序,代码见附件一#define uchar unsigned char#define uint unsigned intsbit Tlc_Sdo = P10; /2543输出sbit Tlc_Sdi = P11; /2543输入sbit Tlc_Cs = P12; /2543片选sbit Tlc_Clk = P13; /2543时钟sbit Tlc_Eoc = P14;uchar code LCD_DSY1
2、 = 2543 A/D Result:;/第一行显示的字符uchar LCD_DSY2 = 0.00V ; /第二行显示结果/-/读2543AD转换值子程序,输入参数:Port通道号,输出参数:AD转换值/-uint read_2543(uchar port)uint Ad_Result = 0; /用于存放采集的AD转换值uchar i;Tlc_Clk = 0;Tlc_Cs = 0;port = 4; /选择数据长度为12位,高位在前for(i = 0 ; i 12; i+)Ad_Result = 1;if(Tlc_Sdo) Ad_Result |= 0x01;/Tlc_Sdi = (bit
3、)(port&0x80);port =1; Tlc_Sdi = CY; /CY为程序状态字进位标志位Tlc_Clk = 1; /时钟上升沿Tlc_Clk = 0;Tlc_Cs = 1; return(Ad_Result);void main()uint Tmp;Initialize_LCD1602();LCD1602_Display(0,0,LCD_DSY1); /显示第一行的字符read_2543(0); /启动AD转换,选中通道0,转换结果无意义。while(1)while(!Tlc_Eoc); /等待AD转换结束Tmp = read_2543(0)*500.0/4095;/读取0通道AD
4、转换结果*500.0/4095为电压值 LCD_DSY26= Tmp / 100 % 10 + 0;/百位LCD_DSY28= Tmp % 100 / 10 + 0;/十位LCD_DSY29= Tmp % 10 + 0;/个位LCD1602_Display(0,1,LCD_DSY2);附件一/-/LCD1602显示驱动程序/-/-/1602液晶的驱动程序 调用前请按接线自行更改液晶接口的位定义;/在主程序中输入:Initialize_LCD1602();进行1602液晶的初始化/显示需调用函数:LCD1602_Display(x,y,z)/ 其中x为字符的列位置,取值范围0-32,y为字符的行
5、位置,取值范围为/ 0第一行,1第二行;z为待显示的字符串数组名/-#define uchar unsigned char#define uint unsigned intsbit RS = P20; /液晶数据/命令选择端sbit RW = P21; /液晶读写选择端sbit EN = P22; /液晶使能信号/-/延时/-void LCD1602_DelayMS(uint ms)uchar i;while(ms-) for(i = 0; i 120; i+);/-/忙检查/-uchar LCD1602_Busy_Check()uchar LCD_Status;RS = 0;RW = 1;E
6、N = 1;LCD1602_DelayMS(1);LCD_Status = P0;EN = 0;return LCD_Status; /-/写LCD命令/-void LCD1602_Write_Cmd(uchar cmd)while(LCD1602_Busy_Check() & 0x80) = 0x80); /忙等待RS = 0;RW = 0;EN = 0;P0 = cmd;EN = 1;LCD1602_DelayMS(1);EN = 0;/-/发送数据/-void LCD1602_Write_Data(uchar dat)while(LCD1602_Busy_Check() & 0x80)
7、= 0x80); /忙等待RS = 1;RW = 0;EN = 0;P0 = dat;EN = 1;LCD1602_DelayMS(1);EN = 0; /-/LCD初始化/-void Initialize_LCD1602()LCD1602_Write_Cmd(0x38); /显示模式设置LCD1602_DelayMS(1);LCD1602_Write_Cmd(0x01); /显示清屏LCD1602_DelayMS(1);LCD1602_Write_Cmd(0x0C); /开显示,不显示光标LCD1602_DelayMS(1); LCD1602_Write_Cmd(0x06); /屏幕不动,读或写一个字符后地址指针加一LCD1602_DelayMS(1);/-/显示字符串/-void LCD1602_Display(uchar x,uchar y,uchar *str)uchar i = 0;if(y = 0) LCD1602_Write_Cmd(0x80 | x);if(y = 1) LCD1602_Write_Cmd(0xC0 | x); /设置显示起始位置for( i = 0; i 16; i+) LCD1602_Write_Data(stri);