//单片机型号:STC15W408AS
// 电压 :3.3V
//内部RC振荡:11.0592M
#include "STC15F2K60S2.H"
#include "ADS1115.h"
#include "stdio.h"
#include "uart.h"
#define RATIO 0.1877
#define u8 unsigned char
#define u16 unsigned int
#define s16 signed int
sbit LED = P3^0;
sbit LCD_EN=P0^0;
sbit LCD_RW=P0^1;
sbit LCD_RS=P0^2;
#define LINE1_COLUMN(x) 0x7f+x
#define LINE2_COLUMN(x) 0xbf+x
#define LCD_DATAPORT P2
void delay_ms(u16 nms)
{
u16 x,y;
for(x=nms;x>0;x--)
for(y=120;y>0;y--);
}
void LCD1602_WriteCMD(u8 cmd)//LCD1602写命令函数
{
LCD_RS=0;
LCD_DATAPORT=cmd;
delay_ms(1);
LCD_EN=1;
delay_ms(1);
LCD_EN=0;
}
void LCD1602_WriteData(u8 dat)//LCD1602写数据函数
{
LCD_RS=1;
LCD_DATAPORT=dat;
delay_ms(1);
LCD_EN=1;
delay_ms(1);
LCD_EN=0;
}
void display_char(u8 addr,u8 chr)
{
LCD1602_WriteCMD(addr);
LCD1602_WriteData(chr);
}
/**void clear_char(u8 addr,u8 n)
{
u8 i;
// if(dir==1)
LCD1602_WriteCMD(0x06);//地址指针自动加一
// else
// LCD1602_WriteCMD(0x04);//地址指针自动减一
LCD1602_WriteCMD(addr);//设置地址
for(i=0;i<n;i++)
LCD1602_WriteData(' ');
}
******往指定位置显示字符串*****************
void display_string(u8 addr,u8 *p)
{
LCD1602_WriteCMD(0x0c);//关闭光标显示
LCD1602_WriteCMD(0x06);//地址指针自动加一
LCD1602_WriteCMD(addr);//设置地址
while(*p)//由于字符串的末尾是一个ASCII值为的0符号,当*p==0时,代表该字符串写完
{
LCD1602_WriteData(*p);//写入要显示的字符
p++;
}
}
*******************************************/
void display_num4(u8 addr,u16 num)
{
u8 qian,bai,shi,ge;
qian= num/1000;
bai = num/100%10;
shi = num/10%10;
ge = num%10; //变量分离
display_char(addr,qian+'0');
display_char(addr+1,'.');
display_char(addr+2,bai+'0');
display_char(addr+3,shi+'0');
display_char(addr+4,ge+'0');
}
void LCD_Init(void)
{
LCD_EN=0;//打开片选
LCD_RW=0;//读写控制,1:读
// 0:写 这里只写,不读
LCD1602_WriteCMD(0x38);
LCD1602_WriteCMD(0x0e);
LCD1602_WriteCMD(0x06);//地址指针自动加一,且光标加一
LCD1602_WriteCMD(0x01);
LCD1602_WriteCMD(0x80);
}
/*
*********************************************************************************************************
* 函 数 名: DelayMs
* 功能说明: 时钟延时
* 形 参: ms 以毫秒为单位.
* 返 回 值: 无
*********************************************************************************************************
*/
void DelayMs( unsigned int ms)
{
unsigned int i,j;
for (i = 0; i < ms; i++)
for(j=0;j<125;j++);
}
void main()
{
u16 adc;
LCD_Init();
display_num4(LINE1_COLUMN(1),1698);
while(1)
{
LED =!LED;
adc = Read_ADS1115(BASE| MUX_A0|SPS128|PGA_6144); //读取A0 通道,单端模式,速率 128,PGA +-6.144V
display_num4(LINE1_COLUMN(1),adc*RATIO);
adc = Read_ADS1115(BASE| MUX_A1|SPS128|PGA_6144);//读取A1 通道,单端模式,速率 128,PGA +-6.144V
// display_num4(LINE1_COLUMN(6),adc/10);
display_num4(LINE1_COLUMN(8),adc*RATIO);
adc = Read_ADS1115(BASE| MUX_A2|SPS128|PGA_6144);//读取A2 通道,单端模式,速率 128,PGA +-6.144V
display_num4(LINE2_COLUMN(1),adc*RATIO);
adc = Read_ADS1115(BASE| MUX_A0A3|SPS128|PGA_6144);//读取A3 通道,单端模式,速率 128,PGA +-6.144V
display_num4(LINE2_COLUMN(8),adc*RATIO);
DelayMs(2000); //延时
}
}