标题:
基于51单片机的自动售水机程序
[打印本页]
作者:
053053
时间:
2018-12-23 01:23
标题:
基于51单片机的自动售水机程序
基于51的自动售水机
单片机源程序如下:
#include <reg52.h>
sbit BUZZ = P1^6;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
extern void KeyScan();
extern void LedScan();
extern void KeyDriver();
extern void shujuzhuanhuan(float danjia,float shui);
unsigned char T0RH = 0; //T0重载值的高字节
unsigned char T0RL = 0; //T0重载值的低字节
bit setIndex=0; //出水标志位 为1出水 为0不出水
bit setIndex1=0; //停水标志位 为1停水 为0出水
unsigned int chushuishijian=0;
float shuiL=0,zongjia=0;
extern unsigned char LedBuff[7];
/* 配置并启动T0,ms-T0定时时间 */
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp; //临时变量
tmp = 11059200 / 12; //定时器计数频率
tmp = (tmp * ms) / 1000; //计算所需的计数值
tmp = 65536 - tmp; //计算定时器重载值
tmp = tmp + 18; //补偿中断响应延时造成的误差
T0RH = (unsigned char)(tmp>>8); //定时器重载值拆分为高低字节
T0RL = (unsigned char)tmp;
TMOD &= 0xF0; //清零T0的控制位
TMOD |= 0x01; //配置T0为模式1
TH0 = T0RH; //加载T0重载值
TL0 = T0RL;
ET0 = 1; //使能T0中断
TR0 = 1; //启动T0
}
void main()
{
EA = 1; //开总中断
ENLED = 0;
ADDR3 = 1;
ConfigTimer0(2); //配置T0定时1ms
while(1)
{
KeyDriver();
if((setIndex==1)&&(setIndex1==0))
{
shujuzhuanhuan(0.5,shuiL);
}
if((setIndex1==1)&&(setIndex==0))
{
shujuzhuanhuan(0.5,zongjia);
}
}
}
/* T0中断服务函数,完成数码管、按键扫描与秒表计数 */
void InterruptTimer0() interrupt 1
{
static unsigned int tmr1s = 0;
TH0 = T0RH; //重新加载重载值
TL0 = T0RL;
LedScan(); //数码管扫描显示
KeyScan(); //按键扫描
if(setIndex)
{
tmr1s++;
if(tmr1s >= 500)
{
tmr1s = 0;
chushuishijian++;
shuiL=chushuishijian*0.1;
zongjia=shuiL*0.5;
BUZZ = ~BUZZ;
LedBuff[6]=0xfe;
}
}
}
/* 按键动作函数,根据键码执行相应的操作,keycode-按键键码 */
void KeyAction(unsigned char keycode)
{
if ((keycode>='0') && (keycode<='9')) //本例中不响应字符键
{
}
else if (keycode == 0x26) //向上键,
{
}
else if (keycode == 0x28) //向下键,清除
{
shuiL=0;
zongjia=0;
setIndex=0;
setIndex1=1;
}
else if (keycode == 0x25) //向左键,向左切换设置位
{
}
else if (keycode == 0x27) //向右键,向右切换设置位
{
}
else if (keycode == 0x0D) //回车键,进入设置模式/启用当前设置值
{
if (setIndex == 0) //不处于出水状态时,进入设置状态
{
setIndex=1;
setIndex1=0;
}
else //已处于出水状态时,保存时间并退出设置状态
{
}
}
else if (keycode == 0x1B) //Esc键,停水
{
setIndex=0;
setIndex1=1;
LedBuff[6]=0xff;
}
}
复制代码
所有资料51hei提供下载:
自动售水机.zip
(57.43 KB, 下载次数: 59)
2018-12-23 01:22 上传
点击文件名下载附件
自动售水机
下载积分: 黑币 -5
作者:
admin
时间:
2018-12-26 00:32
补全原理图或者详细说明一下电路连接即可获得100+黑币
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1