#include"mpc8252.h"
void buzzer_out(unsigned char times);
void led_change(void);
void function_loop(void);
void key_deal(void);
void scan_key(void);
void out_164(unsigned char in_data,unsigned char channel );
void k_control(unsigned char i);
void pan_test(void);
void error(unsigned char data1);
unsigned char get_AD_result(unsigned char channel);
#define IniT0Count ~3600 /*产生62.5MS所需要的时间次数,5为误差调整*/
sbit k1 =P3^0;
sbit k2 =P3^1;
sbit INT =P3^2;
sbit pan =P3^3;
sbit k =P3^4;
sbit buzzer =P3^5;
sbit pwm =P3^7;
sbit clk1 =P1^7;
sbit dat1 =P1^4;
sbit clk2 =P1^5;
sbit bit_clr =P1^6;
sbit t_m =P1^3;
sbit t_i =P1^2;
sbit v_ad =P1^1;
sbit i_ad =P1^0;
bit yuyue_flag,kaiguan_flag,dingshi_flag;//用于表明当前的状态
bit key_press;//代表有按键按下]
bit flash;//数码管亮灭标志位
bit key_up,key_flag;//代表按键弹起状态
bit point;//用于数码管两点闪灭
unsigned char min,sec,hour,set_min,set_hour;
unsigned char key_num,key_time,buzzer_times;
bit buzzer_flag;
//unsigned int timeup;
unsigned char min_m,sec_m,hour_m,min_old,interval;
unsigned char led_buffer[6]={0};//显示缓存
unsigned char code k1_data[8]={0x02,0x01,0x03,0x04,0x07,0x08,0x05,0x06};
unsigned char code k2_data[8]={1,2,9,10,13,14,11,12};
unsigned char key_set,key_set_old;
unsigned char T0Count,T1SCount,count,count1,flash_interval_old,flash_interval;//indivde
unsigned char code select_bit[6]={0x10,0x20,0x40,0x08,0x04,0x80};//先扫描四个数码管,后再扫描l1~L8,L9-L15;
unsigned char code led_show[11]={0xdd,0x48,0xbc,0x7c,0x69,0x75,0xf5,0x4c,0xfd,0x7d,0xe5};//LED为共阴管
unsigned char code l_show_p[6]={0x10,0x90,0xb0,0xb1,0xb3,0xb7};//调节功率的灯
//unsigned char l2_show[8]={0x00,0x80,0x10,0x40,0x01,0x02,0x04,0x08};//保温----1900,开关
//unsigned char code l_show[15]={0x00,0x20,0x00,0x00,0x00,0x00,0x10,0x00,0x01,0x00,0x02,0x04,0x08,0x80,0x40};
unsigned int code spower[6]={120,500,800,1300,1600,1900};
unsigned int set_p;//now_p;//设置功率,当前功率,
unsigned char f1s,f8s,f1s_old,f250ms;
unsigned char code temp_alarm[6]={0,0,0,0,0,0};
unsigned char set_temp_alarm;
unsigned char set_v_alrm;
/*________________k的变量______________________*/
unsigned char k_en;
bit k_finish_flag;
unsigned char no_pan;
unsigned char k_loop;
unsigned char k_count1;
unsigned int int1_count=0;//有无锅波形的个数
//unsigned char i_ad_value;
unsigned char count9;
/*___________AD温度的变量_____________*/
unsigned char temp,current_i[4],current_v[4];
bit ad_finish_flag,f1s_ad;
unsigned char i_ad_value;
unsigned char v_ad_value;
unsigned char tm_value;
unsigned char ti_value;
/*__________风扇变量_________*/
unsigned int t2_fan;
unsigned char f60;
/*_____________pwm____________*/
unsigned char pwm_value=0x80;
unsigned char op_set,op_mode,op_time,op_60s,op_count;//过程控制
unsigned char tm_value_old;
/***************************************************
延时程序
********************************************************/
void delay(unsigned int delay_time)
{
unsigned int i = delay_time;
while(i != 0)
{
unsigned char m = 1;
i--;
while(m--);
}
}
/*******************************************************
按键值处理
********************************************************/
void key_deal(void)
{
if(key_press==1)
{
key_press=0;//取消按键动作标志位
if(key_set!=key_set_old || key_set==14 || key_set==3|| key_set==1)//等于加或等于减
{
key_set_old=key_set;
function_loop();
}
}
led_change();
// #pragma asm
// jmp $
// #pragma endasm
}
/*******************************************************
刷新LED缓存
********************************************************/
void led_change(void)
{
hour_m=pwm_value;
led_buffer[3]=led_show[hour_m%10];
hour_m=hour_m/10;
led_buffer[2]=led_show[hour_m%10];
hour_m=hour_m/10;
led_buffer[1]=led_show[k_en];
hour_m=hour_m/10;
led_buffer[0]=led_show[no_pan];//led_show[hour_m%10];
/* min_m=no_pan;//count9;
// sec_m=sec;
hour_m=count9;//
led_buffer[1]=led_show[hour_m%10];
hour_m=hour_m/10;
led_buffer[0]=led_show[hour_m%10];
led_buffer[3]=led_show[min_m%10];
min_m=min_m/10;
led_buffer[2]=led_show[min_m%10];
/*/
}
/*******************************************************
检测按键程序
********************************************************/
void scan_key(void)
{
unsigned char scan_data=0xfe;
unsigned char i;
bit_clr=0;
if(f250ms)
{
for(i=0;i<8;i++)
{
out_164(0x00,2);
out_164(scan_data,1);
scan_data=(scan_data<<1)|(scan_data>>7);//实现左移一位
if(!k1)
{
delay(1000);//消抖
if(!k1)
{
key_set=k1_data[i];
key_press=1;
key_time=0;
}
}
else if(!k2)
{
delay(1000);
if(!k2)
{
key_set=k2_data[i];
key_press=1;
key_time=0;
}
}
else
key_time++;
}
if(key_time<8){key_num++;}
else {key_num=0;}
key_deal();
f250ms=0;//一秒扫描四次
out_164(0x00,1);
bit_clr=1;
}
}
/*************************************************/
//送出8位串行数据给164,,channel是电路上两个通道的选择
/*************************************************/
void out_164(unsigned char in_data,unsigned char channel )//
{
unsigned char i;
if(channel==2)
{
for(i=0;i<8;i++)
{
if (in_data & 0x01)
{
dat1=1;
}
else
{
dat1=0;
}
clk2=0;
in_data>>=1;
clk2=1;
}
dat1=1;
}
if(channel==1)
{
for(i=0;i<8;i++)
{
if (in_data & 0x01)
{
dat1=1;
}
else
{
dat1=0;
}
clk1=0;
in_data>>=1;
clk1=1;
}
dat1=1;
}
}
/*******************************************************
控制显示功率灯
********************************************************/
void display_p(void)
{
switch(set_p)
{
case 1900:led_buffer[5]=l_show_p[5];break;//显示功率灯亮五个
case 1600:led_buffer[5]=l_show_p[4];break;
case 1300:led_buffer[5]=l_show_p[3];break;
case 800:led_buffer[5]=l_show_p[2];break;
case 500:led_buffer[5]=l_show_p[1];break;
default :led_buffer[5]=l_show_p[0];break;//亮保温灯
}
}
/*******************************************************
控制显示程序
********************************************************/
void display()
{
unsigned char i;
led_change();//刷新LED缓存
display_p();
out_164(0x00,2);//复位164
out_164(0x00,1);
if(!kaiguan_flag){i=5;}
else {i=0;}
for(;i<6;i++)
{
delay(100);
out_164(0x00,1);
bit_clr=0;
if(i<4)
{
if(!flash)//设定时间确定后,开始闪的标志位
{
if(i==1 && point)
{
out_164(led_buffer[i]|0x02,1);
}
else
{
out_164(led_buffer[i],1);
}
}
else
{
if(i==1) {out_164(0x02,1);}
}
}
else
{
if(kaiguan_flag)
{
if(i==5)
{
out_164(led_buffer[i]|0x08,1);//显示发光二极管,开,一直亮
}
else
{
out_164(led_buffer[i],1);//i=4
}
}
else if(point && i==5) out_164(0x08,1);//关,但亮
else out_164(0x000,1);//关,且灭
}
bit_clr=1;
out_164(select_bit[i],2);//选位
delay(600);
//bit_clr=0;
//out_164(0x00,2);
//delay(100);//????????????????????????????????????????????????????????????????????????????
}
}
/**************************************************
定时器0的中断服务,256Hz
*************************************************/
void timer0(void) interrupt 1 using 1 /*T0中断*/
{
TL0=IniT0Count; /*11.0592M*/
TH0=IniT0Count>>8;
T0Count++;
if(T0Count&0x0f){}//62.5*15 ????????
else
{
//f62_5ms=1;
//**********************检测有无锅 K 脉冲*****************************************
if(k_en)
{
k_count1++;
if(k_count1<=5)//300ms
{
k=1;
}
else if(k_count1<17)//700ms
{
k=0;
}
else
{
k_count1=0;
k_en--;//次数
}
if(k_en==0)
{
k_finish_flag=1;
}
}
//**************************************************************
电磁炉程序
5星 · 超过95%的资源 需积分: 49 74 浏览量
2014-12-29
10:17:02
上传
评论 10
收藏 17KB RAR 举报
yb2004
- 粉丝: 5
- 资源: 6
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈