51单片机(入门保姆级教程)——点亮一个LED灯
51单片机技术应用教程(C语言版)项目一 1个LED的闪烁设计与制作

4.十进制整数转换为十六进制数可用除16取余法。
即用16不断地去除待转换的十进制数,直至商等于0为止。 将所得的各次余数,依倒序排列,即可得到所转换的十 六进制数。如下式所示:
即 38947 =9823H
16 38947
3
16 2434
2
16 152
8
16 9
9
0
1.1.2 符号数的表示法
1. 机器数与真值 (1)机器数:在计算机中,常用数的符号和数值部分一起编码的方法表示符号数, 较常用的有原码、反码和补码表示法。这几种表示法都将数的符号数码化。机器中 编码表示的数,正号用“0”表示,负号用“1”表示 (2)真值:数值连同符号“+”或“-”称为机器数的真值。一般书写中的数。
技能要求
1.会识别MCS-51单片机; 2.市场调研单片机系列产品,了解单 片机市场行;
3.会搭建单片机最小应用系统; 4.会检测1个LED灯基本电路; 5.会简单使用Keil u Vision与Proteus软 件设计与仿真调试程序并进行硬件 设计。
6.会ISP在线下载。
51单片机技术应用活页式教程(C语言版)
3.请根据资料用Proteus设计“简易指示灯设计”硬件图,下载其程序的机器代码到 AT89C51单片机芯片中,查看仿真结果,并分析仿真结果。请您将硬件图所需元器 件与仿真分析结果写在下面的方框中。
51单片机技术应用活页式教程(C语言版)
项目一:1个LED灯闪烁设计与制作
知识 链接
1.1计算机中的数和编码
51单片机技术应用活页式教程(C语言版)
项目一:1个LED灯闪烁设计与制作
【引导学习2】
我们已经学习了解了AT89C51单片机的引脚,在1个LED的闪烁设计与制作之前,我们要先学习 单片机的基础知识。下面请运用信息查找等方法请完成如下问答题: 1.将下列十六进制无符号数转换为十进制数。 2CH,4FEH,378H,100H,CADH
KeilC51学习2点亮LED灯

KeilC51学习2点亮LED灯P0⼝联接8个LED灯,P1^0~P1^7;#include<reg52.h>sbit LED=P1^0;void main(){LED=0;while(1);}//此⽅法使⽤1个字节对单个端⼝赋值P1 = 0xFF; //P1⼝全部为⾼电平,对应的LED灯全灭掉,//ff换算成⼆进制是 1111 1111P1 = 0xfe; //P1⼝的最低位点亮,可以更改数值是其他的灯点亮//0xfe是16进制,0x开头表⽰16进制数,//fe换算成⼆进制是 1111 1110全部取反,主函数中的代码修改为LED=~LED;#include<reg52.h>unsigned int i,j;void main(){while(1){P1=~(1<<j++);if(j==8){j=0;}for(i=0;i<50000;i++);}}1void main (void)2 {3while (1) //主循环4 { //主循环中添加其他需要⼀直⼯作的程序5 LED=~LED;6//将P1.0⼝赋值 0,对外输出低电平7 delay(100);//执⾏100次8 }9 }10void delay(int time)//延时函数11 {12int i=0;13while(time--)14 {15 i=4000;16while(i--);17 }18 }延时闪烁1void delay(int time)//延时函数2 {3int i=0;4while(time--)5 {6 i=4000;7while(i--);8 }9 }10void main (void)11 {12while (1) //主循环13 { //主循环中添加其他需要⼀直⼯作的程序1415 unsigned char i; //定义⼀个⽆符号字符型局部变量 i 取值范围 0~25516//P1=0xfe; //赋初始值17for(i=0;i<8;i++) //加⼊ for循环,表明for循环⼤括号中的程序循环执⾏8次18 {19 P1<<=1;20 delay(100);//执⾏100次21 }22 }23 }延时左移1void delay(int time)//延时函数2 {3int i=0;4while(time--)5 {6 i=4000;7while(i--);8 }9 }10void main (void)11 {1213 unsigned char i; //定义⼀个⽆符号字符型局部变量 i 取值范围 0~25514 delay(100);15 P1=0xfe; //赋初始值16while (1) //主循环17 {18for(i=0;i<8;i++) //加⼊ for循环,表明for循环⼤括号中的程序循环执⾏8次19 {20 delay(100);21 P1<<=1;22 P1=P1|0x01; //左移后,最右端⾃动赋值0,所以需要该语句赋值123 }24 P1=0xfe; //重新赋初始值25//主循环中添加其他需要⼀直⼯作的程序26 }27 }循环左移1 sbit LED0=P1^0;2void delay(int i)//延时函数3 {4while(i--);5 }6void main (void)7 {89 unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值10while (1) //主循环11 {12 LED0=1;13 delay(60000); //特意加延时,可以看到熄灭的过程14for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++){ //PWM_LOW表⽰低15//电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次1617 LED0=0; //点亮LED18 delay(PWM_LOW);//延时长度,600次循环中从1加⾄59919 LED0=1; //熄灭LED20 delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减⾄12122 }23 LED0=0;24for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--){ //与逐渐变亮相反的过程2526 LED0=0;27 delay(PWM_LOW);28 LED0=1;29 delay(CYCLE-PWM_LOW);30 }31//主循环中添加其他需要⼀直⼯作的程序32 }33 }呼吸灯流⽔灯1 #include<reg52.h> //包含头⽂件,⼀般情况不需要改动,2//头⽂件包含特殊功能寄存器的定义34void delay100ms(unsigned char num);5/*------------------------------------------------6流⽔灯7------------------------------------------------*/8void main (void)9 {10 unsigned char led=0xff,mask=0x1,flag=0;11//unsigned char tflag=0,time=100;12while(1)13 {14 P1=led^mask; //mask为0 全灭15 delay100ms(5); //延时500ms16if(0x80==mask)17 flag=0;// 让mask向右位移18if(0x1==mask)19 flag=1;//让mask向左位移20 flag?(mask<<=1):(mask>>=1);21 }22 }2324void delay100ms(unsigned char num)25 {26 unsigned char n,m;27for(;num;num--)28 {29for(n=200;n;n--)30 {31for(m=250;m;m--);32 }33 }34 }流⽔灯函数实现流⽔灯1 #include<reg52.h> //包含头⽂件,⼀般情况不需要改动,2 #include<intrins.h>3#define uchar unsigned char //头⽂件包含特殊功能寄存器的定义 4void delay100ms(unsigned char num);5/*------------------------------------------------6利⽤_crol_、_cror_实现流⽔灯7_crol_ 将char型变量循环左移8_cror_ 将char型变量循环右移9------------------------------------------------*/10void main (void)11 {12 uchar x=0x3;13 bit flag=0;14while(1)15 {16 P1=x;17 delay100ms(10);18if(0x3==x)19 flag=0;20else if(0xc0==x)21 flag=1;22 flag?(x=_cror_(x,2)):(x=_crol_(x,2));23 }24 }25//延时函数26void delay100ms(unsigned char num)27 {28 unsigned char n,m;29for(;num;num--)30 {31for(n=200;n;n--)32 {33for(m=250;m;m--);34 }35 }36 }流⽔灯2指针实现流⽔灯#include <reg52.h>void delay(unsigned int);//指针实现流⽔灯代码unsigned char dis[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};void main(){unsigned char i,*p;//定义⼀个⽆符号字符型变量i各⼀个指向⽆符号字符型变量的指针变量P while(1){p=&dis[0];//把数组中第⼀个成员数据(0xFE)所占的内存地址赋给指针变量P for(i=0;i<8;i++){P1=*p;//取指针指向的数组元素,并拷贝给单⽚机的P0⼝p++; //指针加1,指向数组的下⼀个元素delay(10);}}}void delay(unsigned int i){unsigned int j;for(;i!=0;i--){for(j=3000;j!=0;j--);}}指针实现流⽔灯花样流⽔灯1 #include<reg52.h> //包含头⽂件,⼀般情况不需要改动,2#define uchar unsigned char //头⽂件包含特殊功能寄存器的定义3 uchar code tab[]={40x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80, //正向流⽔灯50x40,0x20,0x10,0x8,0x4,0x2,0x1,0x0, //反向流⽔灯60x55,0xaa,0x55,0xaa,0x55,0xaa,0x0, //隔灯闪烁70x0f,0xf0,0x0f,0xf0,0x0, //⾼四盏底四盏闪烁80xcc,0x33,0xcc,0x33,0xcc,0x33,0x0//隔两盏灯闪烁9 };10void delay100ms(unsigned char num);11/*------------------------------------------------12花样流⽔灯13------------------------------------------------*/14void main (void)15 {16 uchar x;17while(1)18 {19for(x=0;x<35;x++)20 {21 P1=tab[x];22 delay100ms(10);23 }24 }25 }2627void delay100ms(unsigned char num)28 {29 unsigned char n,m;30for(;num;num--)31 {32for(n=200;n;n--)33 {34for(m=250;m;m--);35 }36 }37 }花样流⽔灯指针,⼆维数组花样流⽔灯#include <reg52.h>void delay(unsigned int ); //延时函数的声明//*******定义⼀个⼆维数组,存储40个彩灯数据。
第5讲 点亮一个LED灯

亚博科技
51单片机开发板28课配套视频教程
While语句
• While (表达式) • {语句(内部也可为空)}
• 特点:先判断表达式,后执行语句。
• 原则:若表达式不是0,即为真,那么 执行语句。否则跳出while 语句。
LED的符号为: LED的工作是有方向性的,只有当正级接到 LED阳极,负极接到LED的阴极的时候才能工作,如果反接LED是不能 正常工作的。
3.LED的原理图解析 开发板上面LED的原理图
如右图,LED的阳极串联一个 电阻,然后连接到电源VCC, 而LED的阴极连接到单片机的 P1口,如果你想点亮一盏 LED就对把单片机相对应的 IO赋为低电平。
特殊功能位定义 • 也可以说是特殊功能位声明。 • Sbit:一般用来定义一个特殊功能寄存器(SFR)的可寻址的
某一位 。利用它,可以访问8051单片机 • 特殊功能寄存器( SFR )中的可寻址位。 • 一般格式: • Sbit 位变量名=特殊功能寄存器名^位位置
• Sbit LED1=P0^1 • 注意:SFR可寻址位只能通过特殊功能位定义的方式来使
亚博科技
51单片机开发板28课配套视频教程
电流 • 电流,是指电荷的定向移动。电源的电 动势形成了电压,继而产生了电场力,在 电场力的作用下,处于电场内的电荷发生 定向移动,形成了电流。电流的大小称为 电流强度(简称电流,符号为I),是指单 位时间内通过导线某一截面的电荷量,每 秒通过1库仑的电量称为1「安培」(A)。 安培是国际单位制中所有电性的基本单位 。除了A,常用的单位有毫安(mA)、微安 (μA) 。
51单片机开发板28课配套视频教程
51单片机第一个LED点亮

单片机开发仪视频教程
谢谢大家!
单片机开发仪视频教程
C语言知识点: bit和sbit都是C51扩展的变量类型。 sbit用法: sbit 变量名=地址值; 在给某个引脚取名的时候经常会用到。
C程序
#include "reg52.h" sbit led=P0^0; P0^0引脚连接 { led=1; } }
单片机开发仪视频教程
点亮第一个LED 1.LED介绍 2.LED工作原理 3.LED模块原理图 4.编写驱动程序
单片机开发仪视频教程
1、LED 介绍
LED,即发光二极管,是一种半导体固体发光器件。 如图:
单片机开发仪视频教程
2.LED的工作原理。 LED的符号为: LED的工作是有方向性的,只有当 正级接到LED阳极,负极接到LED的阴极的时候才能工作, 如果反接LED是不能正常工作的。 3.LED模块原理图 参考开发板原理图对应的模块电路
51单片机控制照明灯增亮和减灭

西安科技大学电气工程及其自动化专业3+1大四实践课51单片机控制照明灯增亮和减灭1.原理图2.程序源代码#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit br=P2^1; //总开关sbit su=P2^2; //逐渐减灭sbit in=P2^3; //逐渐增亮sbit pu=P2^0; //脉冲触发uint m,n,z,f; //定义变量void delay_18ms(uint t) //消抖延时,延时为15ms,精度为0us{uint a,b;for(;t>0;t--)for(b=122;b>0;b--)for(a=2;a>0;a--);}void delay_80us(uint t) //脉冲宽度为80us,精度为0us{unsigned char a;for(;t>0;t--)for(a=2;a>0;a--);}void main(void){f=0; //初始化pu=1;TMOD=0x02; //定时器方式2TH0=0x00; //装初值对应200us;TL0=0x38;ET0=0; //定时器0溢出中断禁止TR0=0; //禁止定时器启动IT0=1; //下降沿触发EX0=0; //禁止外部中断0EA=1; //cpu中断开放while(1) //放循环{if(su==0) //是否输入低电平{delay_18ms(21); //延时确定即消抖if(su==0) //确认是否为低电平{while(!su);m++;if(m>31) //最大导通角的值,即灯泡亮度最小{m=31;}}}if(in==0) //是否输入低电平{delay_18ms(21); //延时确定即消抖if(in==0) //确认是否为低电平{while(!in);m--; //最小导通角的值,即灯泡亮度最亮if(m<1){m=1;}}}if(br==0) //是否输入低电平{delay_18ms(21); //延时确定即消抖if(br==0) //确认是否为低电平{if(f==0) //开关状态检测,此句为打开灯泡{f=1; //总开关标志设定m=8; //灯泡初值触发角度EX0=1; //允许外部中断0}else //此句为关断灯泡{f=0; //总开关标志设定EX0=0; //关断外部中断0}while(!br);}}}}void int0(void) interrupt 0 //外部中断0程序{ET0=1; //定时器0中断允许TR0=1; //定时器0启动n=m; //把导通角m的值赋值到n}void timer0(void) interrupt 1{z++; //触发时间设定if(z==n) //把导通角的n的值赋值到z{z=0;TR0=0; //定时器0中断禁止ET0=0; //定时器0禁止启动TH0=0x00; //装初值为200usTL0=0x38;pu=0; //脉冲形成环节,脉冲宽度为80usdelay_80us(11);pu=1;}}。
单片机控制LED灯点亮(C语言).ppt

}
}
}
1)宏定义
#define uint unsigned int #define uchar unsige 标识符 字符串
C语言中的例子:
#define PI 3.1415926
2)函数声明 函数声明是指函数的定义在后面,而前面需 要对它进行调用,这样就需要预先作声明,一般来 说函数的声明只是函数首部加上分号即可。
#include<reg52.h> #define uint unsigned int #define uchar unsigned char void main() { uint a;
while(1)
{ P1=0xaa; a=50000;
while(a--);
P1=0x55; a=50000; while(a--);
5)delay()函数 是一个延时函数。 两个 for 语句,构成了循环嵌套。用数数的方式消
耗时间产生延迟效果 。具体延迟多久取决于若干 因素,以后再讨论。 void delay() { uint x,y; for(x=100;x>0;x--) for(y=600;y>0;y--) ; } 注意:第二个for循环体是一条空语句。
点亮0、2、4、6灯: D7 1 D6 0 D5 D4 1 D3 0 D2 1 D1 D0 0 1 0
从二进制转化为十六进制:0xaa
点亮1、3、5、7灯:
D7 0 D6 1 D5 D4 0 D3 1 D2 0 D1 D0 1 0 1
从二进制转化为十六进制:0x55
5)for循环
单片机控制LED灯点亮(C语言)

C语言-51单片机的头文件
通常有:reg51.h reg52.h math.h ctype.h stdio.h stdlib.h absacc.h 常用有:reg51.h reg52.h (定义特殊功能寄存器和位寄存器 ); math.h (定义常用数学运算);
二、点亮板子上的0、2、4、6灯,与1、3、 5、7灯交替闪烁
1110 1111 10000
D
E F 10
Keil的使用 掌握Keil工程的建立和软件的开 发;
1.启动Vision Vision2是一个标准的Windows应用程 序,双击Keil Vision2图标即可启动,也可 以选择“开始”→“程序”Keil Vision2”命 令来启动运行。其主界面如图1-28所示。
void main() { uint a; temp=0xfe; while(1) { for(num=0;num<8;num++) { P1=temp; a=50000;while(a--); temp=_crol_(temp,1); P1=0xff; a=50000;while(a--); } } }
4.输入源程序:此时就可以输入源程序了。 5.设置目标硬件的工具选项 程序编写完成后,还要对项目进行进一 步的设置,以满足要求。
“Output”选项卡 如图所示,其中有多个选项,此处选择 “Create HEX File”复选框用于生成可执行代 码文件,该文件可以用编程器写入单片机芯 片,文件的扩展名为.HEX,默认情况下该项 未被选中,如果要写芯片做硬件实验,就必 须选中该项。其余选项均取默认值,不做任 何修改。
2.创建一个项目并选择单片机 选择“Project”(项目)→“New Project”(新建项目)命令,如图1-29所示, 将弹出“Greate New Project”(新建项目) 对话框
单片机试验一:点亮一个发光二极管

单片机试验一:点亮一个发光二极管拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们用的一块称之为89S52 的芯片,下面就看一下如何给它连线。
1、电源:这当然是必不可少的了。
单片机使用的是5V 电源,其中正极接40 引脚,负极(地)接20引脚。
2、振蒎电路:单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19 脚。
只要买来晶振,电容,连上就可以了,按图1 接上即可。
3、复位引脚:按图1 中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。
4、EA 引脚:EA 引脚接到正电源端。
至此,一个单片机就接好,通上电,单片机就开始工作了。
当然:您并不一定完全需要一片89S52, 实际上我们用8051 系列的任何一种芯片都是可以的。
例如89s51,89c52 等等。
我们的第一个任务是要用单片机点亮一只发光二极管LED,显然,这个LED 必须要和单片机的某个引脚相连,否则单片机就没法控制它了,那么和哪个引脚相连呢?单片机上除了刚才用掉的5 个引脚,还有35 个,将这个LED 和1脚相连。
(见图1,其中R2 是限流电阻)按照这个图的接法,当1 脚是高电平时,LED 不亮,只有1 脚是低电平时,LED 才发亮。
因此要1 脚要能够控制,也就是说,要能够让1 引脚按要求变为高或低电平。
即然要控制1 脚,就得给它起个名字,总不能就叫它一脚吧?叫它什么名字呢?设计51 芯片的INTEL公司已经起好了,就叫它P1.0,这是规定,不可以由我们来更改。
名字有了,又怎样让它变高或变低呢?叫人做事,说一声就可以,这叫发布命令,要计算机做事,也得要向计算机发命令,计算机能听得懂的命令称之为计算机的指令。
让一个引脚输出高电平的指令是SETB,让一个引脚输出低电平的指令是CLR。
因此,要P1.0 输出高电平,只要写SETB P1.0,要P1.0 输出低电平,只。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机(入门保姆级教程)——点亮一个LED灯一、为什么要学习单片机?
作为一名工科学生,进入大学参加各种活动,例如:电子设计大赛、寻迹车比赛、LED电子灯比赛以及各种各样的微控、弱控强电路等,都离不开单片机的身影。
电路、c语言、数电、模电、计算机控制等知识的学习,给单片机的学习增添了软辅助,但我认为,学习单片机更多的是自己的兴趣、爱好,正如“程序虐我千百遍,我视程序为初恋”。
此外,学习单片机知识,从最基础的51单片机入门学习,可以为我们后面学习STM32、ARM微控器等其微控制器的学习奠定知识基础和积攒一定的经验,给自己的大学及以后的职业道路增加一丝色彩。
二、首先了解什么是单片机?
单片机又称单片微控制器,把一整个计算机系统集成到一个芯片上,当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
一块芯片就成了一台计算机。
体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
单片机属于一种集成式电路芯片。
主要包含CPU、只读存储器ROM和随机存储器RAM、时钟电路、中断系统和定时/计数器及各种输入输出IO 口构成,多样化数据采集与控制系统能够让单片机完成各项复杂的运算,无论是对运算符号进行控制,还是对系统下达运算指令都能通过单片机完成。
三、如何快速、高效学习单片机?
多学习;查阅原始资料,即单片机手册和各个模块手册。
多动手;代码的学习主要是自己多动手进行练习,孰能生巧。
多思考;一个程序的实现往往有多种不同的方式,但最基本的原理保持不变,只是每个程序员的习惯和书写形式不一,复杂程度和代码的可移植性不一样,万变不离其原理。
四、准备资料和软件(提前了解,间接性、针对性学习印象比较深刻)
4.1相关基础知识
单板的基本知识、电路的基本电路知识、数字电子技术基础知识、模拟电子技术基础知识、选用模块的逻辑知识、电力电子知识(模块化弱控强应用电路后buck、boost电路等)
4.2基础软件
推荐keil5:编写程序代码
proteus模拟仿真:可以进行模型构建及仿真演示,为实物排除问题
Altium Designer:进行原理图绘制,设计自己专属的pcb板
STC-ISP:将keil5生成的He某文件烧录进单片机内
B站:可以在上面进行部分程序的学习
5.1LED原理和知识
5.2点亮一个LED灯具体代码
#include <reg52.h> //此文件定义单片机的一些特殊功能寄存器
sbit led=P2^0; //将单片机的P2.0端口定义为led(当然也可以定义其他端口,欢迎尝试)
void main( //每一个main.c中必须包含一个主函数,程序从这里开始执行
{
while(1) //while死循环,程序将在这里进行不断重读执行 {
led=0; //P2.0端口设置为低电平,根据二极管原理点亮LED灯
}
}
注:其中对应行都有注释,大家移植后可以删除
5.3包含/区分/学习知识点
int main和void main的区别(掌握)
有一定c语言知识的同学应该知道int是需要返回的,在单片机里也一样。
void main没有返回值,int main有返回值(即return 0)。
C51中的一些程序扩充定义(了解)
(1)sfr:特殊功能寄存器。
sfr 变量名=地址值(现在已经平时不用我们自己去定义寄存器的名字,因为在reg52.H这个头文件里面都帮我们定义好了)
(2) sbit:特殊功能位声明
sbit 变量名=地址值;在给一些引脚取名的时候经常会用到。
如上面对LED管脚的定义sbit led=P2^0。
(3)bit:位变量声明
bit 用来定义位数据变量,由它定义的变量数据仅为1位,只有0或1两种状态,长度为1字节。
c51基本数据类型(熟悉并能运用)。