51单片机使用的几点注意事项

1. 使用printf打印小数

#include<stdio.h>
#include<reg51.h>

float idata t;

void Uart_Init()
{

}

void main()
{
	t=1.234567;
	SBUF=0;	//这一步是必须的
    Uart_Init();	//初始化串口,注意为加快速度非必须不要开串口中断
    while(1)
    {
    	printf("%f.2\n",t);
    }
}


2.关于浮点数、大变量数组的声明

低128字节51MCU一般都会有,默认全局变量存于此(data),所以经常会出现溢出错误;高128字节用idata声明,一般float型(占4个字节)可声明于此,如float idata f;内部扩展RAM,用xdata声明,一般大变量数组声明于此,如unsigned char xdata s[256]; //注意查看MCU的SRAM大小不变的数组用code声明,放在flash里,如unsigned char code s[12]="Hello,World!";

3.全局变量的声明

全局变量在.c中定义,在.h中用extern声明,如果在其他.c中使用,把.h包含进来就行了;如果全局变量仅在一个.c中使用,使用static;

4.在矩阵键盘扫描时,单片机的输出1(P123内部上拉电阻接+5V)引脚和输出0(MOS管直接接地)引脚连在一起,会变成0

5.所用时间较少,如数码管等,在中断中刷新,也可以考虑按键的软件消抖也在中断里。。。

/* Timer0 interrupt routine */
void tm0_isr() interrupt 1 		
{
	static unsigned char j=0;
    TL0 = T1MS;                     //reload timer0 low byte
    TH0 = T1MS >> 8;                //reload timer0 high byte

	if(j>8)	
	{
		j=0;
	}
	else 
	{
		j++;
		switch(j)
		{
			case 1:{P2=DIS_BIT[0];P0=DIS_SEG[INT_Num/10];}	break;	   //显示INT_Num的十位
			case 2:{P2=DIS_BIT[1];P0=DIS_SEG[INT_Num%10];}	break;	   //显示INT_Num的个位
			case 3: break;				//{P2=DIS_BIT[2];P0=DIS_SEG[];}	break;
			case 4:{P2=DIS_BIT[3];P0=DIS_SEG[Key_Num_last/10];}	break;	   //显示Key_Num的十位
			case 5:{P2=DIS_BIT[4];P0=DIS_SEG[Key_Num_last%10];}	break;	   //显示Key_Num的个位
			case 6: break;                //{P2=DIS_BIT[4];P0=DIS_SEG[Key_Num%10];}	break;	  
			case 7:{P2=DIS_BIT[6];P0=DIS_SEG[Key_Num_before/10];}	break;	   //显示Key_Num的个位
			case 8:{P2=DIS_BIT[7];P0=DIS_SEG[Key_Num_before%10];}	break;	   //显示Key_Num的个位
			default: {;}
		}	
	}
	if(flag_Buzzer && ++count)	//2ms中断一次,500Hz;有键按下时,flagBuzzer为真
	{
		Buzzer=!Buzzer;		//!逻辑取反
		if(count>50)	//蜂鸣器响100ms
		{
			flag_Buzzer=0;
			count=0;
			Buzzer=1;	//关闭蜂鸣器	
		}
	}

}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值