河南网络营销外包,银川seo优化,绵阳建网站哪家好,无线网络优化工程师1 项目分析
让输入/输出口的P1.0或P1.0~P1.7连接的LED灯闪烁。
2 技术准备
1、C语言知识点
1 运算符
1 算术运算符
#include stdio.hint main(){// 算术运算符int a 13;int b 6;printf(%d\n, ab); printf(%d\n, a-b); printf(%…1 项目分析
让输入/输出口的P1.0或P1.0~P1.7连接的LED灯闪烁。
2 技术准备
1、C语言知识点
1 运算符
1 算术运算符
#include stdio.hint main(){// 算术运算符int a 13;int b 6;printf(%d\n, ab); printf(%d\n, a-b); printf(%d\n, a*b); printf(%d\n, a/b); printf(%d\n, a%b); // 后续应用将数的十位、个位取出来分别记录下来用于显示在不同的数码管printf(1: %d\n, a/10);printf(3: %d\n, a%10);return 0;
}2 自增/自减运算符 自增运算符为其功能是使变量的值自增1 自减运算符为--其功能是使变量值自减1。
#include stdio.hint main(){// 自增、自减运算符 --》 计数int a 10;printf(%d\n, a); // 在后表示先用后加 a; // 在前表示用先加后用 printf(%d\n, a);return 0;
}3 关系运算符 关系表达式的值是真和假在C程序用整数1和0表示。
#include stdio.hint main(){// 关系运算符 -- if语句中使用 int a 13;int b 6;printf(%d\n, ab); printf(%d\n, ab); printf(%d\n, a!b);return 0;
}5 逻辑运算符 #include stdio.hint main(){// 逻辑运算符 -- if语句中使用条件关系的判断 int mathScore 90;int englishScore 60;int stu1_mathScore 99;int stu1_englishScore 66;printf(%d\n, (stu1_mathScore 60) (); printf(%d\n, a||b); printf(%d\n, !b);return 0;
}6 位运算符和位表达式 #include stdio.hint main()
{int a 10; // 二进制为1010int b 6; // 二进制为0110printf(%d\n, a b); // 2 -- 0010printf(|%d\n, a | b); // 14 -- 1110// int在计算机中是以补码形式存储printf(~%d\n, ~a); // -11 -- 0101 (32位0101,最高位为1表示为负补码取反后 1)printf(^%d\n, a ^ b); // 1100 -- 12printf(: %d\n, a 2); // 1010 00 -- 40 低位补0高位丢失printf(: %d\n, b 3); // 0000 00 -- 0 高位补0低位丢失return 0;
} 7 赋值运算符 格式 变量名 表达式;
#include stdio.hint main()
{int number 10; char letter a;printf(int%d\n, a); printf(char%c\n, letter); return 0;
}8 复合赋值运算符
将变量计算的结果重新赋值给该变量
#include stdio.hint main()
{int a 13;int b 6;//a a b;a b; printf(%d\n, a); return 0;
}9 三目运算符
表达式1 ? 表达式2 : 表达式3;#include stdio.hint main()
{int a 10; int b 6; printf(结果为%d, a b ? a : b); // a 大于 b,返回a否则返回breturn 0;
}2 选择与循环语句
1 if 语句
if(表达式)
语句;if(表达式){语句列表1
}
else{语句列表2
}//多分支
if(表达式1){语句列表1
}
else if(表达式2){语句列表2
}
else{语句列表3
}
#include stdio.hint main()
{// if 语句 -- 存在多个范围判断 int a 4;if(a 0){printf(a 是正数);} else if(a 0){printf(a 是负数);} else{printf(a 是零);}return 0;
}2 switch语句
使用用于多分支的情况可以简化多重if语句嵌套的情况。
switch(表达式A){case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;……case 常量表达式n:语句n;break;default:语句n1; break;
} #include stdio.hint main()
{// switch-case -- 对变量的有限个取值判断 int a 1;switch(a){case 1:// 无breakcase穿透 printf(选项1);case 2:printf(选项2);break;case 3:printf(选项3);break;default:printf(无效选择);} return 0;
}3 while语句
while(表达式){循环语句
}#include stdio.hint main()
{// while循环 -- 已知或未知循环次数 int a 1;while(a 6){printf(%d\n, a);a;} return 0;
}4 do-while语句
do{循环语句
}while(表达式);5 for语句
for(表达式1表达式2表达式3){循环语句
}
#include stdio.hint main()
{// while循环 -- 已知或未知循环次数 int a 1;while(a 6){printf(%d\n, a);a;} return 0;
}6 死循环
// 死循环 -- 主要用于未知循环次数
while(1){} for(;;){}3 函数
1函数的定义
void 函数名()
{语句块;
}2函数的返回
类型 函数名(形参1,形参2,形参3,……)
{……return 数据;
} 3形式参数与实际参数。
void(类型形参1类型形参2……)
{
}函数名(实参1;实参2;实参3;……);4函数的调用方式
函数名();#include stdio.h// 函数定义位置
// 1 在main函数之前
int max(int a, int b){if(a b){return a;} else{return b;}
} int main()
{// 调用函数int cmax(4, 7); printf(最大值%d\n, c);int dmax1(40, 7); printf(最大值%d\n, d); return 0;
}// 2 在main函数之后
int max1(int a, int b){if(a b){return a;} else{return b;}
} 4 reg52.h 介绍 用于80C52和80C32微控制器的通用头文件。其中定义了各种特殊字节寄存器如P0口、P1口、P2口、P3口、程序状态字寄存器、累加器、B特殊寄存器、堆栈指针寄存器和数字指针低位/高位等。该头文件还定义了一些与定时器/计数器和电源控制相关的寄存器。 导入 #include reg52.h区别引入方式 “” 与 “” 使用双引号来包含头文件时编译器会首先在当前文件所在的目录下搜索指定的头文件。如果在这个目录下找不到文件编译器会继续在编译器的标准库路径中查找。这种机制允许开发者包含项目中自定义的头文件。 当使用尖括号时编译器只在编译器的标准库路径中查找指定的文件。意味着尖括号主要用于包含标准库头文件如 stdio.h、stdlib.h 等。 内容 点击到 “reg52.h” 处右击选择 Open Document reg52.h
3 项目实现
实验1 点亮LED 基本结构main.c 文件 #include reg52.hsbit LED P1^4; void main()
{while (1){LED 0; // 点亮LED1}
}注意一个程序里有且只有一个main函数。 释义 **sbit LED P0^4; ** 定义P0.4引脚赋值给变量LEDsbit 是定义特殊功能寄存器的位变量。
实验2 实现LED闪烁 延迟函数 void Delay(unsigned int t)
{while(--t);
}说明 通过一个空 while 循环来延迟执行让CPU在循环中忙等待直到变量 t 的值从传入的值递减到0。大约是 0.1 毫秒ms或 0.0001 秒。 缺点 效率低下CPU在这段时间内无法执行其他任务导致资源浪费。不可预测性延迟的时间长度高度依赖于执行代码的CPU的速度。在更快的CPU上同样的循环次数会更快地完成导致延迟时间更短。不可移植性由于延迟时间依赖于CPU速度因此代码在不同硬件上的表现可能会有很大差异。 代码 #include reg52.h //头文件包含特殊功能寄存器的定义sbit LED0P1^0; // 用sbit 关键字 定义 LED到P1.0端口void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数
------------------------------------------------*/
void main (void)
{while (1) //主循环{LED00; //将P1.0口赋值 0对外输出低电平Delay(10000); //调用延时程序更改延时数字可以更改延时长度LED01; //将P1.0口赋值 1对外输出高电平Delay(10000);}
}/*------------------------------------------------延时函数含有输入参数 unsigned int t无返回值unsigned int 是定义无符号整形变量其值的范围是0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{while(--t);
}方式2for循环延迟 #include reg52.hsbit LED P1^4;
void delay();void main()
{while (1){LED 0; // 点亮LED1delay(); // 延时1sLED 1; // 熄灭LED1delay(); // 延时1s }
}实现delay函数 void delay()
{unsigned int i, j;for(i0; i183; i){for(j0; j1000;j); }
} 实验3 LED灯先快闪再慢闪循环闪烁
#includereg52.h //头文件包含特殊功能寄存器的定义sbit LED0 P1 ^ 0; // 用sbit 关键字 定义 LED到P1.0端口void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数
------------------------------------------------*/
void main()
{unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255while (1) { //主循环for (i 0; i 10; i) { //加入 for循环表明for循环大括号中的程序循环执行10次LED0 0; //将P1.0口赋值 0对外输出低电平Delay(5000); //调用延时程序更改延时数字可以更改延时长度LED0 1; //将P1.0口赋值 1对外输出高电平Delay(5000);}for (i 0; i 10; i) {LED0 0; //将P1.0口赋值 0对外输出低电平Delay(60000); //用于改变闪烁频率LED0 1; //将P1.0口赋值 1对外输出高电平Delay(60000);}}
}/*------------------------------------------------延时函数含有输入参数 unsigned int t无返回值unsigned int 是定义无符号整形变量其值的范围是0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{while (--t);
}实验4 不同频率让多个LED灯闪烁
#includereg52.hsbit LED0 P1 ^ 0;
sbit LED1 P1 ^ 1;
sbit LED2 P1 ^ 2;
sbit LED3 P1 ^ 3;
sbit LED4 P1 ^ 4;
sbit LED5 P1 ^ 5;
sbit LED6 P1 ^ 6;
sbit LED7 P1 ^ 7;void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数
------------------------------------------------*/
void main()
{unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255while (1) {for (i 0; i 10; i) { //程序循环执行10次LED0 0; //将P1.0口赋值 0对外输出低电平LED2 1;LED4 0;Delay(5000);LED0 1; //将P1.0口赋值1对外输出高电平LED2 0;LED4 1;Delay(5000);}for (i 0; i 10; i) {LED0 0; //将P1.0口赋值 0对外输出低电平LED2 1;LED4 0;Delay(60000);LED0 1; //将P1.0口赋值 1对外输出高电平LED2 0;LED4 1;Delay(60000);}}
}/*------------------------------------------------延时函数含有输入参数 unsigned int t无返回值unsigned int 是定义无符号整形变量其值的范围是 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{while (--t);
}4 格式化代码 下载并安装AStyle 访问AStyle的官方网站https://astyle.sourceforge.net/下载最新版本的AStyle。 解压下载的文件并记住解压后的路径特别是Astyle.exe文件的路径。 在Keil 5中加载AStyle 打开Keil 5软件选择Tools - Customize Tools Menu...点击“新建”按钮创建一个新的菜单项命名为“formatCode” 在 “Command” 栏中选择上述解压的绝对路径选择到 astyle.exe 在 “Arguments” 栏中输入!E --style1tbs --indent-col1-comments --break-blocks --pad-oper --pad-comma --pad-header --unpad-paren --delete-empty-lines --align-pointername --break-one-line-headers --add-braces --max-code-length120。 点击“OK”保存设置。 设置 代码格式化 快捷键 点击菜单栏中的 【Edit】选择【 Configuration…】切换到【Shortcut Keys】在 Select a Command 中找到【Tools: formatCode】点击 【Create Shortcut】设置快捷键按下对应的按键如Ctrl Q点击【OK】