资讯详情

蓝桥杯单片机代码基础

一般省级比赛选择独立按钮,我在这里选择独立按钮

#include<reg52.h> #include<iic.h> #include<onewire.h> #include<ds1302.h>  #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<<addr;HC573(6);HC573(0);  //位选
		P0=~value;HC573(7);HC573(0);//段选
}
void SMG2()
{
		SMG(0,shuzi[yi]);Delay(200);
		SMG(1,shuzi[er]);Delay(200);
		SMG(2,shuzi[san]);Delay(200);
		SMG(3,shuzi[si]);Delay(200);
		SMG(4,shuzi[wu]);Delay(200);
		SMG(5,shuzi[lu]);Delay(200);
		SMG(6,shuzi[qi]);Delay(200);
		SMG(7,shuzi[ba]);Delay(200);
		all_SMG();Delay(100);
}
void all_SMG()
{
    P0=0xff;HC573(7);HC573(0);  
	P0=0xff;HC573(6);HC573(0);
	P0=0xff;HC573(7);HC573(0);
}
void WS()
{
	P0=0xff;HC573(4);HC573(0);
	P0=0x00;HC573(5);HC573(0);
	P0=0xff;HC573(6);HC573(0);
	P0=0xff;HC573(7);HC573(0);
}
void Delay(int t)
{
		while(t--);
}

/*************功能的选择选其中的部分************/
/************ROM*****************/
void Write_ROM(uchar add,uchar dat)
{
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	IIC_SendByte(dat);
	IIC_WaitAck();
	IIC_Stop();	
	Delay(2000);         //给时间写入
}
unsigned Read_ROM(uchar add)
{
	unsigned char dat;
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	IIC_Start();
	IIC_SendByte(0xa1);
	IIC_WaitAck();
	dat=IIC_RecByte();
	IIC_SendByte(1); 
	IIC_Stop();
	return dat;
}
/*************温度**************/
void Read_T()//读取
{
	unsigned char LSB,MSB;
	Init_DS18B20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	Delay(1000);
	Init_DS18B20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);
	LSB=Read_DS18B20();
	MSB=Read_DS18B20();
	Init_DS18B20();

	temp=MSB;
	temp=temp<<8;
	temp=temp|LSB;
	
	if((temp&0xf800)==0x0000)
	{
		temp=temp>>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]);
	}
}**********************/

标签: 7d计数继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台