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

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

#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语言,单片机自动售货机源代码相关推荐

  1. centos 自动补全c语言,YouCompleteMe自动补全C语言大型项目 ycm

    YouCompleteMe自动补全C语言大型项目 我的ycm在vimrc中的配置" YouCompleteMe相关配置 let g:ycm_server_python_interpreter ...

  2. 单片机 多机通讯c语言,单片机多机串口通信.doc

    单片机多机串口通信 摘要 本文详细介绍了基于RS-485总线的单片机与多台单片机间的串行通信原理.实现方法和相应的通信硬件.软件设计.该设计是由单片机与单片机组成的主从控制系统,其中单片 关键词: 单 ...

  3. 单片机实现水位控制C语言,单片机课程设计 水位自动控制.doc

    单片机课程设计 水位自动控制 河南机电高等专科学校电气工程系 电子课程设计报告 设计题目:水位自动控制 专业: 电机与电器 班级: 101 班 学号: 姓名: 指导教师: 设计时间: 2012-6-2 ...

  4. 单片机tcp ip协议c语言,单片机TCP IP协议栈实现的原理

    对已TCP IP协议栈,我们已经说了很多关于它的原理相关的知识了.但是只有原理是不够的,在这方面我们将要举出一个实际操作实例为大家讲解,那么首先我们来看一下有关于单片机TCP/IP就是在单片机上运行的 ...

  5. 单片机设计时钟程序c语言,单片机电子时钟程序设计

    共用体除非必要,否则我们不推荐使用,枚举的用法比较简单,在本书 19 章的项目实践中有很好的示例,这节课我们先来练习一下结构体的使用.下边这个程序的功能是一个带日期的电子钟,相当于一个简易万年历了,并 ...

  6. 单片机断电记忆方法C语言,单片机实现具有掉电记忆功能的计时器

    #define uchar unsigned char #define uint unsigned int /*IIC总线端口定义*/ sbit SDA = P2^0; sbit SCL = P2^1 ...

  7. 单片机人体感应灯c语言,单片机光控人体感应灯案例.doc

    本科毕业论文(设计) 题目: 单片机光控人体感应灯 学院: 物理与电子科学学院 班级: 2010级电子三班 姓名: 许鋆 指导教师: 杨春花 职称: 教授 完成日期: 2014 年 5 月 26 日 ...

  8. 单片机课程设计电梯(c语言),单片机课程设计之电梯控制系统.docx

    PAGE \* MERGEFORMAT 23 JIANGSU UNIVERSITY OF TECHNOLOGY 单片机应用系统设计 电梯控制器 学 院: 电气信息工程学院 专 业: 测控技术与仪器 班 ...

  9. 单片机音频驱动实验C语言,单片机实验:音乐改编

    <单片机实验:音乐改编>由会员分享,可在线阅读,更多相关<单片机实验:音乐改编(7页珍藏版)>请在人人文库网上搜索. 1.实验1将歌曲播放程序两只老虎改变为另一首歌曲(如Hap ...

最新文章

  1. 2021暑假实习-SSM超市积分管理系统-day10笔记
  2. 炫界 (667) -(回应骑两小)_为什么那么多人喜欢骑地平线
  3. 语句:分支语句、switch case ——7月22日
  4. Databricks 企业版 SparkDelta Lake 引擎助力 Lakehouse 高效访问
  5. wamp 下的mysql密码_wamp下更改mysql密码
  6. TFBOYS网易云音乐演唱会破纪录 同时在线人数超78万
  7. 计算机技术薄弱对我省影响,计算机技术在贵州省西南地区的运用前景.docx
  8. 【2012百度之星资格赛】E:C++ 与Java
  9. html实现“加入收藏”代码
  10. beescms网站渗透测试和修复意见
  11. 迅雷下载电影天堂片源,出现“应版权方要求,文件无法下载”的解决方法
  12. King Arthur's Knights 【HDU - 4337】【哈密顿回路性质Dirac定理】
  13. bt和wifi的共存
  14. 【Windows】Windows10 企业版 LTSC/Windows Server 2019如何安装应用商店和UWP应用?
  15. qcon2016_从QCon San Francisco 2016中学到的重点知识和教训
  16. 两个生物特征识别会议的最新情况
  17. Unity特效基础:简易爆炸效果
  18. termux python3-dev_termux进阶
  19. 谈PLM和ERP的差异比较
  20. 担心基站高辐射?快来看5G建设电磁辐射科普宣传片

热门文章

  1. UCI on PUSCH 协议角度解析
  2. 重磅 | 向未来致敬!2017网易未来科技峰会乌镇论坛将于12月4日在乌镇举办
  3. PLM系统意义是什么?
  4. 系统的进程号PID的了解
  5. VSCrawler 爬虫 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 解决方案
  6. ClickHouse入门技术分享PPT之一
  7. Pyinstaller将yolov5的detect.py封装成detect.exe,并用C++调用
  8. 循环队列 (顺序存储)
  9. Codeforces765F. Souvenirs
  10. 尚学堂java答案解析 第一章