蓝桥杯单片机代码基础
时间:2023-10-01 14:04:11
一般省级比赛选择独立按钮,我在这里选择独立按钮
#include #include #include #include #define uchar unsigned char //sfr P4 = 0xC0;//矩阵按钮 sfr AUXR=0X8E;//定时器 /************需要的函数*************/ void WS(); void Scan(); void HC573(uchar t); void SMG2(); void SMG(uchar addr,uchar value); //第(addr-1)数字管显示的内容 void Delay(int t); //延迟 void all_SMG(); ///消隐功能 ///定时器0测频率 void Timer0Init(void); void Timer1Init(void); /**************以下是功能选择的一般部分****************/ //ROM unsigned Read_ROM(uchar add); void Write_ROM(uchar add,uchar dat); //读温度 void Read_T(); ////时钟写和读 void DS1302_Config(); void Read_DS1302(); ///电阻或光敏电阻AD转换 void Read_RB2(); //电阻 void Read_RD1(); //光敏 voidAD_write(uchardat); //输出 /***********初始化值****************/ uchar shuzi[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x00,0x40};//0~9正常的数字 10~19带小数的数 20为熄灭 //21为-提示符,22后可自行添加 uchar yi,er,san,si,wu,lu,qi,ba; ////数字管显示的内容 uchar state=1,RB2,RD1; //控制页面 uchar led=0xff; //led的显示 int temp,t1=0; //定时器一的计数;temp为温度 ///时钟没有时钟 //uchar Write_DS1302_add[8]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //uchar Read_DS1302_add[8]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; //uchar Timer[8]={0x55,0x59,0x23,0x00,0x00,0x00,0x00}; //独立按钮 sbit S4=P3^3; sbit S5=P3^2; sbit S6=P3^1; sbit S7=P3^0; bit flag4=1; bit flag5=1; bit flag6=1; bit flag7=1; /**********************按键扫描***************************/ void Scan() { /*4 */ if(S4==0) //按下时扫描 { Delay(10); //消抖 if(S4==0) //消抖 { if(flag4!=0) //flag4不按的时候,按1,下一刻进入下面的程序 { flag4=0; //flag4为0 switch(state) ///看在什么模式下按下S4 { case 1: break; case 2: break; case 3: break; case 4: break; } } } } else { flag4=1; ///不按时归1 }//4 /*5 */ if(S5==0) { Delay(10); if(S5==0) { if(flag5!=0) { flag5=0; switch(state) { case 1: break; case 2: break; case 3: break; case 4: break; } } } } else { flag5=1; }//5 /*6 */ if(S6==0) { Delay(10); if(S6==0) { if(flag6!=0) { flag6=0; switch(state) { case 1: break; case 2: break; case 3: break; case 4: break; } } } } else { flag6=1; }//6 /*7 */ if(S7==0) { Delay(10); if(S7==0) { if(flag7!=0) { flag7=0; switch(state) { case 1: break; case 2: break; case 3: break; case 4: break; } } } } else { flag7=1; }//7 } /***************主函数*******************/ void main() { WS(); //关闭外设
Timer1Init(); //定时器初始,定时器0频率看情况
EA=1;TR0=1; //上面那个是复制软件的补充缺少部分
//时钟初始化看情况
while(1)
{
Scan(); //按键的功能
switch(state)//选择模式显示内容
{
case 1:yi=1;er=2;san=3;si=4;wu=5;lu=6;qi=7;ba=8;break;
case 2:yi=9;er=10;san=11;si=12;wu=13;lu=14;qi=15;ba=16;break;
case 3:yi=17;er=18;san=19;si=20;wu=21;lu=0;qi=1;ba=3;break;
case 4:yi=1;er=2;san=3;si=4;wu=5;lu=6;qi=7;ba=8;break;
}
P0=led;HC573(4);HC573(0); //led部分
SMG2(yi,er,san,si,wu,lu,qi,ba);//数码管显示
}
}
/************定时器*************/
void Timer1Init(void)
{
AUXR &= 0xBF;
TMOD &= 0x0F;
TL1 = 0x9A;
TH1 = 0xA9;
TF1 = 0;
TR1 = 1;
}
void Time1() interrupt 3
{
t1++;
}
/********必备基本的功能设置**********/
void HC573(uchar t)
{
switch(t)
{
case 0:P2=0X00;break; //关
case 4:P2=P2&0X1F|0X80;break;//led
case 5:P2=P2&0X1F|0XA0;break;//蜂鸣器继电器
case 6:P2=P2&0X1F|0XC0;break;//位选
case 7:P2=P2&0X1F|0XE0;break;//段选
}
}
void SMG(uchar addr,uchar value)
{
P0=0xff;HC573(7);HC573(0); //消隐
P0=0x01<>4;
}
}
/*********ADC************************/
void Read_RB2()
{
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(0x03);
IIC_WaitAck();
IIC_Stop();
IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
RB2=IIC_RecByte();
IIC_SendByte(1);
IIC_Stop();
}
void Read_RD1()
{
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(0x01);
IIC_WaitAck();
IIC_Stop();
IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
RD1=IIC_RecByte();
IIC_SendByte(1);
IIC_Stop();
}
void AD_write(uchar dat)
{
IIC_Start();
IIC_SendByte(0X90);
IIC_WaitAck();
IIC_SendByte(0X40);
IIC_WaitAck();
IIC_SendByte(dat);
IIC_WaitAck();
IIC_Stop();
}
/***************************DS1302
void DS1302_Config()
{
char i;
Write_Ds1302_Byte(0x8e,0x00);
for(i=0;i<7;i++)
{
Write_Ds1302_Byte(Write_DS1302_add[i],Timer[i]);
}
Write_Ds1302_Byte(0x8e,0x80);
}
void Read_DS1302()
{
char i;
for(i=0;i<7;i++)
{
Timer[i]=Read_Ds1302_Byte(Read_DS1302_add[i]);
}
}**********************/