编写MCS-51单片机控制程序,利用AD采集光敏电阻的信号,实现环境亮度的检测,并将亮度值显示于LED数码管。

时间: 2024-03-17 20:39:55 浏览: 20
好的,这是一个具体的嵌入式开发问题,需要编写C语言程序,下面是程序的基本框架和实现步骤: 基本框架: ```c #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit AD_PIN=P3^7;//AD采集引脚 sbit LED_COM=P2^7;//数码管位选引脚 sbit LED_A=P2^6;//数码管A段引脚 sbit LED_B=P2^5;//数码管B段引脚 sbit LED_C=P2^4;//数码管C段引脚 sbit LED_D=P2^3;//数码管D段引脚 sbit LED_E=P2^2;//数码管E段引脚 sbit LED_F=P2^1;//数码管F段引脚 sbit LED_G=P2^0;//数码管G段引脚 void delay(uint x);//延时函数 void AD_init();//AD采集初始化 uint AD_read();//AD采集函数 void LED_display(uchar num);//数码管显示函数 void main(){ uint ad_value;//AD采集的值 uchar display_num;//要显示的数码管数字 AD_init();//AD采集初始化 while(1){ ad_value=AD_read();//读取AD采集的值 display_num=ad_value/100;//计算要显示的数码管数字 LED_display(display_num);//数码管显示 } } void delay(uint x){ uint i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } void AD_init(){ P1=0xff;//设置P1口为输入 TMOD=0x01;//设置计时器0为模式1 TH0=0x3c;//计时器0初始值 TL0=0xb0;//计时器0初始值 TR0=1;//启动计时器0 } uint AD_read(){ uint ad_value; AD_PIN=1;//启动AD采集 delay(1);//等待采集完成 ad_value=TH0*256+TL0;//读取AD采集的值 TH0=0x3c;//重新设置计时器0初始值 TL0=0xb0;//重新设置计时器0初始值 return ad_value; } void LED_display(uchar num){ switch(num){ case 0: LED_A=LED_B=LED_C=LED_D=LED_E=LED_F=1;LED_G=0;break; case 1: LED_B=LED_C=1;LED_A=LED_D=LED_E=LED_F=LED_G=0;break; case 2: LED_A=LED_B=LED_D=LED_E=LED_G=1;LED_C=LED_F=0;break; case 3: LED_A=LED_B=LED_C=LED_D=LED_G=1;LED_E=LED_F=0;break; case 4: LED_B=LED_C=LED_F=LED_G=1;LED_A=LED_D=LED_E=0;break; case 5: LED_A=LED_C=LED_D=LED_F=LED_G=1;LED_B=LED_E=0;break; case 6: LED_A=LED_C=LED_D=LED_E=LED_F=LED_G=1;LED_B=0;break; case 7: LED_A=LED_B=LED_C=1;LED_D=LED_E=LED_F=LED_G=0;break; case 8: LED_A=LED_B=LED_C=LED_D=LED_E=LED_F=LED_G=1;break; case 9: LED_A=LED_B=LED_C=LED_D=LED_F=LED_G=1;LED_E=0;break; default: break; } LED_COM=0;//位选 delay(1); LED_COM=1; } ``` 实现步骤: 1. 定义各个引脚和常量:AD采集引脚、LED数码管引脚、延时函数等。 2. 编写延时函数,用于等待AD采集完成和数码管显示。 3. 编写AD采集初始化函数,设置P1口为输入,计时器0为模式1,定时器初值为0x3c和0xb0,启动计时器0。 4. 编写AD采集函数,启动AD采集,等待采集完成,读取计时器0的值,重新设置计时器0的初值,返回AD采集值。 5. 编写数码管显示函数,根据要显示的数字,设置相应的数码管引脚电平,启动位选引脚,延时一段时间后关闭位选引脚。 6. 在主函数中,循环读取AD采集值,计算要显示的数字,调用数码管显示函数显示数字。 注意事项: 1. AD采集的结果是一个16位的值,需要将其转换为要显示的数字。 2. 数码管显示函数中,需要设置数码管引脚电平时,要注意引脚的极性和编号。 3. 数码管显示函数中,需要先启动位选引脚,再设置数码管引脚电平,延时一段时间后关闭位选引脚,以实现数码管的显示。

相关推荐

最新推荐

recommend-type

基于MCS-51单片机的断相与相序保护系统的设计

本文介绍了一种简单实用的数字式断相与相序保护技术的原理,给出了基于MCS—51单片机的断相与相序保护数字控制系统的硬件电路及简单软件介绍,实现了三相交流控制系统高效、安全可靠地运行。
recommend-type

MCS-51单片机汇编指令详解

MOVC A,@A+DPTR 本指令是将ROM中的数送入A中。本指令也被称为查表指令,常用此指令来查一个已做好在ROM中的表格,此条指令引出一个新的寻址方法:变址寻址。本指令是要在ROM的一个地址单元中找出数据,显然必须知道...
recommend-type

51单片机基础MCS-51单片机汇编语言程序设计

第四章 MCS-51单片机汇编语言程序设计 第五章 中断系统 第六章 MCS-51单片机的定时/计数器 第七章 单片机串行数据通信 第八章 单片机的系统扩展 第九章 单片机应用系统的设计方法及实例 第十章 单片机应用系统...
recommend-type

MCS-51单片机应用设计课后答案.doc

《MCS-51单片机应用设计》,第二版 哈尔滨工业大学出版社 张毅刚等 课后习题答案
recommend-type

MCS-51单片机期末试题2及答案

绝对真题,有答案 绝对真题,有答案绝对真题,有答案绝对真题,有答案绝对真题,有答案
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。