单片机入门学习笔记----第一课:简单的C语言语法+流水灯实验
2011-06-20 14:50
525 查看
第一课:流水灯实验11.20
1、C51常用数据类型:
无符号整型:unsigned int 占16位数 取值0-65535
无符号字符型: unsigned char 占8位数 取值0-255
2、C51常用头文件:
reg51.h reg52.h math.h ctype.h stdio.h stdlib.h absac.h intrins.h
reg51.h和reg52.h用来定义51和52单片机的特殊功能寄存器和位寄存器,头部内容大部分一样,52就比51多了几行定义T2寄存器的内容
math.h定义常用数学运算
3、C51的运算符:
算术运算符:
% 用来求余数 10%3=1
关系运算符:
!= 测量不等
&& 与
|| 或
! 非
位运算符:
& 按位与
| 按位或
^ 异或
~ 取反
>> 右移
<< 左移
4、所需器件
①排阻:103=10*10^3欧姆 150=15*10^0欧姆 最后一位表示数量级
②发光二极管::单向导通性,通过5毫安左右电流可发光,电流越大亮度越强,但要控制在3-20毫安之间,需在阳极串联一个电阻保证其通过的电流不要过大,又称“限流电阻”,发光时测得二极管两端电压为1.7V,称之为“导通压降”
③74h573锁存器:
OE反:输出使能端,低电平有效
1D-8D:数据输入端
1Q-8Q:数据输出端
LE:锁存允许端
H L:高低电平
X:任意电平
Z:高阻态
5、单片机C语言语句:
前置:声明书写
#include<> //包含头文件
#define A=B //宏定义
void XX() //声明子函数
int/char C,D; //定义常量
void main() //主函数
{}
①while循环语句
格式:
while(表达式)
{
内部语句(可为空)
}
原则:若表达式不是0,即为真,那么执行语句,否则跳出执行后面的语句。
使用:
While(1) //死循环,永远跳不出的执行
{
需要循环使用的语句
}
Eg:
#include<reg52.h>
void main()
{
P1=0xfe;
While(1);
}
②for循环,演示语句
格式:
for(表达式1;表达式2;表达式3)
{
语句(可为空)
}
使用for延时:、
③带参数函数的写法和调用
首先要在void main()前声明
然后输入循环语句
void Delayms(unsigned int xms) 此写法方便修改延时时间
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;i--); //子循环
}
然后再需要延时的语句下一行键入
Delayms(1000) //延时1000ms=1s
从中间到两边流水灯
④不带参数函数的写法及调用
for(i=1000;i>0;i--) //延时1s
for(j=110;j>0;j--);
如果一些语句不止一次用到,而且内容相同,就可以把它写成一个不带参数的语句,档主函数需要时直接调用这个子函数,以下写法与上边的语句效果相同,使用前需在主函数前声明,
不带参数括号内为空 void delay1s()
void delay1s() //括号里面无任何数据或符号,即此函数为无参数符号
{
for(i=1000;i>0;i--) //延时1s
for(j=110;j>0;j--);
}
6、利用C51库函数实现流水灯
使用C51中自带头文件intrins.h中的_crol_和_cror_函数实现循环左移和循环右移,利用位运算符<<和>>实现左移和右移。
综合练习:
1、C51常用数据类型:
无符号整型:unsigned int 占16位数 取值0-65535
无符号字符型: unsigned char 占8位数 取值0-255
2、C51常用头文件:
reg51.h reg52.h math.h ctype.h stdio.h stdlib.h absac.h intrins.h
reg51.h和reg52.h用来定义51和52单片机的特殊功能寄存器和位寄存器,头部内容大部分一样,52就比51多了几行定义T2寄存器的内容
math.h定义常用数学运算
3、C51的运算符:
算术运算符:
% 用来求余数 10%3=1
关系运算符:
!= 测量不等
&& 与
|| 或
! 非
位运算符:
& 按位与
| 按位或
^ 异或
~ 取反
>> 右移
<< 左移
4、所需器件
①排阻:103=10*10^3欧姆 150=15*10^0欧姆 最后一位表示数量级
②发光二极管::单向导通性,通过5毫安左右电流可发光,电流越大亮度越强,但要控制在3-20毫安之间,需在阳极串联一个电阻保证其通过的电流不要过大,又称“限流电阻”,发光时测得二极管两端电压为1.7V,称之为“导通压降”
③74h573锁存器:
OE反:输出使能端,低电平有效
1D-8D:数据输入端
1Q-8Q:数据输出端
LE:锁存允许端
H L:高低电平
X:任意电平
Z:高阻态
5、单片机C语言语句:
前置:声明书写
#include<> //包含头文件
#define A=B //宏定义
void XX() //声明子函数
int/char C,D; //定义常量
void main() //主函数
{}
①while循环语句
格式:
while(表达式)
{
内部语句(可为空)
}
原则:若表达式不是0,即为真,那么执行语句,否则跳出执行后面的语句。
使用:
While(1) //死循环,永远跳不出的执行
{
需要循环使用的语句
}
Eg:
#include<reg52.h>
void main()
{
P1=0xfe;
While(1);
}
②for循环,演示语句
格式:
for(表达式1;表达式2;表达式3)
{
语句(可为空)
}
使用for延时:、
③带参数函数的写法和调用
首先要在void main()前声明
然后输入循环语句
void Delayms(unsigned int xms) 此写法方便修改延时时间
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;i--); //子循环
}
然后再需要延时的语句下一行键入
Delayms(1000) //延时1000ms=1s
从中间到两边流水灯
#include <reg52.h> #define uint unsigned int //宏定义 简化 unsigned int void delayms(uint); //声明延时子函数 必须在主函数前声明,而且带参数的需要在括号中生命参数类型 在此处失败N次 void main() { while(1) { P1=0xe7; //总线写法 十六进制e7即二进制的11100111 delayms(1000); //延时1s P1=0xdb; delayms(1000); P1=0xbd; delayms(1000); P1=0x7e; delayms(1000); P1=0xbd; delayms(1000); P1=0xdb; delayms(1000); } } void delayms(uint xms) //延时子函数 1000ms=1s { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); //i j千万别搞混了。。。。 }
每隔两个逐一点亮 #include <reg52.h> #define uint unsigned int //宏定义 简化 unsigned int void delayms(uint); //声明子函数 必须声明 在此处失败N次 void main() { while(1) { P1=0xfc; delayms(1000); P1=0xf9; delayms(1000); P1=0xf3; delayms(1000); P1=0xe7; delayms(1000); P1=0xcf; delayms(1000); P1=0x9f; delayms(1000); P1=0x3f; delayms(1000); } } void delayms(uint xms) //延时子函数 1000ms=1s { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); }
④不带参数函数的写法及调用
for(i=1000;i>0;i--) //延时1s
for(j=110;j>0;j--);
如果一些语句不止一次用到,而且内容相同,就可以把它写成一个不带参数的语句,档主函数需要时直接调用这个子函数,以下写法与上边的语句效果相同,使用前需在主函数前声明,
不带参数括号内为空 void delay1s()
void delay1s() //括号里面无任何数据或符号,即此函数为无参数符号
{
for(i=1000;i>0;i--) //延时1s
for(j=110;j>0;j--);
}
6、利用C51库函数实现流水灯
使用C51中自带头文件intrins.h中的_crol_和_cror_函数实现循环左移和循环右移,利用位运算符<<和>>实现左移和右移。
#include<reg52.h> #include<intrins.h> #define uint unsigned int //宏定义 简化 unsigned int #define uchar unsigned char //宏定义 //试验多次sbit right=_crol_ 是不可行的 void delayms(uint); //声明子函数 必须声明 在此处失败N次 uchar led; void delayms(uint xms) //延时子函数 { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void main() //注意不带参数要加() { led=0x96; //赋值 10010110 while(1) //死循环 { P1=led; //将led赋值给P1总线 delayms(500); //延时0.5秒 led=_crol_(led,1); //将led左移一位赋值给led } }
综合练习:
//利用位运算>> <<进行左右移位 和intrins.h中的_crol与_cror_函数进行循环左右移的综合练习 #include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char void delayms(uint); void delayms(uint xms) //循环子函数 { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void main() { uchar led=0xfe; //初始设置led为1111110 注意不要把此句写到while循环体里,否则就不会动了 while(led>0) //当led全部点亮时 跳出循环体 执行循环移动指令 { P1=led; delayms(1000); led=led>>1; //位运算符控制流水灯左移右移 } led=0xfe; //重新定义led为11111110,不可以写到下一个while里 while(1) { P1=led; delayms(1000); //1s延时 led=_crol_(led,2); //隔两位向左循环移动 } }
相关文章推荐
- MySql学习笔记(三)SQL简单入门语句--Fenby摘抄笔记
- COM入门(学习笔记) - 简单接口调用
- 单片机 学习笔记(二)——简单小程序
- [JAVA学习笔记-83]Ant简单入门
- JavaScript 简单入门学习笔记(四)
- python flask 学习笔记1 简单入门
- Spring入门学习笔记第一课——spring简介以及包结构
- MongoDB快速入门学习笔记2 MongoDB的概念及简单操作
- 【javaweb 学习笔记】 第一课 最简单的登陆
- [置顶] 【day 1】python编程:从入门到实践学习笔记-安装、变量和简单数据类型
- JavaScript 简单入门学习笔记(一)
- ROR 学习笔记系列二 基于ROR的简单Hello World程序入门
- JavaScript 简单入门学习笔记(二)
- appWidget 简单入门学习笔记
- 【JavaEE学习笔记】Servlet_01_入门,简单的Servlet程序
- 网易云课堂程序设计入门--C语言第一周 简单的计算程序学习笔记
- appWidget 简单入门学习笔记
- activiti学习笔记 最简单入门实例
- JavaScript 简单入门学习笔记(三)
- AngularJS学习笔记一:简单入门