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

来源:互联网 发布:几款进销存软件好坏 编辑:程序博客网 时间:2024/04/28 06:49

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 byteif(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
原创粉丝点击