前述:
QQ:3177227373
V X:F9986858
这个是一个简易课设作品。
开发板资料:
百度网盘链接 (点击蓝色字体即可跳转)
提取码:tf4r
百度网盘链接 (点击蓝色字体即可跳转)
提取码:j61w
单片机介绍:
STC8系列单片机是不需要外部晶振和外部复位的单片机,是目前全球最快的8051 单片机(相同时钟频率),比传统的8051约快12倍(速度快11.2~13.2倍)
详细介绍参考上一篇博客 基于STC8A8K64S4A12单片机ADC检测_烟雾报警器(点击蓝色字体即可跳转)
此处选自STC8A8K64S4A12单片机手册的介绍
百度网盘链接 (点击蓝色字体即可跳转)
提取码:x9p8
相关代码:
//PCF8591.c
#include "PCF8591.h"
#include "delay.h"
#include "stc8.h"
#include <intrins.h> //包含NOP空指令函数_nop_();
sbit SDA=P1^4; //定义总线连接端口
sbit SCL=P1^5;
//读取AD模数转换的值,有返回值
unsigned char ReadADC(unsigned char Chl)
{
unsigned char Data;
P_SW2 = 0x80;
I2CCFG = 0xe0; //使能I2C主机模式
I2CMSST = 0x00;
Start();
SendData(0x90);//写入芯片地址
RecvACK();
SendData(0x40|Chl);//写入选择的通道,Chl的值分别为0、1、2、3,分别代表1-4通道
RecvACK();
Start();
SendData(0x91); //读入地址
RecvACK();
Data=RecvData(); //读数据
SendNAK();
Stop();
P_SW2 = 0x00;
return Data; //返回值
}
void Wait()
{
while (!(I2CMSST & 0x40));
I2CMSST &= ~0x40;
}
void Start()
{
I2CMSCR = 0x01;//发送START命令
Wait();
}
void SendData(char dat)
{
I2CTXD = dat; //写数据到数据缓冲区
I2CMSCR = 0x02;//发送SEND命令
Wait();
}
void RecvACK()
{
I2CMSCR = 0x03;//发送读ACK命令
Wait();
}
char RecvData()
{
I2CMSCR = 0x04;//发送RECV命令
Wait();
return I2CRXD;
}
void SendNAK()
{
I2CMSST = 0x01;//设置NAK信号
I2CMSCR = 0x05;//发送ACK命令
Wait();
}
void Stop()
{
I2CMSCR = 0x06;//发送STOP命令
Wait();
}
//main.c
#include "stc8.h"
#include "PCF8591.h"
#include "lcd1602.h"
unsigned char Guangzhao;
void main()
{
LCD_Init();
while(1)
{
Guangzhao=100-ReadADC(0)/2.56;//获取数据并计算为百分比
LCD_Manifest(2,11,Guangzhao/100);//显示百位
LCD_Manifest(2,12,Guangzhao%100/10);//显示十位
LCD_Manifest(2,13,Guangzhao%10);//显示个位
}
}
}
AD电路图:
电路除了一些基本供电和开关电路,再就是把PCF8591模块的IIC接口接到单片机的P1.4和P1.5引脚,这俩个引脚是这款单片机具有硬件IIC功能的引脚,==不可以随意换。==实物图片上面那些LED和轻触按键是原来有的,没有实际作用。