硬件电路模型
模数转换代码
main.c
#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"
#include "XPT2046.h"unsigned int ADValue;
int main(){LCD_Init();LCD_ShowString(1,1,"ADJ NTC RG");while(1){ADValue = XPT2046_ReadAD(XPT2046_XP_8);LCD_ShowNum(2,1,ADValue,3);ADValue = XPT2046_ReadAD(XPT2046_YP_8);LCD_ShowNum(2,5,ADValue,3);ADValue = XPT2046_ReadAD(XPT2046_VBAT_8);LCD_ShowNum(2,9,ADValue,3);Delay(10);}
}
延时函数c语言文件
延时函数头文件
LCD1602C语言文件
#include <REGX52.H>
#include <stdlib.h>
#include <stdio.h>//引脚配置:
sbit LCD_RS=P3^5;
sbit LCD_RW=P3^6;
sbit LCD_EN=P3^4;
#define LCD_DataPort P0//函数定义:
/*** @brief LCD1602延时函数,12MHz调用可延时1ms* @param 无* @retval 无*/void LCD_Delay(){unsigned char i, j;i = 2;j = 239;do{while (--j);} while (--i);}/*** @brief LCD1602写命令* @param Command 要写入的命令* @retval 无*/void LCD_WriteCommand(unsigned char Command){LCD_RS=0;LCD_RW=0;LCD_DataPort=Command;LCD_EN=1;LCD_Delay();LCD_EN=0;LCD_Delay();}/*** @brief LCD1602写数据* @param Data 要写入的数据* @retval 无*/void LCD_WriteData(unsigned char Data){LCD_RS=1;LCD_RW=0;LCD_DataPort=Data;LCD_EN=1;LCD_Delay();LCD_EN=0;LCD_Delay();}/*** @brief LCD1602设置光标位置* @param Line 行位置,范围:1~2* @param Column 列位置,范围:1~16* @retval 无*/void LCD_SetCursor(unsigned char Line,unsigned char Column){if(Line==1){LCD_WriteCommand(0x80|(Column-1));}else if(Line==2){LCD_WriteCommand(0x80|(Column-1+0x40));}}/*** @brief LCD1602初始化函数* @param 无* @retval 无*/void LCD_Init(){LCD_WriteCommand(0x38);//八位数据接口,两行显示,5*7点阵LCD_WriteCommand(0x0c);//显示开,光标关,闪烁关LCD_WriteCommand(0x06);//数据读写操作后,光标自动加一,画面不动LCD_WriteCommand(0x01);//光标复位,清屏}/*** @brief 在LCD1602指定位置上显示一个字符* @param Line 行位置,范围:1~2* @param Column 列位置,范围:1~16* @param Char 要显示的字符* @retval 无*/void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char){LCD_SetCursor(Line,Column);LCD_WriteData(Char);}/*** @brief 在LCD1602指定位置开始显示所给字符串* @param Line 起始行位置,范围:1~2* @param Column 起始列位置,范围:1~16* @param String 要显示的字符串* @retval 无*/void LCD_ShowString(unsigned char Line,unsigned char Column,char *String){unsigned char i;LCD_SetCursor(Line,Column);for(i=0;String[i]!='\0';i++){LCD_WriteData(String[i]);}}/*** @brief 返回值=X的Y次方*/int LCD_Pow(int X,int Y){unsigned char i;int Result=1;for(i=0;i<Y;i++){Result*=X;}return Result;}/*** @brief 在LCD1602指定位置开始显示所给数字* @param Line 起始行位置,范围:1~2* @param Column 起始列位置,范围:1~16* @param Number 要显示的数字,范围:0~65535* @param Length 要显示数字的长度,范围:1~5* @retval 无*/void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length){unsigned char i;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){LCD_WriteData(Number/LCD_Pow(10,i-1)%10+'0');}}/*** @brief 在LCD1602指定位置开始以有符号十进制显示所给数字* @param Line 起始行位置,范围:1~2* @param Column 起始列位置,范围:1~16* @param Number 要显示的数字,范围:-32768~32767* @param Length 要显示数字的长度,范围:1~5* @retval 无*/void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length){unsigned char i;unsigned int Number1;LCD_SetCursor(Line,Column);if(Number>=0){LCD_WriteData('+');Number1=Number;}else{LCD_WriteData('-');Number1=-Number;}for(i=Length;i>0;i--){LCD_WriteData(Number1/LCD_Pow(10,i-1)%10+'0');}}/*** @brief 在LCD1602指定位置开始以十六进制显示所给数字* @param Line 起始行位置,范围:1~2* @param Column 起始列位置,范围:1~16* @param Number 要显示的数字,范围:0~0xFFFF* @param Length 要显示数字的长度,范围:1~4* @retval 无*/void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length){unsigned char i,SingleNumber;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){SingleNumber=Number/LCD_Pow(16,i-1)%16;if(SingleNumber<10){LCD_WriteData(SingleNumber+'0');}else{LCD_WriteData(SingleNumber-10+'A');}}}/*** @brief 在LCD1602指定位置开始以二进制显示所给数字* @param Line 起始行位置,范围:1~2* @param Column 起始列位置,范围:1~16* @param Number 要显示的数字,范围:0~1111 1111 1111 1111* @param Length 要显示数字的长度,范围:1~16* @retval 无*/void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length){unsigned char i;LCD_SetCursor(Line,Column);for(i=Length;i>0;i--){LCD_WriteData(Number/LCD_Pow(2,i-1)%2+'0');}}
LCD1602头文件
* #ifndef __LCD1602_H__#define __LCD1602_H__//用户调用函数:void LCD_Init();void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char);void LCD_ShowString(unsigned char Line,unsigned char Column,char *String);void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length);void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);#endif
XPT2406c语言文件
#include <REGX52.H>
sbit XPT2046_CS = P3^7;
sbit XPT2046_DCLK = P2^1;
sbit XPT2046_DIN = P2^2;
sbit XPT2046_DOUT = P2^5;unsigned int XPT2046_ReadAD(unsigned char Command){unsigned char i;unsigned int ADValue;XPT2046_DCLK = 0;XPT2046_CS = 0;for(i = 0; i<8; i++){XPT2046_DIN = Command&(0x80>>i);XPT2046_DCLK = 1;XPT2046_DCLK = 0;}for(i = 0; i<16;i++){XPT2046_DCLK = 1;XPT2046_DCLK = 0;if(XPT2046_DOUT){ADValue|=(0x8000>>i);}}XPT2046_CS = 1;if(Command&0x08){return ADValue>>8;}else{return ADValue>>4;}}
XPT2406头文件
#ifndef _XPT2046__H__
#define _XPT2046__H__#define XPT2046_XP_8 0x9C
#define XPT2046_YP_8 0xDC
#define XPT2046_YP_8 0xDC
#define XPT2046_VBAT_8 0xAC
#define XPT2046_VUX_8 0xEC#define XPT2046_XP_12 0x94
#define XPT2046_YP_12 0xD4
#define XPT2046_YP_12 0xD4
#define XPT2046_VBAT_12 0xA4
#define XPT2046_VUX_12 0xE4unsigned int XPT2046_ReadAD(unsigned char Command);#endif