单片机自动售货机c语言,单片机自动售货机源代码
/******************************************************
******************************************************/
#include
#include
#define uint unsigned int
#define uchar unsigned char
//延时子程序模块
//**********************************************
void mdelay(uint delay)
{
uint i;
for(; delay>0; delay--)
{
for(i=0; i<80; i++) //1ms延时.
{
;
}
}
}
//************************************************
void show(); //液晶显示程序
//****************************************
//12864液晶显示部分子程序模块
//****************************************
sbit K1 = P0^4;
sbit K2 = P0^3;
sbit K3 = P0^2;
sbit K4 = P0^1;
sbit K5 = P0^0;
sbit K6 = P1^0;
sbit K7 = P1^1;
sbit K8 = P1^2;
sbit rs = P0^5;
sbit rw = P0^6;
sbit e = P0^7;
sbit beep = P1^5;
#define lcddata P2
unsigned char count=0,m=30,n,nn,money=0,du; //定义计数变量
uchar Time[6];
sbit busy=P0^7; //lcd busy bit
void wr_d_lcd(uchar content);
void wr_i_lcd(uchar content);
void clrram_lcd (void);
void init_lcd(void);
void busy_lcd(void);
void rev_row_lcd(uchar row);
void rev_co_lcd(uchar row,uchar col,uchar mode);
void clr_lcd(void);
void wr_co_lcd(uchar row,uchar col,uchar lcddata1,uchar lcddtta2);
void wr_row_lcd(uchar row,char *p);
//******************************************************************* */
//因为引脚的定义DB0..DB7是从P1.7...P1.0排列的 */
//所以顺序需要调换一下
//*******************************************************************
uchar swapbit(uchar udata)
{
uchar ii,tmp=0;
for(ii=0; ii<8; ii++)
{
tmp<<=1;
if(udata&0x01)
{
tmp|=0x01;
}
udata>>=1;
}
return tmp;
}
//**********************************
//液晶初始化
//**********************************
void init_lcd(void)
{
wr_i_lcd(0x06); /*光标的移动方向*/
wr_i_lcd(0x0c); /*开显示,关游标*/
}
//***********************************
//填充液晶DDRAM全为空格
//**********************************
void clrram_lcd (void)
{
wr_i_lcd(0x30);
wr_i_lcd(0x01);
}
//***********************************
//对液晶写数据
//content为要写入的数据
//***********************************
void wr_d_lcd(uchar content)
{
// busy_lcd();
rs=1;
rw=0;
lcddata=swapbit(content);
e=1;
;
e=0;
}
//********************************
//对液晶写指令
//content为要写入的指令代码
//*****************************
void wr_i_lcd(uchar content)
{
// busy_lcd();
rs=0;
rw=0;
lcddata=swapbit(content);
e=1;
;
e=0;
}
//********************************
//液晶检测忙状态
//在写入之前必须执行
//********************************
void busy_lcd(void)
{
lcddata=0xff;
rs=0;
rw=1;
e =1;
while(busy==1);
e =0;
}
//********************************
//指定要显示字符的坐标
//*******************************
void gotoxy(unsigned char y, unsigned char x)
{
if(y==1)
wr_i_lcd(0x80|x);
if(y==2)
wr_i_lcd(0x90|x);
if(y==3)
wr_i_lcd((0x80|x)+8);
if(y==4)
wr_i_lcd((0x90|x)+8);
}
//**********************************
//液晶显示字符串程序
//**********************************
void print(uchar *str)
{
while(*str!='\0')
{
wr_d_lcd(*str);
str++;
}
}
//***************************************
//液晶显示主程序模块
//***************************************
void show()
{
if(nn<10)
{
gotoxy(1,0);
print("按键选择货物:");
mdelay(10);
gotoxy(2,0);
print("①矿泉水(1.5元)");
mdelay(10); //扫描延时
gotoxy(3,0);
print("②红茶(3元) ");
mdelay(10); //扫描延时
gotoxy(4,0);
print("③绿茶(4元)");
mdelay(10); //扫描延时
}
clrram_lcd ();
if(nn>11)
{
gotoxy(1,0);
print("④啤酒(5元)");
mdelay(10);
gotoxy(2,0);
print("⑤红牛(6元)");
mdelay(10); //扫描延时
gotoxy(3,0);
print("选定后投入硬币");
mdelay(10); //扫描延时
}
}
//***************************************
//按键选择货物
//***************************************
void key()
{
if(K4==0)//按键1
{
clrram_lcd ();
while(1)
{
if(m==6)beep=0;
if(m==5)beep=1;
if(m==0)
{
if(0
{
clrram_lcd ();
gotoxy(1,0);
print("投币不足购买失败");
mdelay(10);
gotoxy(2,0);
print("退钱: 元");
mdelay(10);
Time[0]=money/10+'0';
Time[1]='.';
Time[2]=money%10+'0';
Time[3]='\0';
gotoxy(2,3);
print(Time);
mdelay(6000);
money=0;
}
clrram_lcd ();
break;
}
gotoxy(1,0);
print("已选矿泉水");
mdelay(10);
gotoxy(2,0);
print("货物价格:1.5元");
mdelay(10);
gotoxy(3,0);
print("投币金额: 元");
mdelay(10);
gotoxy(4,0);
print("规定时间:");
mdelay(10);
if(n==0)
{
gotoxy(3,5);
print(Time);
mdelay(100);
}
if(n==1)
{
gotoxy(4,7);
print(Time);
mdelay(10);
}
if(K1==0)
{
while(K1==0);
mdelay(10);
money=money+100;
}
if(K2==0)
{
while(K2==0);
mdelay(10);
money=money+50;
}
if(K3==0)
{
while(K3==0);
mdelay(10);
money=money+10;
}
if(money>=15)
{
clrram_lcd ();
gotoxy(1,0);
print("矿泉水购买成功");
mdelay(10);
gotoxy(2,0);
print("找钱: 元");
mdelay(10);
du=money-15;
Time[0]=du/10+'0';
Time[1]='.';
Time[2]=du%10+'0';
Time[3]='\0';
gotoxy(2,3);
print(Time);
mdelay(6000);
money=0;
clrram_lcd ();
break;
}
}
}
if(K5==0)//按键2
{
clrram_lcd ();
while(1)
{
if(m==6)beep=0;
if(m==5)beep=1;
if(m==0)
{
if(0
{
clrram_lcd ();
gotoxy(1,0);
print("投币不足购买失败");
mdelay(10);
gotoxy(2,0);
print("退钱: 元");
mdelay(10);
Time[0]=money/10+'0';
Time[1]='.';
Time[2]=money%10+'0';
Time[3]='\0';
gotoxy(2,3);
print(Time);
mdelay(6000);
money=0;
}
clrram_lcd ();
break;
}
gotoxy(1,0);
print("已选红茶");
mdelay(10);
gotoxy(2,0);
print("货物价格:3元");
mdelay(10);
gotoxy(3,0);
print("投币金额: 元");
mdelay(10);
gotoxy(4,0);
print("规定时间:");
mdelay(10);
if(n==0)
{
gotoxy(3,5);
print(Time);
mdelay(100);
}
if(n==1)
{
gotoxy(4,7);
print(Time);
mdelay(10);
}
if(K1==0)
{
while(K1==0);
mdelay(10);
money=money+100;
}
if(K2==0)
{
while(K2==0);
mdelay(10);
money=money+50;
}
if(K3==0)
{
while(K3==0);
mdelay(10);
money=money+10;
}
if(money>=30)
{
clrram_lcd ();
gotoxy(1,0);
print("红茶购买成功");
mdelay(10);
gotoxy(2,0);
print("找钱: 元");
mdelay(10);
du=money-30;
Time[0]=du/10+'0';
Time[1]='.';
Time[2]=du%10+'0';
Time[3]='\0';
gotoxy(2,3);
print(Time);
mdelay(6000);
money=0;
clrram_lcd ();
break;
}
}
}
if(K6==0)//按键3
{
if(m==6)beep=0;
if(m==5)beep=1;
clrram_lcd ();
while(1)
{
if(m==0)
{
if(0
{
clrram_lcd ();
gotoxy(1,0);
print("投币不足购买失败");
mdelay(10);
gotoxy(2,0);
print("退钱: 元");
mdelay(10);
Time[0]=money/10+'0';
Time[1]='.';
Time[2]=money%10+'0';
Time[3]='\0';
gotoxy(2,3);
print(Time);
mdelay(6000);
money=0;
}
clrram_lcd ();
break;
}
gotoxy(1,0);
print("已选绿茶");
mdelay(10);
gotoxy(2,0);
print("货物价格:4元");
mdelay(10);
gotoxy(3,0);
print("投币金额: 元");
mdelay(10);
gotoxy(4,0);
print("规定时间:");
mdelay(10);
if(n==0)
{
gotoxy(3,5);
print(Time);
mdelay(100);
}
if(n==1)
{
gotoxy(4,7);
print(Time);
mdelay(10);
}
if(K1==0)
{
while(K1==0);
mdelay(10);
money=money+100;
}
if(K2==0)
{
while(K2==0);
mdelay(10);
money=money+50;
}
if(K3==0)
{
while(K3==0);
mdelay(10);
money=money+10;
}
if(money>=40)
{
clrram_lcd ();
gotoxy(1,0);
print("绿茶购买成功");
mdelay(10);
gotoxy(2,0);
print("找钱: 元");
mdelay(10);
du=money-40;
Time[0]=du/10+'0';
Time[1]='.';
Time[2]=du%10+'0';
Time[3]='\0';
gotoxy(2,3);
print(Time);
mdelay(6000);
money=0;
clrram_lcd ();
break;
}
}
}
if(K7==0)//按键4
{
if(m==6)beep=0;
if(m==5)beep=1;
m=30;
clrram_lcd ();
while(1)
{
if(m==0)
{
if(0
{
clrram_lcd ();
gotoxy(1,0);
print("投币不足购买失败");
mdelay(10);
gotoxy(2,0);
print("退钱: 元");
mdelay(10);
Time[0]=money/10+'0';
Time[1]='.';
Time[2]=money%10+'0';
Time[3]='\0';
gotoxy(2,3);
print(Time);
mdelay(6000);
money=0;
}
clrram_lcd ();
break;
}
gotoxy(1,0);
print("已选啤酒");
mdelay(10);
gotoxy(2,0);
print("货物价格:5元");
mdelay(10);
gotoxy(3,0);
print("投币金额: 元");
mdelay(10);
gotoxy(4,0);
print("规定时间:");
mdelay(10);
if(n==0)
{
gotoxy(3,5);
print(Time);
mdelay(100);
}
if(n==1)
{
gotoxy(4,7);
print(Time);
mdelay(10);
}
if(K1==0)
{
while(K1==0);
mdelay(10);
money=money+100;
}
if(K2==0)
{
while(K2==0);
mdelay(10);
money=money+50;
}
if(K3==0)
{
while(K3==0);
mdelay(10);
money=money+10;
}
if(money>=50)
{
clrram_lcd ();
gotoxy(1,0);
print("啤酒买成功");
mdelay(10);
gotoxy(2,0);
print("找钱: 元");
mdelay(10);
du=money-50;
Time[0]=du/10+'0';
Time[1]='.';
Time[2]=du%10+'0';
Time[3]='\0';
gotoxy(2,3);
print(Time);
money=0;
clrram_lcd ();
break;
}
}
}
if(K8==0)//按键5
{
if(m==6)beep=0;
if(m==5)beep=1;
m=30;
clrram_lcd ();
while(1)
{
if(m==0)
{
if(0
{
clrram_lcd ();
gotoxy(1,0);
print("投币不足购买失败");
mdelay(10);
gotoxy(2,0);
print("退钱: 元");
mdelay(10);
Time[0]=money/10+'0';
Time[1]='.';
Time[2]=money%10+'0';
Time[3]='\0';
gotoxy(2,3);
print(Time);
money=0;
}
clrram_lcd ();
break;
}
gotoxy(1,0);
print("已选红牛");
mdelay(10);
gotoxy(2,0);
print("货物价格:6元");
mdelay(10);
gotoxy(3,0);
print("投币金额: 元");
mdelay(10);
gotoxy(4,0);
print("规定时间:");
mdelay(10);
if(n==0)
{
gotoxy(3,5);
print(Time);
mdelay(100);
}
if(n==1)
{
gotoxy(4,7);
print(Time);
mdelay(10);
}
if(K1==0)
{
while(K1==0);
mdelay(10);
money=money+100;
}
if(K2==0)
{
while(K2==0);
mdelay(10);
money=money+50;
}
if(K3==0)
{
while(K3==0);
mdelay(10);
money=money+10;
}
if(K1==0)
{
while(K1==0);
mdelay(10);
money=money+100;
}
if(K2==0)
{
while(K2==0);
mdelay(10);
money=money+50;
}
if(K3==0)
{
while(K3==0);
mdelay(10);
money=money+10;
}
if(money>=60)
{
clrram_lcd ();
gotoxy(1,0);
print("红牛买成功");
mdelay(10);
gotoxy(2,0);
print("找钱: 元");
mdelay(10);
du=money-60;
Time[0]=du/10+'0';
Time[1]='.';
Time[2]=du%10+'0';
Time[3]='\0';
gotoxy(2,3);
print(Time);
money=0;
clrram_lcd ();
break;
}
}
}
}
//************************************
//主程序
//*************************************
main()
{
TMOD=0x01; //T0 工作在方式1 16位计数器
TH0=(65536-5000)/256; //预先 设定定时器 初值,50毫秒
TL0=(65536-5000)%256;
EA=1; //开启 总中断
ET0=1; //开启定时器 0 中断
TR0=1; //定时器 0 启动计数
init_lcd();
clrram_lcd();
while(1)
{
show();
key();
}
}
void time0(void) interrupt 1
{
TH0=(65536-50000)/256; //重新设置定时器 初值,产生50MS定时中断
TL0=(65536-50000)%256;
count++; //50ms太短,闪烁频率太快
if(count==10)
{
if(n==0)
{
Time[0]=m/10+'0';
Time[1]=m%10+'0';
Time[2]='\0';
}
if(n==1)
{
Time[0]=money/10+'0';
Time[1]='.';
Time[2]=money%10+'0';
}
Time[3]='\0';
Time[4]='\0';
count=0;
if(m==0)m=30;
n++;
if(n==2)
{
m--;
n=0;
}
nn++;
if(nn==20)
{
nn=0;
}
}
}
单片机自动售货机c语言,单片机自动售货机源代码相关推荐
- centos 自动补全c语言,YouCompleteMe自动补全C语言大型项目 ycm
YouCompleteMe自动补全C语言大型项目 我的ycm在vimrc中的配置" YouCompleteMe相关配置 let g:ycm_server_python_interpreter ...
- 单片机 多机通讯c语言,单片机多机串口通信.doc
单片机多机串口通信 摘要 本文详细介绍了基于RS-485总线的单片机与多台单片机间的串行通信原理.实现方法和相应的通信硬件.软件设计.该设计是由单片机与单片机组成的主从控制系统,其中单片 关键词: 单 ...
- 单片机实现水位控制C语言,单片机课程设计 水位自动控制.doc
单片机课程设计 水位自动控制 河南机电高等专科学校电气工程系 电子课程设计报告 设计题目:水位自动控制 专业: 电机与电器 班级: 101 班 学号: 姓名: 指导教师: 设计时间: 2012-6-2 ...
- 单片机tcp ip协议c语言,单片机TCP IP协议栈实现的原理
对已TCP IP协议栈,我们已经说了很多关于它的原理相关的知识了.但是只有原理是不够的,在这方面我们将要举出一个实际操作实例为大家讲解,那么首先我们来看一下有关于单片机TCP/IP就是在单片机上运行的 ...
- 单片机设计时钟程序c语言,单片机电子时钟程序设计
共用体除非必要,否则我们不推荐使用,枚举的用法比较简单,在本书 19 章的项目实践中有很好的示例,这节课我们先来练习一下结构体的使用.下边这个程序的功能是一个带日期的电子钟,相当于一个简易万年历了,并 ...
- 单片机断电记忆方法C语言,单片机实现具有掉电记忆功能的计时器
#define uchar unsigned char #define uint unsigned int /*IIC总线端口定义*/ sbit SDA = P2^0; sbit SCL = P2^1 ...
- 单片机人体感应灯c语言,单片机光控人体感应灯案例.doc
本科毕业论文(设计) 题目: 单片机光控人体感应灯 学院: 物理与电子科学学院 班级: 2010级电子三班 姓名: 许鋆 指导教师: 杨春花 职称: 教授 完成日期: 2014 年 5 月 26 日 ...
- 单片机课程设计电梯(c语言),单片机课程设计之电梯控制系统.docx
PAGE \* MERGEFORMAT 23 JIANGSU UNIVERSITY OF TECHNOLOGY 单片机应用系统设计 电梯控制器 学 院: 电气信息工程学院 专 业: 测控技术与仪器 班 ...
- 单片机音频驱动实验C语言,单片机实验:音乐改编
<单片机实验:音乐改编>由会员分享,可在线阅读,更多相关<单片机实验:音乐改编(7页珍藏版)>请在人人文库网上搜索. 1.实验1将歌曲播放程序两只老虎改变为另一首歌曲(如Hap ...
最新文章
- 2021暑假实习-SSM超市积分管理系统-day10笔记
- 炫界 (667) -(回应骑两小)_为什么那么多人喜欢骑地平线
- 语句:分支语句、switch case ——7月22日
- Databricks 企业版 SparkDelta Lake 引擎助力 Lakehouse 高效访问
- wamp 下的mysql密码_wamp下更改mysql密码
- TFBOYS网易云音乐演唱会破纪录 同时在线人数超78万
- 计算机技术薄弱对我省影响,计算机技术在贵州省西南地区的运用前景.docx
- 【2012百度之星资格赛】E:C++ 与Java
- html实现“加入收藏”代码
- beescms网站渗透测试和修复意见
- 迅雷下载电影天堂片源,出现“应版权方要求,文件无法下载”的解决方法
- King Arthur's Knights 【HDU - 4337】【哈密顿回路性质Dirac定理】
- bt和wifi的共存
- 【Windows】Windows10 企业版 LTSC/Windows Server 2019如何安装应用商店和UWP应用?
- qcon2016_从QCon San Francisco 2016中学到的重点知识和教训
- 两个生物特征识别会议的最新情况
- Unity特效基础:简易爆炸效果
- termux python3-dev_termux进阶
- 谈PLM和ERP的差异比较
- 担心基站高辐射?快来看5G建设电磁辐射科普宣传片
热门文章
- UCI on PUSCH 协议角度解析
- 重磅 | 向未来致敬!2017网易未来科技峰会乌镇论坛将于12月4日在乌镇举办
- PLM系统意义是什么?
- 系统的进程号PID的了解
- VSCrawler 爬虫 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 解决方案
- ClickHouse入门技术分享PPT之一
- Pyinstaller将yolov5的detect.py封装成detect.exe,并用C++调用
- 循环队列 (顺序存储)
- Codeforces765F. Souvenirs
- 尚学堂java答案解析 第一章