基于STC8A8K64S4A12单片机硬件IIC_光照强度检测

前述:
QQ:3177227373
这个是一个简易课设作品。

开发板资料:
百度网盘链接  (点击蓝色字体即可跳转)
提取码: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  //包含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和轻触按键是原来有的,没有实际作用。
       
       
       

实物照片:

基于STC8A8K64S4A12单片机硬件IIC_光照强度检测_第1张图片

你可能感兴趣的:(单片机)