一、大模板
本模板基于以下两篇文章和西风老师讲解归纳而成,仅为比赛学习而用。如有侵权立删。
#include "reg52.h"
#include "ds1302.h"
#include "onewire.h"
#include "iic.h"
sfr P4 = 0xC0;
sbit A0 = P3^4;
sbit A1 = P3^5;
sbit A2 = P4^2;
sbit A3 = P4^4;
/*===================初始化函数======================*/
void System_Init()
{
P0 = 0xff;//关闭数码管
P2 = P2 & 0x1f | 0x80;
P2 &= 0x1f;
P0 = 0x00;//关闭蜂鸣器,继电器
P2 = P2 & 0x1f | 0xa0;
P2 &= 0x1f;
}
/*===================数码管======================*/
unsigned char Seg_Dula[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//段选 0~9+熄灭
unsigned char Seg_Wela[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位选
void Seg_Disp(unsigned char wela,dula,point)//数码管显示函数
{
P0=0xff;//消隐
P2=P2&0x1f|0xe0;
P2&=0x1f;
P0=Seg_Wela[wela];//位选
P2=P2&0x1f|0xc0;
P2&=0x1f;
P0=Seg_Dula[dula];//段选
if(point)
{
P0=Seg_Dula[dula] & 0x7f;
}
else
{
P0=Seg_Dula[dula];
}
P2=P2&0x1f|0xe0;
P2&=0x1f;
}
/*===================按键======================*/
unsigned char Key4_Read(void) //独立按键读取函数
{
unsigned char Key_temp;
unsigned char Key_Value;
P3 |= 0x0f; //将P3低四位即独立按键接口拉高置为1
Key_temp = P3&0x0f;//读取P3低四位I/O口的电平
switch(Key_temp)//
{
case 0x0e : Key_Value = 7; break; //S7
case 0x0d : Key_Value = 6; break; //S6
case 0x0b : Key_Value = 5; break; //S5
case 0x07 : Key_Value = 4; break; //S4
default: Key_Value = 0;
}
return Key_Value;
}
unsigned char Key16_Read(void)
{
unsigned int Key_temp;
unsigned char Key_Value;
A3=0;
A2=1;
A1=1;
A0=1;
P3|=0X0F;
Key_temp = P3;
A3=1;
A2=0;
A1=1;
A0=1;
P3|=0X0F;
Key_temp = (Key_temp<<4) | (P3&0X0F);
A3=1;
A2=1;
A1=0;
A0=1;
P3|=0X0F;
Key_temp = (Key_temp<<4) | (P3&0X0F);
A3=1;
A2=1;
A1=1;
A0=0;
P3|=0X0F;
Key_temp = (Key_temp<<4) | (P3&0X0F);
switch(~Key_temp)
{
//第一列
case 0X8000: Key_Value = 4; break; //S4
case 0X4000: Key_Value = 5; break; //S5
case 0X2000: Key_Value = 6; break; //S6
case 0X1000: Key_Value = 7; break; //S7
//第二列
case 0X0800: Key_Value = 8; break; //S8
case 0X0400: Key_Value = 9; break; //S9
case 0X0200: Key_Value = 10; break; //S10
case 0X0100: Key_Value = 11; break; //S11
//第三列
case 0X0080: Key_Value = 12; break; //S12
case 0X0040: Key_Value = 13; break; //S13
case 0X0020: Key_Value = 14; break; //S14
case 0X0010: Key_Value = 15; break; //S15
//第四列
case 0X0008: Key_Value = 16; break; //S16
case 0X0004: Key_Value = 17; break; //S17
case 0X0002: Key_Value = 18; break; //S18
case 0X0001: Key_Value = 19; break;