当前位置:首页 > 基于单片机的微波炉控制器 - 图文
4.4总体程序设计
4.4.1总体设计流程图
开始 键盘扫描 计算按键值 删除按键值 火力选择 启动 电机运转 按键值减一 按键值等于0 结束 图4-7 总体设计流程图
29
4.4.2总体设计仿真电路
图4-8 总体设计仿真电路
4.4.3总体设计程序:
#include
char TAB[10]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9}; char disp[4]={0x8f,0x4f,0x2f,0x1f}; //数码管控制显示
char excite[]={0x08,0x01,0x02,0x04}; //步进电机1相驱动激励数组 //char excite[]={0x03,0x06,0x0c,0x09}; //2相驱动激励数组
unsigned char times=10; //声明电机重复数(即电机的快慢) unsigned char count=10; //声明电机重复变量 char dig[4]; char c1=5; //蜂鸣器第5秒、3秒、1秒的时候发声 char c2=4;
char qid=0; //启动的判断
char a1=0,a2=1,a3=0; //火力大中小的判断 int digit=0; //按键输入的初始数值
30
sbit da=P3^0; //声明火力大小的按键 sbit zhong=P3^1; sbit xiao=P3^2;
sbit qidong=P3^3; //声明启动按键
sbit chs=P3^4; //声明重新输入数值 sbit hli1=P0^5; //声明火力的输出端 sbit hli2=P0^6; sbit hli3=P0^7; sbit buzzer=P0^4; //蜂鸣器接口
void debouncer(void); //声明防抖动函数 void scanner(void); //声明扫描函数 void huoli(void); //火力大小函数
#define rowkey() (~P1)&0x0f //读入p1低四位(列按键值)宏 #define OUTPUT P0 //步进电机输出端低四位 #define TH0_M0 (65536-20000)/256 #define TL0_M0 (65536-20000)%6 #define TH1_M1 (65536-500)/256 #define TL1_M1 (65536-500)%6
main()
{ IE=0x8a; ET0=1; ET1=1;
TMOD=0X11; //定时器0和1,模式1 TH1=TH1_M1;TL1=TL1_M1; TH0=TH0_M0;TL0=TH0_M0;
TR1=1; //开启定时器1 P3=0xff; P0=0xe0;
while(qid==0) //键盘扫描 scanner();
while(qid==1) //启动 { TR0=1; huoli();
if(a1==1) //启动加热 {hli1=0;hli2=1;hli3=1;} if(a2==1)
{hli1=1;hli2=0;hli3=1;} if(a3==1)
{hli1=1;hli2=1;hli3=0;} if(digit==c1)
{buzzer=1; //蜂鸣器每次发声1s c1=c1-2;}
31
if(digit==c2) {buzzer=0; c2=c2-2;}
while(digit<=0) //加热结束关闭系统 {TR0=0; TR1=0;
P0=0xe0; P1=0; P2=0; P3=0;} } }
void scanner(void) //扫描函数 { char col,row; //声明行和列
char scan,keyin,kcode; //声明扫描信号,列按键值,扫描码 scan=0xef;
for(col=0;col<4;col++)
{ P1=scan; //P1按键扫描
keyin=rowkey(); //读入第col行的列按键值
_nop_(); //三个_nop_();作用为让 P1 口的状态稳定 _nop_(); _nop_();
if(keyin!=0) //若有按键按下 { for(row=0;row<3;row++) { if(keyin==(0x01< { kcode=row+3*col; //计算出按键码 digit=digit*10+kcode; //扫描码写入七段数码管数组 digit=digit00; //取输入的后三位,输入不够三位高位为零 break; //离开第row列扫描 } } while(rowkey()!=0) //等按键放开 debouncer(); //防抖动函数 } if(qidong==0) //判断启动按键是否按下 { qid=1; while(qidong==0); } if(chs==0) //重新输入数值 { digit=0; while(chs==0); } 32
共分享92篇相关文档