AT89C2051的一个特殊应用,用它的比较器做一个光强调节器,应用在全静态LED显示屏上。当初的情况是原有LED 显示屏的光控是用专用的AD转换芯片做的,比较贵。最后用这个方案做为一个补丁用了一下。
它的使用原理是:用单片机的比较器和电容及光敏电阻组成一个充放电电路,用单片机的两个定时器组成一个PWM信号输出。PWM信号从一个端口输出,然后控制LED 显示屏的显示使能信号,这样就可以做到在夜间LED显示屏变暗一点,的天变亮一点。以达到一个最好的效果。
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIMER0 ;改变占空比
ORG 001BH
LJMP TIMER1 ;定时10MS
ORG 0030H
MAIN: MOV SP,#70H
MOV P1,#0FFH
CLR P1.1
MOV P3,#0FFH
MOV TMOD,#11H
MOV IE,#8AH
MOV TH1,#0DCH ;定时10MS,扫描频率100HZ
MOV TL1,#00H
MOV TH0,#00H ;根据光强改变亮度占空比
MOV TL0,#00H
MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#50 ;配合定时器1完成启动光检测的时间500MS
;MOV 33H,#5
MOV 34H,#055H ;十秒到标志,055H为时间到
;MOV 35H,#0AAH ;启动比较器标志,55H为启动
SETB TR1
MAIN1: SETB ET0
CPL P1.4
MOV A,34H
CJNE A,#55H,MAIN1
MOV 34H,#0AAH
CLR TR0
CLR ET0
MOV TH0,#00H
MOV TL0,#00H
SETB TR0
SETB P1.1
JB P3.6,$
CLR TR0
SETB P3.7
CLR P1.1
CPL P1.5
MOV 30H,TH0
MOV 31H,TL0
MOV A,#0FFH
CLR C
SUBB A,31H
MOV 31H,A
MOV A,#0FFH
SUBB A,30H
MOV 30H,A
LJMP MAIN1
TIMER1: PUSH ACC
MOV TH1,#0DCH
MOV TL1,#00H
MOV TH0,30H
MOV TL0,31H
SETB TR0
CLR P3.7
CPL P1.7
DJNZ 32H,T1ZD1
MOV 32H,#50
MOV 34H,#55H ;500MS
T1ZD1: POP ACC
RETI
TIMER0: PUSH ACC
CLR TR0
MOV TH0,30H
MOV TL0,31H
SETB P3.7
cpl p1.6
POP ACC
RETI
END
关键字:51单片机 比较器
引用地址:
51单片机的比较器的应用
推荐阅读最新更新时间:2024-03-16 12:45
51单片机定时器设置入门 (STC89C52RC)
51单片机定时器设置入门 (STC89C52RC) STC单片机定时器设置 STC单片机定时器的使用可以说非常简单,只要掌握原理,有一点的C语言基础就行了。要点有以下几个: 1. 一定要知道英文缩写的原形,这样寄存器的名字就不用记了。 理解是最好的记忆方法。好的教材一定会给出所有英文缩写的原形。 2.尽量用形像的方法记忆 比如TCON和TMOD两个寄存器各位上的功能,教程一般有个图表,你就在学习中不断回忆那个图表的形像 TMOD:定时器/计数器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER) 定时器/计数器模式控制寄存器TMOD是一个逐位定义的8位寄存
[单片机]
51单片机12864液晶字符显示
51单片机的12864液晶字符显示,采用液晶的并行接法 #include reg52.h #include intrins.h #include stdlib.h #define uchar unsigned char #define uint unsigned int #define LCD_data P0 //定义数据口 sbit LCD_RS=P3^5; //数据命令选择端,高电平为写数据,低电平写命令 sbit LCD_RW=P3^6;//读写控制端,高电平读信息,低电平写信息 sbit LCD_EN=P3^7; // 使能端 sbit LCD_PSB=P3^4; //拉高 ,选择并行 //单片机特殊功能位
[单片机]
用51单片机写个电动小风扇方案
接下来我将为你介绍如何使用51单片机来实现一个简单的电动小风扇。 1、硬件准备 首先,我们需要准备好以下硬件: 51单片机主板 直流电机 驱动模块 电池盒或电源模块 一些导线和杜邦线 2、电路连接 接下来,我们需要将这些硬件进行连接。具体连接方式如下: 将直流电机连接到驱动模块上,驱动模块需要根据电机的电压和电流进行选择。 将驱动模块的输入端连接到单片机主板上的某个IO口,用于控制电机的开关。 将电池盒或电源模块连接到单片机主板上,用于提供电源。 连接完成后,检查一遍电路是否连接正确,然后进行下一步。 3、编写代码 现在,我们需要编写控制代码来控制电机的开关。以下是一个简单的示例代码: #include
[单片机]
利用51单片机实现对激光器电流的精度控制
引 言
近年来,随着光电技术的迅猛发展,激光器已广泛应用于医疗、国防、测量等各个领域。而环境温度变化会直接影响激光器的波长。把关键元件(如高性能晶振、SAW 滤波器、光放大器、激光二极管) 的本机温度限制在窄范围内,可以提高电子系统的精度。一般需要将温度控制在0. 1 ℃内,激光器的工作精度才能很好地保持在0. 1nm 内 。文中的设计方案能为大功率半导体激光器提供有效支持,最大电流可达2. 5A。
1 半导体激光控制器的设计
激光控制器由受控恒流源,温度监视及控制电路,主控制器及显示器构成。整体结构原理见图1。
1. 1 受控恒流源:
为了使激光器输出稳定的激光,对流过激光
[单片机]
27-基于51单片机的空调温度控制系统
具体实现功能 系统由STC89C51单片机+LCD1602液晶显示屏+L298N控制模块+直流电机+DS18B20温度传感器构成。 具体功能: (1)实现L298N对电机的控制,利用LCD1602直接、清晰明了的显示温度; (2) 基于测得的温度实现对电机转速的控制(利用电机模拟空调变频系统); (3)在自动模式下,温度越高,占空越高,转数越快。手动模式下,通过按键可以实现电机转速的控制。 设计背景 近些年来,随着空调行业的迅速发展,极大的占领了市场。与风扇相比,空调有强大的制冷功能,可以快速有效地降低环境温度。然而,空调也存在不少问题,例如,夏天吹时间长了容易得空调病,室内和室外温度不平衡容易热感冒;同时,由于
[单片机]
51单片机lcd1602
{ Uchar i; for (i=0;i 16;i++) { DispOneChar(i,1,dd++); dd &= 0x7f; if (dd 32) dd=32; } } // 显示光标定位 void LocateXY( char posx,char posy) { Uchar temp; temp = posx & 0xf; posy &= 0x1; if ( posy )temp |= 0x40; temp |= 0x80; LcdWriteCommand(temp,0); } // 按指定位置显示数出一个字符 void DispOneChar(Uchar x,Uchar y,Uchar Wd
[单片机]
51单片机与计算机进行通信的实现方法
51单片机 与计算机 通信 首先我们先来了解一下51单片机与计算机进行通信的实现方法。先来看一个实现这个功能的基本电路。 图中的P1就是 仿真 用的一个串口 接口 ,这个仿真电路要实现与计算机通信功能需要用到其他两个软件,一个是虚拟串口驱动软件,另外一个是串口助手软件,这两个软件在网上都很容易找到。我使用的是Virtual Serial Port Driver和丁丁串口助手,你也可以使用自己熟悉的软件,如果找不到或使用,安装这两个软件有问题可以私信。 虚拟串口驱动软件安装后配置两个成对的虚拟串口一个对应仿真电路中的串口接口,一个对应在串口助手软件上,这样就相当于将两个软件通过虚拟串口连接在一起了,将他们配置成相同的串口
[单片机]
一文详解80C51单片机的中断系统
中断系统是计算机或者单片机的主要功能部件。 有了中断系统,便可以使微处理器具备对外部的异步事件进行处理的能力。 当微处理器的CPU正在执行程序的过程中,如果外部硬件或者内部组件有紧急的请求(如通信,断点,发生重大故障等),中断系统就可以将当前的程序暂停,优先处理这些中断请求。 这种处理方式,对整个系统的稳定性,健壮性至关重要,同时也能大大提高处理器的效率,使得系统的应用更加灵活多变。 中断的概念 中断是指单片机在执行程序的过程中,当出现异常情况或特殊请求时,单片机停止当前程序的运行,转向对这些异常情况或特殊请求进行处理,当处理结束后再返回原程序的间断处,继续执行原程序,这一现象称为中断。 中断是单片机实时处理内部或外部事件的一
[单片机]