欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

使用TLC2543来读取电压

程序员文章站 2022-03-15 13:48:48
这个星期,我使用TLC2543这款芯片来读取输入的电压值,显示模块则是使用的LCD1602,程序不难,很适合初学者。#include#include #include #include #define uint8_t unsigned char //0-255#define uint16_t unsigned int//0-65535#define uint32_t un...

这个星期,我使用TLC2543这款芯片来读取输入的电压值,显示模块则是使用的LCD1602,程序不难,很适合初学者。

#include<reg51.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#define uint8_t unsigned char	 //0-255
#define uint16_t unsigned int	//0-65535
#define uint32_t unsigned long 	   //0-4294967295
#define uchar unsigned char
#define u8 unsigned char
#define u16 uint16_t	
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
ulong volt;//测量的电压值 
/*AD转换芯片*/
sbit DOUT=P1^5; //数据输出   
sbit DIN=P1^6;  //数据输入
sbit CS=P1^7;
sbit CLK=P3^6;
sbit EOC=P3^7;





sbit rs = P2^0; //LCD1602 RS接口
sbit rw = P2^1;	//LCD1602 RW接口
sbit en = P2^2;	//LCD1602 EN接口		



/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(uint8_t i)	  //延时函数   i=1时 延时10us
{
    while(i--);
}

void delay_1s(uint8_t s)
{
	unsigned int i;

	unsigned char j; //定义两个循环变量i、j

	while(s--)
		for (i = 1000; i > 0; i--) //外层循环1000次

			for (j = 124; j > 0; j--) ; //内层循环124次
}


/*******************************************************************************
* 函数功能		   : 向TLC2543写命令及读转换后的数据,ad转换
*******************************************************************************/

u16 read2543(u8 con_word)
{
   u16 ad=0,i;
   CLK=0;    //时钟首先置低
   CS=0;    //片选为0,芯片工作
   for(i=0;i<12;i++)
   {
     if(DOUT) //首先读取TLC2543的1位数据
     ad=ad|0x01;
  DIN=(bit)(con_word&0x80); // 向TLC2543写1位数据
     CLK=1;   //时钟上升沿,TLC2543输出使能
  delay(3);
  CLK=0;   //时钟下降沿,TLC2543输入使能
  delay(3);
  con_word<<=1;
  ad<<=1;
   }
  CS=1;
  ad>>=1;
	volt=ad;//取走转换结果
	volt=volt*1.221;
	return(volt); 
}


/*******************************************************************************
* 函数功能		   : LCD的显示
*******************************************************************************/

void lcd_wcom(uint8_t com)  //LCD1602 写命令
{
	rs = 0;
	rw = 0;
	en = 0;
	P0 = com;
	delay(100);
	en = 1;
	delay(100);
	en = 0;
}

void lcd_wdat(uint8_t dat)	//LCD1602 写数据
{
	rs = 1;
	rw = 0;
	en = 0;
	P0 = dat;
	delay(100);
	en = 1;
	delay(100);
	en = 0;
}

void lcd_init(void)    //LCD初始化
{
	lcd_wcom(0x38);
	lcd_wcom(0x0c);
	lcd_wcom(0x06);
	lcd_wcom(0x01);
	
}
 /***********************************************************************
* 函数功能		 :AD显示数值 
*******************************************************************************/
void LCD_Display_AD(void)
{
//	uint16_t ad_temp;
//	ad_temp=datapros();
	lcd_wcom(0x80+0x40);

	lcd_wdat('A');
	lcd_wdat('D');
	lcd_wdat(':');

	
	
	lcd_wdat((volt%10000000/1000000) +'0');//百万
	lcd_wdat((volt%1000000/100000) +'0');//十万
	lcd_wdat((volt%100000/10000) +'0');//万
	lcd_wdat((volt%10000/1000) +'0');//千
	lcd_wdat((volt%1000/100) +'0');//百
	lcd_wdat((volt%100/10) +'0');//十
	lcd_wdat((volt%10) +'0');//个
	
}


/**********************************************************/
//主程序
/**********************************************************/
void main()
{
	lcd_init(); //LCD初始化
	while(1)
	{
		read2543(addr);//调用2543驱动程序测量地址为0
		LCD_Display_AD();//调用显示程序	
	}
}

使用TLC2543来读取电压
written by 亦舒斋
QQ:1464475872

本文地址:https://blog.csdn.net/m0_46340227/article/details/109254657

相关标签: 单片机 嵌入式