AVR128单片机 自动售水机

一、系统方案

1、设计使用两个按键分别为S1和S2及一个发光二极管LED。S1为出水控制按键,当S1按下,表示售水机持续出水,继电器(库元件relay)接通,指示灯LED亮。S2为停水控制键,当S2按下,继电器断开,停止出水,指示灯LED熄灭。

2、用两片8LED数码管(库中的器件名为7SEG-MPX8-CA-BLUE或7SEG-MPX8-CC-BLUE)或液晶芯片LM041L或LM041液晶芯片LGM12641BS1R LM3228显示费率、出水总量及总价。

3、费率单位为元/升,假定费率为0.5元/升。出水总量单位为升,总价单位为元。假定出水速度为100ml/秒。费率、出水量、总价均保留两位有效数字。

4、用定时器设计一个1秒的定时间隔,当售水机出水键S1按下后同时启动该秒定时器,用于实时显示出水量,每过1秒,出水量加100ml,按下S2停止出水键后,则显示总价。不足1秒按1秒计算。

二、硬件设计

原理图如下:

三、单片机软件设计

1、首先是系统初始化

//***********************************************************************

// 显示屏初始化函数

//***********************************************************************

void LCD_init(void)

{

LCD_write_com(0x38); //显示模式设置

delay_nms(5);

LCD_write_com(0x08); //显示关闭

delay_nms(5);

LCD_write_com(0x01); //显示清屏

delay_nms(5);

LCD_write_com(0x06); //显示光标移动设置

delay_nms(5);

LCD_write_com(0x0C); //显示开及光标设置

delay_nms(5);

}

2、液晶显示程序

//***********************************************************************

// 显示屏命令写入函数

//***********************************************************************

void LCD_write_com(unsigned char com)

{

RS_CLR;

RW_CLR;

EN_SET;

Data_IO = com;

delay_nms(5);

EN_CLR;

}

//***********************************************************************

// 显示屏数据写入函数

//***********************************************************************

void LCD_write_data(unsigned char data)

{

RS_SET;

RW_CLR;

EN_SET;

Data_IO = data;

delay_nms(5);

EN_CLR;

}

3、按键程序

//按键扫描函数

void scan_key()

{

if(key1) //如果按键1按下

{

if(enable==0) //如果当前是停止状态,则对出水量进行清0操作,保证每次出水都是从0 开始

{

water_cnt = 0 ;

}

enable = 1; //置位使能标志位

}else if(key2) //当按键2按下,停止出水

{

enable = 0; //清除标志位

vision_cost();

}

}

4、核心算法程序

void main()

{

DDRA=0XFF; //设置端口A为输出

PORTA=0xff;

DDRB=0XFF; //设置端口B为输出

PORTB=0x00;

DDRC=0XFC; //数值按键为输入模式

PORTC=0xF3;

DDRD=0XFF; //设置端口D为输出

PORTD=0XFF;

DDRE=0XFF; //设置端口E为输出

PORTE=0XFF;

DDRF=0XFF; //设置端口F为输出

PORTF=0XF0;

//LCD初始化

//定时器1配置

//TCCR1B按键中配置

LCD_init();

vision_init();

timer1_init(); //定时器初始化

TIMSK = 0x04; //timer interrupt sources

SEI();

while(1)

{

scan_key(); //扫描按键,

vision_count();

delay_nms(500); //延时,主要控制刷新周期

}

}

四、 proteus仿真设计

Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

相关推荐
智商偏低3 小时前
单片机之helloworld
单片机·嵌入式硬件
青牛科技-Allen4 小时前
GC3910S:一款高性能双通道直流电机驱动芯片
stm32·单片机·嵌入式硬件·机器人·医疗器械·水泵、
森焱森6 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
白鱼不小白6 小时前
stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
stm32·单片机·嵌入式硬件
S,D6 小时前
MCU引脚的漏电流、灌电流、拉电流区别是什么
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·硬件工程
芯岭技术9 小时前
PY32F002A单片机 低成本控制器解决方案,提供多种封装
单片机·嵌入式硬件
youmdt10 小时前
Arduino IDE ESP8266连接0.96寸SSD1306 IIC单色屏显示北京时间
单片机·嵌入式硬件
嘿·嘘10 小时前
第七章 STM32内部FLASH读写
stm32·单片机·嵌入式硬件
Meraki.Zhang10 小时前
【STM32实践篇】:I2C驱动编写
stm32·单片机·iic·驱动·i2c
几个几个n12 小时前
STM32-第二节-GPIO输入(按键,传感器)
单片机·嵌入式硬件