蓝桥杯单片机第十二届省赛(比较简洁版)

 

 

 

 思路:本次赛题比较简单,将界面与数据分开处理,这样代码会比较明了

两个底层就不细说了

#include <STC15F2K60S2.H>
#include <iic.h>
#include <onewire.h>

#define Px(adr,dat) {P2=(P2&0x1f)|(adr<<5);P0=dat;}
对于38译码器的处理我使用了一个宏定义
思路:P2&0x1f是将P2的高三位置0,adr<<5是将片选移到高三位,最后的或处理就能将38译码器配置好段选,最后的P0=dat就是直接输出了

/* 头文件 */

void Timer0Init();
void Smg_Show();
void Key_Ser();
void Key_Scan();
void LED_Display();
void Smg_Display();
void DAC_OUT();

/* 函数声明 */


unsigned char KeyDelay,Key,keynum,bloose;
/* 按键变量 */

unsigned char point,Smg_Dat[8],Smg_Arr[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xc1,0xff,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xbf,0xa1,0x86,0xc6,0x7f,0x88,0x8c};
这些都是一些段码就不细说了
/* 数码管变量 */

float tempreature;
unsigned int Tcount,Tp_Cmp=25;
/* 温度变量 */
	
unsigned char page,mode;
/* 界面变量 */

unsigned char Dcount;
float DA_Dat;
/* DA变量 */

unsigned char LED;
/* LED变量 */
	
void main()
{
	Timer0Init();
	init_18b20();//初始化18b20,避免上电显示85的情况
	Px(4,0xff);
	Px(5,0x00);//关闭无关设备
	while(1)
	{
		if (Tcount>=750)//温度读取 750ms读取一次
		{
			Tcount=0;
			tempreature=TP_RD();
		}
		if (Dcount>=200)//DAC输出 200ms输出一次
		{
			Dcount=0;
			DAC_OUT();
		}
		Smg_Dis
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值