光强检测仪
#include <reg52.h> //头文件
#include <intrins.h> //_nop_()指令 12MHZ 1us
#define uint unsigned int //全局声明 uint (2^32)-1
#define uchar unsigned char // uchar (2^8)-1
sbit RGB_RED = P3^6; //定义RBG引脚 共阴
sbit RGB_GREEN = P3^5;
sbit RGB_BLUE = P3^4;
sbit BUZZER = P3^7; //定义蜂鸣器 @500Hz~4.5KHz脉冲频率驱动
sbit LCD_RS = P2^5; //定义LDC数据命令选择端
sbit LCD_RW = P2^6; //定义LCD读写选择端
sbit LCD_EN = P2^7; //定义LCD使能端
sbit ADC_WR = P3^0; //定义ADC写信号输入端
sbit ADC_RD = P3^1; //定义ADC读信号输入端
sbit KEY_SC = P3^2; //外部中断0位按键位
uchar text1[] = " UESTC ";
uchar text2[] = "(Lux) ";
uchar text3[] = "High Vau:";
uchar text4[] = "Low Vau:"; //LCD显示文本
uchar ASCII[]="0123456789"; //ASCII
uchar Disbuf[]={
0,0,0}; //暂存空数组 百十个位
uchar Cmax[]={
0,0,0}; //存放最大值最小值 中断返回后重置 重新记录
uchar Cmin[]={
0,0,0};
uchar CYCLE,PWM_ON; //T0定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms,定义高电平时间
uchar T1RH,T1RL; //T1 重载值的高低字节
uint max=0;min=600; //赋相对值 确保有比较
uint candela=0; //光强值
uint scale=0; //T1占空比控制变量
/*****************************延时函数*****************************/
void Delay_ms(uint z) //毫秒ms级延时函数
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void delay_us(unsigned int cnt) //微秒us级延时函数
{
while(--cnt);
}
/******************************************************************/
/***************************LCD1602驱动***************************/
uchar Lcd1602_ReadBusy() //判断lCD是否处于忙的状态,即读忙
{
uchar temp;
LCD_RS=0;
LCD_RW=1;
_nop_();
P0=0xff; //读某IO口数据前,先将该口置为1
_nop_();
LCD_EN=1;
_nop_();
temp=P0; //读取此时lcd1602的状态字
_nop_();
LCD_EN=0;