思路:本次赛题比较简单,将界面与数据分开处理,这样代码会比较明了
两个底层就不细说了
#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