/*-------------------------------
温度控制器V1.5
显示为三个共阳极LED
温度传感器用单总线DS18B20
CPU为2051,四个按键,分别为UP,DOWN,SET
温度调节上限为125度,下限为-55度
只能用于单只18B20
本软件仅供学习与参考,引用时请注明版权
http://www.cdle.net /> 明浩 2004/1/2
pnzwzw@cdle.net
-------------------------------*/
#include
#include
#define Key_UP P3_0 //上调温度
#define Key_DOWN P3_1 //下调温度
#define Key_SET P1_7 //设定键(温度设定,长按开电源)
#define RelayOutPort P3_5 //继电器输出
#define LEDPort P1 //LED控制口
#define LEDOneC P3_2 //LED DS1控制(百位)
#define LEDTwoC P3_3 //LED DS2控制(十位)
#define LEDThreeC P3_4 //LED DS3控制(个位)
#define TMPort P3_7 //DS1820 DataPort
unsigned char code LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9插件电感器0,0xFF,0xBF}; //0-9的LED笔划,0xFF为空,0xF7为负号
static unsigned char bdata StateREG; //可位寻址的状态寄存器一体成型电感器
sbit DS1820ON = StateREG^0; //DS1820是否存在
sbit SetTF = StateREG^1; //是否是在温度设置状态
sbit KeySETDown = StateREG^2; //是否已按过SET键标识
sbit PowTF = StateREG^3; //电源电源标识
sbit KeyTF = StateREG^4; //键盘是否允许
//sbit KeySETDowning = StateREG^5; //SET是否正在按下
static unsigned char bdata TLV _at_ 0x0029; //温度变量高低位
static unsigned char bdata THV _at_ 0x0028;
static signed char TMV; //转换后的温度值
static unsigned char KeyV,TempKeyV; //键值
static signed char TMRomV _at_ 0x0027; //高温限制
static signed char TMSetV _at_ 0x0026; //温度设定值
static unsigned char KSDNum; //SET键连按时的采集次数
static unsigned char IntNum,IntNum2,IntNum3; //中断发生次数,IntNum用于SET长按检测,IntNum2用于设定状态时LED闪烁
static signed char LED_One,LED_Two,LED_Three; //LED的显示位 LED_One为十位,LED_Two为个位
static unsigned char Sign; //负号标识
void main(void)
{
void InitDS1820(void); //定义函数
void ROMDS1820(void);
void TMVDS1820(void);
void TMRDS1820(void);
void TMWDS1820(void);
void TMREDS1820(void);
void TMERDS1820(void);
void ReadDS1820(void);
void WriteDS1820(void);
void Delay_510(void);
void Delay_110(void);
void Delay_10ms(void);
void Delay_4s(void);
void V2ToV(void);
StateREG = 0; //初始化变量
SetTF = 1;
PowTF = 1; //关电源
THV = 0;
TLV = 0;
TMV = 0;
KeyV = 0;
TempKeyV = 0;
KSDNum = 0;
IntNum = 0;
IntNum2 = 0;
IntNum3 = 0;
LED_One = 0;
LED_Two = 0;
InitDS1820(); //初始化
ROMDS1820(); //跳过ROM
TMERDS1820(); //E2PRAM中温度上限值调入RAM
InitDS1820(); //初始化
ROMDS1820(); //跳过ROM
TMRDS1820(); //读出温度指令
ReadDS1820(); //读出温度值和上限值
TMSetV = TMRomV; //拷贝保存在DS18B20ROM里的上限值到TMSetV
EA = 1; //允许CPU中断
ET0 = 1; //定时器0中断打开
TMOD = 0x1; //设定时器0为模式1,16位模式
TH0=0xB1;
TL0=0xDF; //设定时值为20000us(20ms)
TR0 = 1; //开始定时
while(1);
}
//定时器0中断外理中键扫描和显示
void KeyAndDis_Time0(void) interrupt 1 using 2
{
TH0=0xB1;
TL0=0xDF; //设定时值为20000us(20ms)
LEDPort = 0xFF;
if (!Key_UP)
KeyV = 1;
if (!Key_DOWN)
KeyV = 2;
if (!Key_SET)
KeyV = 3;
//KeySETDowning = 0; //清除
if (KeyV != 0) //有键按下
{
Delay_10ms(); //延时防抖 按下10ms再测
if (!Key_UP)
TempKeyV = 1;
if (!Key_DOWN)
TempKeyV = 2;
if (!Key_SET)
TempKeyV = 3;
if (KeyV == Temp工字电感器KeyV) //两次值相等为确定接下了键
{
if (KeyV == 3) //按下SET键,如在SET状态就退出,否则进入
{
//KeySETDowning = 1; //表明SET正在按下
PowTF = 0; //电源标识开
if (!KeyTF)
if (SetTF)
{
SetTF = 0; //标识位标识退出设定
InitDS1820(); //初始化
ROMDS1820(); //跳过ROM
TMWDS1820(); //写温度上限指令
WriteDS1820(); //写温度上限到DS18B20ROM
WriteDS1820(); /电感生产厂家/写温度上限到DS18B20ROM
WriteDS1820(); //写温度上限到DS18B20ROM
InitDS1820(); //初始化
ROMDS1820(); //跳过ROM
TMREDS1820(); //温度上限值COPY回E2PRAM1
利用FPGA 控制模块,设计了OLED 真彩色动态图像驱动控制电路。介绍采用FPGA 实现OLED 外围控制电路和256 级灰度的方法,并分析电路中模块的作用及整个电路的工作过程。电路系统采用基于Al (1)使用反向积分器而没有使用高通滤波电路,使得调理电路通道带宽的低频截止频率不方便调节,不能有效滤除l~10Hz的低频噪声。(2)电极片极化电势差异会导致初级放大的输出和参考 功率转换开关频率一直在不断提高,以便最大限度地提升功率密度,软开关技术如零电压开关(ZVS)正逐渐普及以进一步提高开关频率。随着开关频率的增大,功率MOSFET的寄生特性不再可以忽略不计。对于采
上一篇: 单片机的单CPU仿真器的设计
下一篇:功率电感器
1/3 1 2 3 下一页 尾页 |