51单片机c语言 #define语句解释
问题
1
:
#define
的作用,
这是一个预处理语句.
何为预处理?
是指编译器(也开发环境)在编译之前的处理.
怎么处理呢?
其它就是字符串替换
例:
#define
PI
3.14
void
main()
{
float
area=0;
int
radius=2;
area=PI*(radius*radius);
printf("%f",area);
}
预处理之后
void
main()
{
float
area=0;
int
radius=2;
area=3.14*(radius*radius);
printf("%f",area);
}
其实就是字符串替换,所以
#define
PI
3.14
不能加
";"
不然变成
area=3.14;*(radius*radius);
这样的话肯定出错.
问题2:
"\"
的作用,就是上下行的连接符,有可能是一行太长了,也有可以是为了好看,所有写成多行
例:
#define
PI
3.\
14
void
_tmain()
{
float
area=0;
int
radius=2;
area=PI*(radius*radius);
printf("%f",area);
}
写成这样,也是可以的.
sbit 是定义 位 ,就是说只能 用于 位, 编译器 会检测的。
define 就是简单的 文字替换,用途广,
何为预处理? 是指编译器(也开发环境)在编译之前的处理.
怎么处理呢? 其它就是字符串替换
例: #define PI 3.14
void main()
{
float area=0;
int radius=2;
area=PI*(radius*radius);
printf("%f",area);
}
预处理之后
void main()
{
float area=0;
int radius=2;
area=3.14*(radius*radius);
printf("%f",area);
}
其实就是字符串替换,所以 #define PI 3.14 不能加 ";" 不然变成 area=3.14;*(radius*radius);
这样的话肯定出错.
问题2: "\" 的作用,就是上下行的连接符,有可能是一行太长了,也有可以是为了好看,所有写成多行
例:
#define PI 3.\
14
void _tmain()
{
float area=0;
int radius=2;
area=PI*(radius*radius);
printf("%f",area);
}
写成这样,也是可以的.
“\”是宏定义的连接符,连接下一行。若要写成多行,必需在每行末在“\”
C语言的续行符 告诉编译器 后续代码 是同一行的啦...........
51单片机按键计数器C语言编程
include<reg51.h>#define uchar unsigned char;uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; \/\/0到fuchar number,dat,dis[4];void t0isr() interrupt 1{TH0=(65536-5000)\/256;TL0=(65536-5000)%256;number++...
单片机C语言数组赋值求助
LCD_E=1;Delay_lcd(1);LCD_E=0;Delay_lcd(1);}void LCD_WriteData(uchar Data){\/\/写数据函数LCD_RS=1;LCD_RW=0;P0=Data;LCD_E=1;Delay_lcd(1);LCD_E=0;Delay_lcd(1);}void LCD_Init(void){\/\/初始化LCD1602LCD_WriteCmd(0x38);LCD_WriteCmd(0x0C);LCD_WriteCmd(0x06);LCD_WriteCmd(...
关于单片机C语言不懂得问题
编写程序时,用“C语言里的固定写法”,有时会嫌长,打字太多,想用短一些的字符来代替,那么就在前边写上:define uchar unsigned char \/\/定义无符号字符 以后就可以用“uchar”代替“unsigned char”。那么 uchar temp 就和 unsigned char temp 相同。uchar temp 就是指定了一个无符号字符变量...
C语言 初学者 51单片机 将程序第五行的 #define led P2 替换成sbit led...
sbit 是定义一个引脚的,注意,只是定义一个引脚,而 P2是一个并行口,有8个引脚,是不能sbit 来定义,可以用 sfr 定义。define 并不是定义引脚的,也不是定义并行口,只是一个宏替换,就是程序中的led 换成P2后再编译。所以,sbit 和 #define根本就不是一回事,更谈不上什么替换了。两者毫无...
单片机 c语言 一个按键控制LED灯切换, 按一下按键花样一, 按下按键...
你试试我这个程序,我这发光二极管是给0亮的,按键按下会得到一个低电平的共阳接法 \/***共阳接法***\/#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define dat P0sbit key1=P3^0;sbit key2=P3^1;uchar led,temp,num;void key_pd();void ...
求下图的单片机C语言程序、数码管从0--9的加一或减一
include<reg51.h>#define uchar unsigned charuchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar dat;void ext0() interrupt 0{dat++;dat%=10;}void ext1() interrupt 2{dat--;if(dat>9)dat=9;}main(){EX0=1;EX1=1;IT0=1;IT1=1;EA=1;...
51单片机的按键控制小灯亮灭的问题(程序类型:c语言)怎么解决?
include#define uint unsigned intsbit LED = P1^0; sbit KEY1 = P1^2;void delay(uint);void main(void){ LED = 1; \/\/初始化LED熄灭 KEY1 = 1; \/\/赋值KEY1高电平 while(1) { if(!KEY1) \/\/检测到按键按下 { LED = ~LED; \/*LED取反,此时...
单片机C语言编程中,编一个延时约1s的语句
双重循环,共有循环 1000 × 1000 = 一百万遍。每一遍,如果是1us,才能是延时约1s。但是,晶振是12MHz,一条汇编的指令就至少是1us,C语言的语句,就要更多。在编写延时函数之前,首先确认一下系统对晶振的分频系数,从而确定每个单周期指令执行所需的时间,一般的单片机都将指令执行周期设置为1us,...
求用C语言编程实现51单片机的LED灯移动
include<reg51.h> define uchar unsigned char sbit c10=P1^0;sbit c11=P1^1;sbit c12=P1^2;sbit c13=P1^3;uchar led1,led3;void delay(uchar a){ uchar i,j;for(i=0;i<a;i++)for(j=0;j<120;j++);} main(){ uchar keyval=0xff;led1=0xfe;led3=0xf8;while(1){ if(c10...
51单片机C语言编程
include<reg51.h> define uchar unsigned char sbit pluse1=P1^0;sbit pluse2=P1^1;uchar t1=0,t2=0;void t0isr() interrupt 1 { TH0=(65536-25000)\/256;TL0=(65536-25000)%256;t1++;if(t1<15)pluse=1;else pluse=0;if(t1>20)t1=0;} void t1isr() interrupt 3 { TH1=(65536...