#include #define nop _nop_

#define uchar unsigned char

#define uint unsigned int

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

//定义

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;//蜂鸣器

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;//预约时间变量

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

//辅助函数

//延迟函数

void delay50us(uint m)//for双重嵌套型。公式:t=m*(2*n+12)+偏差值。m比较小时,偏差为+13;m=0时,t=14。

{

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--);

}

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

//底层驱动

//LCD驱动

void lcd_wcom(uchar com)//写指令函数

{

delay50us(1);

RS=0;

RW=0;

DB=com;

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_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++);

}

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;}

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);//防抖

}

}

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

//应用层函数

//显示相关信息

void dis_author()//作者

{

lcd_clr();

lcd_wcom(0x80);lcd_wstr("作者:");lcd_wstr("黄志辉");

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;

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)//预约调整

{

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);

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();

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;

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;

}

}

}

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("倒计时:");

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);

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)

{

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;

}

}

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;

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);

}

}

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("时间 ");

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;

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;

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;

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()//自定义

{

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(" [自定义]");

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);

custom_fire=fire;custom_min=min;custom_sec=sec;

break;

case 4:order();break;

case 5:break;

}

break;

case 3:quit=1;break;

case 2:sel--;if(sel<1)sel=5;break;

case 1:sel++;if(sel>5)sel=1;

}

}

while(quit!=1);

lcd_wcom(0x0c);

key_x=0;

}

void fast_heat(uchar menu_sel)//快速加热

{

uchar quit=0;

static uchar sel=5;

do

{

lcd_clr();

switch(menu_sel)

{

case 1:lcd_wcom(0x82);lcd_wstr(" [烧烤]");fire=6;min=10;sec=0;break;

case 2:lcd_wcom(0x82);lcd_wstr(" [汤类]");fire=7;min=1;sec=30;

}

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 4:order();break;

case 5:break;

}

break;

case 3:quit=1;break;

case 2:sel--;if(sel<4)sel=5;break;

case 1:sel++;if(sel>5)sel=4;

}

}

while(quit!=1);

key_x=0;

}

//菜单

void menu_mark(uchar sel)//菜单光标

{

switch(sel)

{

case 1:lcd_wcom(0x90);break;

case 2:lcd_wcom(0x88);break;

case 3:lcd_wcom(0x98);break;

}

lcd_wdat(0x10);

}

void menu()//进入菜单

{

static uchar sel=1;

do

{

lcd_clr();

lcd_wcom(0x82);lcd_wstr(" [菜单]");

lcd_wcom(0x91);lcd_wstr("烧烤");lcd_wcom(0x95);lcd_wstr("解冻");

lcd_wcom(0x89);lcd_wstr("汤类");lcd_wcom(0x8d);lcd_wstr("蒸菜");

lcd_wcom(0x99);lcd_wstr("自定义");

menu_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:fast_heat(sel);break;

case 3:custom_heat();

}

break;

case 3:dis_author();break;

case 2:sel--;if(sel<1)sel=3;break;

case 1:sel++;if(sel>3)sel=1;

}

}

while(1);

}

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

//主程序

void main()

{

P0=0xFF;//开发板初始化(关数码管)

DUAN_LE=1;

DUAN_LE=0;

P0=0x00;

WEI_LE=1;

WEI_LE=0;

PSB=1;

delay500us(1000);//芯片初始化

lcd_init();

lcd_wcom(0x91);lcd_wdat(0x02);lcd_wstr(" 欢迎使用 ");lcd_wdat(0x02);//开机画面

lcd_wcom(0x89);lcd_wstr("智能 微波炉");

delay500us(2000);

menu();//显示菜单

}

微波炉定时c语言程序,微波炉控制系统c语言编程.doc相关推荐

  1. 万年历定时关机c语言代码,C语言程序设计能力教程电子万年历设计.doc

    C语言程序设计能力教程电子万年历设计.doc 电子科技大学成都学院课程设计报告电子科技大学成都学院电子工程系课程设计报告课 程 名 称 C语言程序设计能力教程 设 计 题 目 万 年 历 指 导 教师 ...

  2. 周信东c语言实验二实验报告,周信东主编最新版C语言程序设计基础实验一实验报告.doc...

    周信东主编最新版C语言程序设计基础实验一实验报告.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我 ...

  3. c语言课设宿舍管理程序,C语言程序课程设计宿舍管理软件.doc

    C语言程序课程设计宿舍管理软件.doc 课程设计(论文) 题 目 名 称 宿舍管理软件 课 程 名 称 C语言程序课程设计 学 生 姓 名 学 号 系 .专 业 信息工程系.信息大类 指 导 教 师 ...

  4. 8255a初始化c语言程序,8255A的c语言程序.doc

    8255A的c语言程序 8255A的c语言程序 [实例24]用8243扩展I/O端口 #include sbit ContrBit0=P1^0; sbit ContrBit1=P1^1; sbit C ...

  5. 职工工资程序c语言doc,C语言程序课程设计---职工工资单系统.doc

    C语言程序课程设计---职工工资单系统.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水 ...

  6. 单片机 中断秒表 c语言程序,51单片机c语言的秒表设计.doc

    51单片机c语言的秒表设计.doc 课程设计报告 基于AT89C51单片机的秒表设计 院 系 电子信息工程学院 专 业 电子信息工程 1 姓 名 摘 要 本设计是设计一个单片机控制的多功能秒表系统. ...

  7. c语言课设学生管理程序,c语言程序课程设计学生成绩管理程序.doc

    c语言程序课程设计学生成绩管理程序 武汉科技大学 二〇一〇~二〇一一学年第一学期 信息科学与工程学院 课程设计报告书 课程名称: C语言课程设计 班 级: 自动化2009级2班 学 号: 姓 名: 指 ...

  8. 怎么用centos7运行c语言程序_写C语言程序,如何提升程序运行效率?我的一点经验分享给你们!...

    在编写C语言程序后,经常需要对源码进行优化,以提高程序的运行效率,下面简述几个常用的优化技巧以供大家参考: 1.C于代码在程序中的优化 现在的C编译器会自动对代码进行优化,但这些优化是对执行速度和代码 ...

  9. 单纯形 c语言 程序,单纯形法完全c语言程序

    单纯形法完全c语言程序 更新时间:2017/2/8 13:37:00  浏览量:566  手机版 单纯形法完全c语言程序,能运行 #include "math.h" #includ ...

  10. c语言程序课程设计问题,矩形问题-C语言程序课程设课程设计(论文).doc

    矩形问题-C语言程序课程设课程设计(论文) PAGE PAGE \* MERGEFORMAT 20课程设计(论文)题 目 名 称 矩形问题 课 程 名 称 C语言程序课程设计 学 生 姓 名 xxx ...

最新文章

  1. 刚刚!我被产品小姐姐的笔记本深深吸引了....
  2. 带你了解DDoS攻击的原理,让你轻松学会DDoS攻击原理及防护措施
  3. python输入多组测试数据_python ddt数据驱动实例代码分享
  4. linux内核升级写入不了,解决linux内核升级后不能重启系统的故障
  5. mysql导入的excel更新_excel导入数据库,存在则更新不存在添加
  6. ntpdate报错the NTP socket is in use, exiting
  7. Ubuntu 下 Eclipse 桌面图标创建
  8. Centos7安装 mariadb 最新版
  9. Maven无法下载com.oracle:ojdbc14:jar解决方法
  10. SMOTE算法(处理非平衡数据)
  11. Xilinx差分输入时钟100Ω终端电阻设置
  12. C++基于ATM的个人银行账户管理系统
  13. 安装Windows Outlook邮箱客户端
  14. 期刊类文章左下角添加横线的方法
  15. 视频GPU硬解码方案对比
  16. Mac电脑的一键切换输入法神器,自动切换输入法!
  17. 计算机等级打印,全国计算机等级考试试题PDF打印(13页)-原创力文档
  18. 【windows版本】 db2数据库安装与使用
  19. 【折腾日记GEN8_2】ESXI的安装
  20. TFS二次开发系列:七、TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)

热门文章

  1. ASP.NET介绍及C#基本语法(一)
  2. Java中的一直不能掌握的switch-case语句
  3. 集成 jpush-react-native 常见问题汇总 ( iOS 篇)
  4. Android Fragment 简单实例
  5. ie6 span 换行IE6中float:right换行问题的替代解决方案
  6. 关于大数据的那些事儿
  7. Asp.net Web.Config - 配置元素 httpCookies
  8. Windows Azure Storage浏览器
  9. 无限驾驶汉化后黑屏问题
  10. 【转载】2009年春晚节目单提前揭晓