糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 基于51单片机的自动售货机proteus仿真程序原理图设计数码管液晶LCD1602显示

基于51单片机的自动售货机proteus仿真程序原理图设计数码管液晶LCD1602显示

时间:2018-10-20 18:24:28

相关推荐

基于51单片机的自动售货机proteus仿真程序原理图设计数码管液晶LCD1602显示

硬件设计

(末尾附文件)

方案1:

仿真图

方案2

仿真图:

#include<reg51.h>/*******************define*************************/#define WAIT_SALE0 //定义1602显示状态#define NO_WATER 1 #define INPUT_MONEY2 #define SALING3#define CHANGE4#define CANCLE5#define NO_DATA0#define water_change(x, y) ((x) & (~(0x01 << y))) //宏 控制水种类的切换 #define uint unsigned int#define uchar unsigned charunsigned char water_total[] = {10, 10, 10, 10, 10, 10, 10, 10}; unsigned char water_price[] = {1, 2, 3, 4, 5, 6, 7, 8};uchar code wait_sale[]="for sale"; //定义所显示的内容uchar code no_water[] = "no water!";uchar code price[] = "price:";uchar code number[] = "num:";uchar code sum[] = "SUM:";uchar code input[] = "INPUT:";uchar code change[] = "change:";uchar code put_water[] = "put water...";uchar code cancle[] = "cancle...";unsigned char e=0x00;sbit P2_0=P2^0; //定义接端口sbit P2_1=P2^1;sbit P2_2=P2^2;sbit P2_3=P2^3;sbit lcd_en=P3^4; sbit rs=P3^2;sbit rw = P3^3;/****************************************************//***********************function**********************************//************lcd 1602*************************/void lcd_1602_delay(uint z)//延时{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void lcd_1602_write_com(uchar com) //写命令{rs=0;rw=0;P2=com;lcd_1602_delay(5);lcd_en=1;lcd_1602_delay(5);lcd_en=0;}void lcd_1602_write_data(uchar date) //写数据{rs=1;rw=0;P2=date;lcd_1602_delay(5);lcd_en=1;lcd_1602_delay(5);lcd_en=0;}void lcd_1602_init()//LCD1602初始化函数{lcd_en=0;lcd_1602_write_com(0x38);lcd_1602_write_com(0x0e);lcd_1602_write_com(0x06);lcd_1602_write_com(0x01);}void lcd_1602_wait_sure() //显示'OK'&'NO'界面{lcd_1602_write_com(0x80+0x40);lcd_1602_write_data('O');lcd_1602_write_data('K');lcd_1602_write_com(0x80+0x4e);lcd_1602_write_data('N');lcd_1602_write_data('O');}void lcd_1602_show_num(uint num) // 1602显示数字的函数{if(num <= 9) {lcd_1602_write_data('0'+num);lcd_1602_write_data(' ');}else if(num >= 10 ) {lcd_1602_write_data('0'+num/10);lcd_1602_write_data('0'+num%10);}}void lcd1602_info_display(uint choose, uint num_type, uint num_count) //1602显示函数{int num;lcd_1602_write_com(0x01);switch(choose) {case WAIT_SALE:lcd_1602_write_com(0x80+0x03); //for(num = 0; num < 8; num++) {lcd_1602_write_data(wait_sale[num]);}break;case NO_WATER:lcd_1602_write_com(0x80+0x03);for(num = 0; num < 9; num++){lcd_1602_write_data(no_water[num]);}break;case SALING://pricelcd_1602_write_com(0x80+0x00);for(num = 0; num < 6; num++) {lcd_1602_write_data(price[num]);}lcd_1602_write_data('0'+(num_type+1));lcd_1602_write_data(' ');//numberlcd_1602_write_data(' ');for(num = 0; num < 4; num++) {lcd_1602_write_data(number[num]);}lcd_1602_show_num(num_count);break;case INPUT_MONEY://need moneylcd_1602_write_com(0x80+0x00);for(num = 0; num < 4; num++) {lcd_1602_write_data(sum[num]);}lcd_1602_show_num(num_type);//inputlcd_1602_write_data(' ');lcd_1602_write_data(' ');for(num = 0; num < 6; num++) {lcd_1602_write_data(input[num]);}lcd_1602_show_num(num_count);break;case CHANGE:if(!num_count) {//put waterlcd_1602_write_com(0x80+0x02);for(num = 0; num < 13; num++){lcd_1602_write_data(put_water[num]);}}else {//cancle waterlcd_1602_write_com(0x80+0x02); //取消选择时写命令退币for(num = 0; num < 9; num++) {lcd_1602_write_data(cancle[num]);}}//changelcd_1602_write_com(0x80+0x43);for(num = 0; num < 7; num++){lcd_1602_write_data(change[num]);}lcd_1602_show_num(num_type);break;default:break;}lcd_1602_write_com(0x0c);}void lcd_1602_saling(uint type, uint num){lcd1602_info_display(SALING, type, num);lcd_1602_wait_sure();}void lcd_1602_inputing(uint need, uint input){lcd1602_info_display(INPUT_MONEY, need, input);lcd_1602_wait_sure();}/*************************************************/void delay1(unsigned int t) // 延时函数{unsigned int i,j;for(i=0;i<t;i++)for(j=0;j<10;j++);}void out_water() //推出水函数{int i, j = 100; while(j--) {for(i = 0; i < 8; i++) {P0 = water_change(0xff, i);delay1(50);}}

.

文件仅供参考:

链接:/s/1Pf30Gi-PnwFxUdcRD6jw5g

提取码:iqml

.

如果觉得《基于51单片机的自动售货机proteus仿真程序原理图设计数码管液晶LCD1602显示》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。