微波炉控制系统c语言编程

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
E=1;
delay50us(1);
E=0;
}
void lcd_wdat(uchar dat)//写数据函数
{
delay50us(1);
RS=1;
RW=0;
DB=dat;
E=1;
delay50us(1);
E=0;
}
void lcd_init()//初始化
{
lcd_wcom(0x30);
delay50us(2);
lcd_wdat(o_sec%10+0x30);
lcd_wstr("秒");
lcd_wcom(0x9b);lcd_wstr("开始");
order_mark(sel);
while(key_up==0)key_get();
while(key_up==1)key_get();
switch(key_x)
{
}
}
/*****************************************************************************/
//应用层函数
//显Baidu Nhomakorabea相关信息
void dis_author()//作者
{
lcd_clr();
lcd_wcom(0x80);lcd_wstr("作者:");lcd_wstr("黄志辉");
//定义
sbit WEI_LE=P1^1;//数码管控制
sbit DUAN_LE=P1^0;
sbit RS=P2^0;//LCD端口
sbit RW=P2^1;
sbit E=P2^2;
#define DB P0
sbit PSB=P2^3;
sbit NC=P2^4;
sbit RST=P2^5;
sbit BEEP=P1^0;//蜂鸣器
{
uchar quit=0;
static uchar sel=1;
static uchar custom_fire=1,custom_min=00,custom_sec=00;
fire=custom_fire;min=custom_min;sec=custom_sec;
do
{
lcd_clr();
lcd_wcom(0x82);lcd_wstr(" [自定义]");
if(o_hour==-1)o_hour=23;
break;
case 2:o_min=o_min+a;
if(o_min==60)o_min=0;
if(o_min==-1)o_min=59;
break;
case 3:o_sec=o_sec+a;
if(o_sec==60)o_sec=0;
if(o_sec==-1)o_sec=59;
char a;
do
{
dis_fire_time();
shift_mark(custom_sel);
lcd_wcom(0x0f);
while(key_up==0)key_get();
while(key_up==1)key_get();
switch(key_x)
{
case 4:quit=1;break;
#include <reg52.h>
#include <intrins.h>
#define nop _nop_
#define uchar unsigned char
#define uint unsigned int
/*****************************************************************************/
}
/*****************************************************************************/
//底层驱动
//LCD驱动
void lcd_wcom(uchar com)//写指令函数
{
delay50us(1);
RS=0;
RW=0;
DB=com;
lcd_wdat(min/10+0x30);
lcd_wdat(min%10+0x30);
lcd_wstr(":");
lcd_wdat(sec/10+0x30);
lcd_wdat(sec%10+0x30);
}
void shift_fire_time(uchar custom_sel)//进行调整
{
uchar quit=0;
sbit KEY1=P3^4;//按键
sbit KEY2=P3^5;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
uchar key_up,key_x;//按键变量
uchar fire,min,sec;//火力和时间变量
uchar o_hour,o_min,o_sec;//预约时间变量
{
uchar quit=0;
char a;
do
{
lcd_wcom(0x89);
lcd_wdat(o_hour/10+0x30);
lcd_wdat(o_hour%10+0x30);
lcd_wstr("时");
lcd_wdat(o_min/10+0x30);
lcd_wdat(o_min%10+0x30);
/*****************************************************************************/
//辅助函数
//延迟函数
void delay50us(uint m)//for双重嵌套型。公式:t=m*(2*n+12)+偏差值。m比较小时,偏差为+13;m=0时,t=14。
lcd_wcom(0x93);lcd_wstr("董晓敏");
lcd_wcom(0x8b);lcd_wstr("蔡定材");
while(key_up==0)key_get();
key_x=0;
}
//预约时间
void order_mark(uchar sel)//预约光标
{
switch(sel)
{
case 1:lcd_wcom(0x89);lcd_wcom(0x0e);break;
switch(key_x)
{
case 4:quit=1;break;
case 3:quit=1;break;
case 2:a=1;break;
case 1:a=-1;
}
if(key_x==2 || key_x==1)
{
switch(sel)
{
case 1:o_hour=o_hour+a;
if(o_hour==24)o_hour=0;
case 3:quit=1;break;
case 2:a=1;break;
case 1:a=-1;
}
if(key_x==2 || key_x==1)
{
switch(custom_sel)
{
case 1:fire=fire+a;
if(fire==0)fire=1;
if(fire==9)fire=8;
break;
lcd_wcom(0x89);
lcd_wdat(o_hour/10+0x30);
lcd_wdat(o_hour%10+0x30);
lcd_wstr("时");
lcd_wdat(o_min/10+0x30);
lcd_wdat(o_min%10+0x30);
lcd_wstr("分");
lcd_wdat(o_sec/10+0x30);
}
}
}
while(quit!=1);
key_x=0;
}
void order()//预约界面
{
static uchar sel=1;
uchar quit=0;
do
{
lcd_clr();
lcd_wcom(0x82);lcd_wstr(" [预约]");
lcd_wcom(0x92);lcd_wstr("倒计时:");
}
}
while(quit!=1);
lcd_wcom(0x0c);
key_x=0;
}
//调整火力和时间
void shift_mark(uchar sel)//调整光标
{
switch(sel)
{
case 1:lcd_wcom(0x92);lcd_wcom(0x0c);lcd_wdat(0x10);break;
dis_fire_time();
lcd_wcom(0x99);lcd_wstr("预约");
lcd_wcom(0x9d);lcd_wstr("开始");
shift_mark(sel);
while(key_up==0)key_get();
while(key_up==1)key_get();
switch(key_x)
{
case 4:switch(sel)
{
case 1:
case 2:
case 3:shift_fire_time(sel);
lcd_wcom(0x30);
delay50us(1);
lcd_wcom(0x0c);
delay50us(2);
lcd_wcom(0x01);
delay500us(20);
lcd_wcom(0x06);
delay50us(2);
}
void lcd_wstr(uchar *s)//写字符串
{
while(*s!=0)lcd_wdat(*s++);
case 4:switch(sel)
{
case 1:
case 2:
case 3:order_shift(sel);break;
case 4:break;
}
break;
case 3:quit=1;break;
case 2:sel--;if(sel<1)sel=4;break;
case 1:sel++;if(sel>4)sel=1;
}
void lcd_clr()//清屏
{
lcd_wcom(0x01);
delay500us(3);
}
//按键驱动
void key_get()//按键录入
{
if(KEY1==1 && KEY2==1 && KEY3==1 && KEY4==1){key_up=1;}
else
{
if(KEY1==0 && key_up==1){key_up=0;key_x=1;}
{
uchar n;
for(;m>0;m--)
for(n=19;n>0;n--);
}
void delay500us(uint m)//for双重嵌套型。公式:t=m*(2*n+12)+偏差值。m比较小时,偏差为+13;m=0时,t=14。
{
uchar n;
for(;m>0;m--)
for(n=244;n>0;n--);
}
}
void dis_fire_time()//显示火力和时间
{
uchar f;
lcd_wcom(0x90);lcd_wstr("火力");
f=fire;while(f--)lcd_wdat(0x04);f=8-fire;while(f--)lcd_wdat(0x20);
lcd_wcom(0x88);lcd_wstr("时间");
case 2:min=min+a;
if(min==60)min=0;
if(min==-1)min=59;
break;
case 3:sec=sec+a;
if(sec==60)sec=0;
if(sec==-1)sec=59;
}
}
}
while(quit!=1);
key_x=0;
}
void custom_heat()//自定义
lcd_wstr("分");
lcd_wdat(o_sec/10+0x30);
lcd_wdat(o_sec%10+0x30);
lcd_wstr("秒");
order_mark(sel);
lcd_wcom(0x0f);
while(key_up==0)key_get();
while(key_up==1)key_get();
case 2:lcd_wcom(0x8b);lcd_wcom(0x0e);break;
case 3:lcd_wcom(0x8d);lcd_wcom(0x0e);break;
case 4:lcd_wcom(0x98);lcd_wcom(0x0c);lcd_wdat(0x10);break;
case 5:lcd_wcom(0x9c);lcd_wcom(0x0c);lcd_wdat(0x10);
case 2:lcd_wcom(0x8b);lcd_wcom(0x0e);break;
case 3:lcd_wcom(0x8d);lcd_wcom(0x0e);break;
case 4:lcd_wcom(0x9a);lcd_wcom(0x0c);lcd_wdat(0x10);break;
}
}
void order_shift(uchar sel)//预约调整
else if(KEY2==0 && key_up==1){key_up=0;key_x=2;}
else if(KEY3==0 && key_up==1){key_up=0;key_x=3;}
else if(KEY4==0 && key_up==1){key_up=0;key_x=4;}
delay500us(100);//防抖
相关文档
最新文档