13届蓝桥杯(单片机)

一.首先这套题目难度还可以,不是那么的简单,我也做了好一会,主要是不会操作蜂鸣器!

下面就直接贴代码了。想要工程文件的可以到博主的资源中下载(免费)点点关注就行!

主函数main.c

#include "dmx.h"
#include "onewire.h"
void main()
{Init_System();while(1)
{if(flag_t){temp=Read_temp();flag_t=0;}scan_kbd(); //扫描按键key_real(); //按键操作Read_time(); //读时间SMG_show();  //赋值显示led_work();  //led和继电器}}

二.  然后就是配置文件了 也是程序核心

#include 
#include "dmx.h"
#include "onewire.h"
#include "ds1302.h"unsigned char mod1=0; //界面切换bit mod2=0;  //模式切换
unsigned int temp=0;  //温度
unsigned int para=23;  //温度参数
unsigned int key_num=20;  //按键值
unsigned int count=0;   //计数获取温度
bit flag_L1=0;            //点亮L1标志位
bit flag_L3=0;           //点亮L3标志位
unsigned int count_L1=0;  //L1计数
unsigned int count_L3=0;  //L3计数bit flag_temp=0;         //获取温度标志位bit flag_t=0;            //时间满足标志位
bit flag_jdq_t=0;           //时间控制继电器标志位
bit flag_jdq_w=0;         //温度控制继电器标志位unsigned char stat_jdq=0xaf;  unsigned count_jdq=0;
unsigned char stat_led=0xff;
unsigned char Read_ds1302[3]={0}; 
unsigned char tp[8]={12,2,10,0,0,11,0,0};
unsigned char Read[8]={10,10,10,10,10,10,10,10};
unsigned char segbuff[8]={10,10,10,10,10,11,0,1};
unsigned char segtab[]={0xc0, //0
0xf9, //1
0xa4, //2
0xb0, //3
0x99, //4
0x92, //5
0x82, //6
0xf8, //7
0x80, //8
0x90, //9
0xff, // 
0xbf, //-
0xc1   //U  12};void time0()   //1ms
{TMOD=0x11;TH0=(0-1000)/256;TL0=(0-1000)%256;TR0=1;ET0=1;EA=1;TH1=(0-5000)/256;TL1=(0-5000)%256;TR1=1;ET1=1;}
void Timer3() interrupt 3  //5ms
{TH1=(0-5000)/256; TL1=(0-5000)%256;if(flag_L1){ 	stat_led=stat_led&0xfe;		if(++count_L1==1000){ flag_L1=0;stat_led=stat_led|0x01;count_L1=0;}}if(flag_L3){if(++count_L3==20)count_L3=0;if(count_L3<=10)stat_led&=0xfb;else stat_led|=0x04;		 }else  stat_led|=0x04;if( mod2==1){  if(flag_jdq_t){stat_jdq=0x1f;if(++count_jdq==1000){count_jdq=0;flag_jdq_t=0;stat_jdq=0xaf;} }}else flag_jdq_t=0;}void Timer0() interrupt 1
{TH0=(0-2000)/256;TL0=(0-2000)%256;segs();count++;if(count==150){flag_t=1;count=0;}}void led_work()
{if(Read_ds1302[2]==0x00&&Read_ds1302[1]==0x00){  if(mod2==1)flag_jdq_t=1;else flag_jdq_t=0;flag_L1=1;}if(mod1==0) stat_led=stat_led&0xfd;else  stat_led=stat_led|0x02;if(mod2==0 ){if( temp/10>para) {stat_jdq=0x1f; flag_jdq_w=1;}else  {stat_jdq=0xaf;flag_jdq_w=0;}}if(flag_jdq_t || flag_jdq_w){flag_L3=1;}else flag_L3=0;P2=P2&0x1f|0x80;P0=stat_led;P2=P2&0x1f|0xa0;P0=stat_jdq;}void scan_kbd()
{static char kbd_state = 0;unsigned char kbd_press;char row;switch(kbd_state){case state_0:kbd_io=0x0f;P42=0;P44=0;kbd_press=kbd_io;if(kbd_press != kbd_maskrow)kbd_state=state_1;break;case state_1:kbd_press=kbd_io;if(kbd_press!=kbd_maskrow){if((kbd_io&0x08)==0)  row=4;            if((kbd_io&0x04)==0)  row=5;              if((kbd_io&0x02)==0)  row=6;                   if((kbd_io&0x01)==0)  row=7;   kbd_io=0xf0;P42=1;P44=1;if(P44==0)key_num=row;if(P42==0)key_num=row+4;if((kbd_io&0x20)==0)key_num=row+8;if((kbd_io&0x10)==0)key_num=row+12; while((!(kbd_io&0x10))&&(row==5)&&(mod1==1)){tp[3]=Read_ds1302[1]>>4;tp[4]=Read_ds1302[1]%16;tp[6]=Read_ds1302[2]>>4;tp[7]=Read_ds1302[2]%16;flag_temp=1;}flag_temp=0;kbd_state=state_2;}else {kbd_state=state_0;}break;case state_2:kbd_io=0x0f; P42=0; P44=0;kbd_press=kbd_io;if(kbd_press==0x0f)kbd_state=state_0;break;default :break;}}
void key_real()
{switch(key_num)	{case 12:if(++mod1==3)mod1=0;break;case 13:mod2=~mod2;break;case 16:if(mod1==2){  para+=10;if(para>99)para=0;}break;case 17:	if(mod1==2){				 para-=10;if(para<10)para=99;}break;default :break;}key_num=20;}
void Slect_fun(unsigned char n)
{P2=P2&0x1f;switch(n){case 0:P2|=0x00; break;case 4:P2|=0x80; break;case 5:P2|=0xa0; break;case 6:P2|=0xc0; break;case 7:P2|=0xe0; break;default : break; }}
void Init_System()
{ unsigned char i;Slect_fun(4);P0=0xff;Slect_fun(5);P0=0xaf;for(i=0;i<3;i++){Read_temp();}time0();Init_ds1302();}
void segs()
{static unsigned char wei=0;Slect_fun(7);P0=0xff;Slect_fun(6);P0=1<>4;segbuff[4]=Read_ds1302[0]%16;segbuff[5]=11;segbuff[6]=Read_ds1302[1]>>4;segbuff[7]=Read_ds1302[1]%16;}else if(mod1==2){segbuff[0]=12;segbuff[1]=3;segbuff[2]=10;segbuff[3]=10;segbuff[4]=10;segbuff[5]=10;segbuff[6]=para/10;segbuff[7]=para%10;}}

下面是各种.h文件了

#ifndef _DMX_H
#define _DMX_H#define state_0 0
#define state_1 1
#define state_2 2
#define kbd_io  P3
#define kbd_maskrow 0x0f
extern unsigned int temp;
extern bit flag_t;
void time0();
void scan_kbd();
void key_real();
void Slect_fun(unsigned char n)	;
void segs();
void Init_ds1302();
void Read_time();
void SMG_show();
void Init_System();
void led_work();
#endif 

 其他基础文件我就不贴了,到处都是,,,,,


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部