IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于单片机工业生产现场的光照强度控制系统设计(仿真,程序,报告) -> 正文阅读

[嵌入式]基于单片机工业生产现场的光照强度控制系统设计(仿真,程序,报告)

用单片机控制总装车间中的LED照明系统,使其输出恒定照度的光,以满足总装生产工序中的照明需要。

总体设计方案

由设计要求可知,需使用MCS-51系列单片机,构建控制系统,实现LED灯亮度的控制。所以采用AT89C52 单片机为核心,以3*3按键键盘作为输入端,以达到控制所需输出电流的功能,并且由LCD1602显示模块可以显示输入电流的大小和电流源输出的电流大小。在设计中,采用PCF8591芯片进行AD/DA转换,单片机通过I2C通信协议控制PCF8591 AD转换输出的电压所需电压,输入压控电压源,通过采样电阻的电压DA转换获得电流源输出的电流值,经过单片机计算最后显示实际输出电流。

该直流电机控制系统的设计,在总体上大致可分为以下6个部分组成:AT89C52单片机最小系统,3*3按键键盘,直流稳压源,1602显示模块,AD/DA转换模块,可控电流源模块。

???【资源下载】下载地址:点击下载(1633)?百度网盘

///工业生产中的产品数量自动计量系统创新设计
///功能:通过MUC-51芯片控制电流源输出电流,实现LED灯亮度控制
///*************************************************************************
#include<reg52.h>
#include<iic.h>
#include<lcd1602.h>

#define KEY_PRESET(code) { P1=code; temp=P1; temp=temp&code; delay(10);}

uchar str1[16]="310mA<=I<=3100mA";
uchar str2[16]="set:    out:    ";
uchar str3[16]=" Error occurred ";
uchar dianliu[4]={0,0,0,0};

uchar key_num,key_flag,key_count=0,OK_flag;
ulong pian,bai,shi,ge,set_value;
float key_value;
uchar h,l,temp;
ulong back_voltage1,back_current;

void get_Data();
void set_Data(); 
uchar keyscan();
bit DACconversion(uchar sla,uchar c,uchar Val);
bit ISendByte(uchar sla,uchar c);
uchar IRcvByte(uchar sla);
void delay1(uint j);
///*************************************************************************
///主函数
///*************************************************************************
void main()
{
	INIT_I2c();//iic总线初始化
	LCD_Init();//LCD1602初始化
	while(1)
	{	
		get_Data();
		set_Data();	
	}			
	
}

//*******************************************************************
//DAC 变换, 转化函数               
//*******************************************************************
bit DACconversion(uchar sla,uchar c,  uchar Val)
{
   Start_I2c();              //启动总线
   SendByte(sla);            //发送器件地址
   if(ack==0)return(0);
   SendByte(c);              //发送控制字节
   if(ack==0)return(0);
   SendByte(Val);            //发送DAC的数值  
   if(ack==0)return(0);
   Stop_I2c();               //结束总线
   return(1);
}
//*******************************************************************
//ADC发送字节[命令]数据函数               
//*******************************************************************
bit ISendByte(uchar sla,uchar c)
{
   Start_I2c();              //启动总线
   SendByte(sla);            //发送器件地址
   if(ack==0)return(0);
   SendByte(c);              //发送数据
   if(ack==0)return(0);
   Stop_I2c();               //结束总线
   return(1);
}
//*******************************************************************
//ADC读字节数据函数               
//*******************************************************************
uchar IRcvByte(uchar sla)
{  
	uchar c;
   Start_I2c();          //启动总线
   SendByte(sla+1);      //发送器件地址
   if(ack==0)return(0);
   c=RcvByte();          //读取数据0
   Ack_I2c(1);           //发送非就答位
   Stop_I2c();           //结束总线
   return(c);
}
///*************************************************************************
///按键扫描函数
///*************************************************************************
uchar keyscan()
{  
     KEY_PRESET(0X0F);
	 if(temp!=0X0F)//是否有键按下
	 {
	 	delay(10);
		temp=P1;
		temp=temp&0X0F;
		if(temp!=0X0F) //确实有键按下
		{
		   key_flag=1;//按下键标志位
		   switch(temp)
		   {
		   	 case 0X0E:h=0;break; //行
			 case 0X0D:h=1;break;
		   	 case 0X0B:h=2;break;
		   	 case 0X07:h=3;break;
			 default:break;
		   }
		   KEY_PRESET(0XF0);
		   switch(temp)
		   {
		   	 case 0XE0:l=0;break; //列
			 case 0XD0:l=1;break;
		   	 case 0XB0:l=2;break;
			 case 0X70:l=3;break;
			 default:break;
		   }
		   key_num=3*h+l;//按下键的键值
	       if(key_num<=9) key_count++;
		   while(temp!=0XF0)//等待释放
		   {
		   	  temp=P1;
			  temp=temp&0XF0;
		   }  
		}
	 }	 
	 return key_num;//返回键值
}
void get_Data()
{
	   	uchar i;
   		keyscan(); //键盘扫描

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 15:54:31  更:2021-12-23 15:55:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 20:25:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码