搜档网
当前位置:搜档网 › 用STM32一步一步点亮led灯

用STM32一步一步点亮led灯

用STM32一步一步点亮led灯
用STM32一步一步点亮led灯

STM32之一步一步点亮led (2011-05-09 19:40)

标签: stm32led v3.4MDK 4.12入门分类:stm32

入手stm32以来,一直想快速上手,所以在各大论坛闲逛,各个达人的blog

上学习,正所谓欲速则不达,心急是吃不了热豆腐的!有木有?

最终决定使用st官网的库开发,据大侠们写道使用库可以快速上手,貌似的确如此,一个个教程写的那么好,直接拿过来用就是了。可是那么多个库,聪明的你请告诉到底选择哪一个啊?My God!实话实说,我被这些库折腾了个够!好吧,我最后还是承认最后用的是v3.4的库,是很方便!

切入正题,点亮LED。

硬件:红牛开发板,STM32F103ZET6(144封装).

软件:RealView MDK 4.12

stm32固件库:v3.4 附上自己整理后的库: V3.4_clean.rar

根据官网库自己整理了下,新建了工程模板如下图:(主要参考文章《在

Keil MDK+环境下使用STM32 V3.4库.pdf》)在KeilMDK+环境下使用STM32V3.4库.pdf

入图所示:新建一个目录01_ProLed,建议放在英文路径下,避免不必要的麻烦。将上面的库v3.4解压到此目录,再新建一个project目录,存放工程。

说明:

CMSIS:最底层接口。StartUp:系统启动文件。StdPeriph_Lib:stm32外围设

备驱动文件。Project:工程文件。User:用户文件。新建工程步骤:此处略去300字。

简单说明:

1.core_cm3.c/core_cm3.h

该文件是内核访问层的源文件和头文件,查看其中的代码多半是使用汇编语言编写的。在线不甚了解。--摘自《在Keil MDK+环境下使用STM32 V3.4库》

2.stm32f10x.h

该文件是外设访问层的头文件,该文件是最重要的头文件之一。就像51里面的reg51.h一样。例如定义了 CPU是哪种容量的 CPU,中断向量等等。除了这些该头文件还定义了和外设寄存器相关的结构体,例如:

1.typedef struct

2.{

3. __IO uint32_t CR;

4. __IO uint32_t CFGR;

5. __IO uint32_t CIR;

6. __IO uint32_t APB2RSTR;

7. __IO uint32_t APB1RSTR;

8. __IO uint32_t AHBENR;

9. __IO uint32_t APB2ENR;

10. __IO uint32_t APB1ENR;

11. __IO uint32_t BDCR;

12. __IO uint32_t CSR;

13.

14.#ifdef STM32F10X_CL

15. __IO uint32_t AHBRSTR;

16. __IO uint32_t CFGR2;

17.#endif /* STM32F10X_CL */

18.

19.#if defined (STM32F10X_LD_VL)|| defined (STM32F10X_MD_VL)||

defined (STM32F10X_HD_VL)

20. uint32_t RESERVED0;

21. __IO uint32_t CFGR2;

22.#endif /*STM32F10X_LD_VL ||STM32F10X_MD_VL ||STM32F10X_HD_VL */

23.} RCC_TypeDef;

包含了那么多寄存器的定义,那么在应用文件中(例如自己编写的 main 源文件)只需要包含

stm32f10x.h即可,而不是以前固件库的需要包含 stm32f10x_conf.h这个头文件。--摘自《在Keil MDK+环境下使用STM32 V3.4库》

3.system_stm32f10x.c/h

该头文件也可以称为外设访问层的头文件和源文件。在该文件中可以定义系统的时钟频率,定义低速时钟

总线和高速时钟总线的频率,其中最关键的函数就是 SystemInit()了,这个后面会详细介绍。总之这两

个文件是新固件库的重点,有了它粮也大大简化了使用 stm32的初始化工作。

--摘自《在Keil MDK+环境下使用STM32 V3.4库》

4.stm32f10x_conf.h

这个文件和 V2 版本的库的内容是一样的,需要使用哪些外设就取消哪些外设的注释。例如需要使用 GPIO功能,但不使用 SPI功能,就可以这样操作。--摘自《在Keil MDK+环境下使用STM32 V3.4库》

1.#include"stm32f10x_gpio.h"

2./*#include"stm32f10x_spi.h"*/

5.main.c

这个文件就不用多说了,自己编写。 --摘自《在Keil MDK+环境下使用

STM32 V3.4库》

6.stm32f10x_it.c/h

这两个文件包含了 stm32中断函数,在源文件和头文件中并没有把所有的中断入口函数都写出来,而

只写了 ARM内核的几个异常中断,其他的中断函数需要用户自己编写。--摘自《在Keil MDK+环境下使用STM32 V3.4库》

OK,开始写代码了。

由于3.4的库在启动的时候已经设置好时钟了(将在后面有讲述),所以我们只需设置好对应的GPIO即可。

查看硬件连接:

来点亮PF6.

新建led.c与led.h,添加到User Code下面。

led.h

1.#ifndef _LED_H_

2.#define _LED_H_

3.

4.void Delay(uint32_t times);

5.void LedInit(void);

6.

7.#endif

led.c

1.#include "stm32f10x.h"

2.

3./**************************************************************

**********

4.

5.*函数名:LedInit(void)

6.

7.*描述:

8.

9.*输入:无

10.

11.*输出:无

12.

13.*返回:无

14.

15.***************************************************************

*********/

16.

17.void LedInit(void)

18.{

19. GPIO_InitTypeDef GPIO_InitStructure;

20.

21./*初始化 GPIOF的 Pin_6为推挽输出*/

22. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;

23. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

24. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

25. GPIO_Init(GPIOF,&GPIO_InitStructure);

26.

27.}

28.

29./**************************************************************

**********

30.

31.*函数名:Delay(uint32_t times)

32.

33.*描述:延时函数

34.

35.*输入:uint32_t times

36.

37.*输出:无

38.

39.*返回:无

40.

41.***************************************************************

*********/

42.void Delay(uint32_t times)

43.{

44.while(times--)

45.{

46. uint32_t i;

47.for(i=0; i<0xffff; i++)

48.;

49.}

50.}

在main.c中加入led初始化与点亮关闭即可。

1./*!< At this stage the microcontroller clock setting is already

configured,

2. this is done through SystemInit()function which is called

from startup

3. file (startup_stm32f10x_xx.s) before to branch to

application main.

4.To reconfigure the default setting of SystemInit()function,

refer to

5. system_stm32f10x.c file

6.*/

7.

8./* Add your application code here

9.*/

10.

11./*初始化 GPIOF时钟*/

12. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);

13.

14. LedInit();

15.

16./* Infinite loop*/

17.while(1)

18.{

19./*关闭 LED1*/

20. GPIO_SetBits(GPIOF,GPIO_Pin_6);

21./*延时*/

22. Delay(50);

23./*点亮 LED1*/

24. GPIO_ResetBits(GPIOF,GPIO_Pin_6);

25./*延时*/

26. Delay(50);

27.}

认真学习下这段代码,其实也非常简单,参考自《在Keil MDK+环境下使用

STM32 V3.4库》。我想请大家注意的是前面的一段英文注释,这段英文注释什么意思呢。“在运行 main 函数之前,系统时钟已经完成初始化工作,在main 函数之前,通过调用启动代码运行了 SystemInit函数,而这个函数位于

system_stm32f10x.c”。根据文中的提示我们回到 system_stm32f10x.c 看看SystemInit如何初始化系统的。在 system_stm32f10x.c 的开头便定义了系统的时钟频率,从下面的这段代码可以看出系统的频率被定

义为 72MHZ,这也是绝大多数 STM32运行时的频率。

1.#if defined (STM32F10X_LD_VL)||(defined STM32F10X_MD_VL)||

(defined STM32F10X_HD_VL)

2./* #define SYSCLK_FREQ_HSE HSE_VALUE */

3. #define SYSCLK_FREQ_24MHz 24000000

4.#else

5./* #define SYSCLK_FREQ_HSE HSE_VALUE */

6./* #define SYSCLK_FREQ_24MHz 24000000 */

7./* #define SYSCLK_FREQ_36MHz 36000000 */

8./* #define SYSCLK_FREQ_48MHz 48000000 */

9./* #define SYSCLK_FREQ_56MHz 56000000 */

10.#define SYSCLK_FREQ_72MHz 72000000

11.#endif

紧接着根据这个宏定义程序试图把系统时钟初始化为 72MHz,代码有点冗长,这里就不一一列出。在

SystemInit 函数中,调用了 SetSysClock 函数,如果设定时钟的频率为 72MHZ 则 SetSysCloc 调用

SetSysClockTo72函数,该函数和 V2 版本固件库中的各范例中的

RCC_Configuration很相似,主要完

成把外部时钟 9 倍频后分配给系统时钟,APB1 时钟和 APB2又由系统时钟分频获得。关键代码如下:

1./* HCLK = SYSCLK */

2. RCC->CFGR |=(uint32_t)RCC_CFGR_HPRE_DIV1;

3.

4./* PCLK2 = HCLK */

5. RCC->CFGR |=(uint32_t)RCC_CFGR_PPRE2_DIV1;

6.

7./* PCLK1 = HCLK */

8. RCC->CFGR |=(uint32_t)RCC_CFGR_PPRE1_DIV2;

从上面的分析可以看出,SystemInit 并不需要用户调用,启动代码会自动执行,这样相当于少了一

个 RCC_Configuration 函数的绝大多数内容。请大家注意是绝大多数内容而不是全部,但是请大家格外

注意使用到的外设还是要第一时间使得该外设的时钟,像这样的一句千万不要忘了

/*初始化 GPIOF时钟*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);

---------------------------------------------------------------------------------------------

如果没有设置好可能编译会出错:

1.设置宏。参考另一篇文章:

https://www.sodocs.net/doc/2a13728541.html,/space.php?uid=20788517&do=blog&id=296932

2.设置头文件目录:但凡有.h目录的都加进来,还有一点说明,在工程中是不

需要加载头文件的,编译器会根据设置自动到相应目录下查找,链接。

有图有真相:

源码: ProLed.rar

另:由于使用了官网的库,所以很多时候需要在工程中查找文件或者是关键字,这个时候,可以用Source Insight工具来辅助阅读代码,它的Lookup reference 很好使。可以在project目录下再建一个目录Source Insight,比较麻烦,但是

实在!

我的更多文章

?如果你不逼自己一把,你根本不知道自己有多优秀 (2011-07-03 15:58:34)

?移植linux-2.6.38.8 (2011-07-02 18:27:27)

?移植u-boot-2010.06到mini2440 (2011-07-02 12:14:13)

?常用文件重定向命令 (2011-05-30 19:28:02)

?努力赚钱,是为了不让自己的爱情受到别人金钱的考验 (2011-05-28 18:10:56)

点亮LED灯

实验一点亮你的LED灯 一、实验目的 1.学会使用51单片机开发的两大软件:编程软件Keil μVision4(简称Keil C51)和 下载软件STC-ISP。 2.理解单片机最小系统、单片机外围电路、Flash、RAM和SFR概念。 3.了解普通发光二级管的参数,掌握限流电阻的计算方法。 二、实验内容 通过对单片机编程来实现LED小灯的亮和灭。 三、实验参考原理 3.1 单片机内部资源 1)Flash 程序存储空间 2)RAM 数据存储空间 3)SFR 特殊功能寄存器 3.2 单片机最小系统 单片机最小系统的三要素是电源、晶振、和复位电路。 1)电源 目前主流单片机分为5V和3.3V这两个标准,本实验中的STC89C52为5V供电系统,开发板是使用USB口输出的5v直流直接供电的。从上图可以看到,供电 电路在40引脚和20引脚,40引脚接的是+5V,通常也成为VCC或VDD,代表的 是电源正极,20引脚接的GND,代表的是电源负极。 2)晶振 晶振,又叫晶体振荡器,它起到的作用是为单片机提供基准时钟信号,单片机

内部所有的工作都是以这个时钟信号为步调基准来进行工作的。SRC89C52单片机的18号引脚和19号引脚是晶振引脚,接了一个11.0592MHZ的晶振(每秒振荡11059200次),外加两个20pf的电容,电容的作用是帮助晶振起振,并维持震荡信号的稳定。 3)复位电路 复位电路接到了单片机的9号引脚RST复位引脚上。单片机复位一般分为3种情况:上电复位、手动复位和程序自动复位。 总之,一个单片机具备这三个条件就可以运行下载的程序,开发板上其它的比如LED小灯、数码管、液晶等设备都是属于单片机的外设设备,最终用户想要的功能,就是通过对单片机编程来控制各种各样的外设实现的。 3.3 LED小灯 LED,即发光二极管,俗称LED小灯。种类很多,KST使用的是普通的贴片发光二极管。这种发光二极管的正向导通电压是1.8~2.2V之间,工作电流一般在1~20mA之间。 上图是开发板上的USB接口电路,通过USB线,计算机给开发板供电和下载程序以及实现计算机和开发板之间的通信。从图可以看出USB 有6个接口,其中2,3引脚是数据通信引脚,1,4是电源引脚,1是VCC正电源,4是GND即地线。5,6是外壳,直接接到了GND上。 现在主要来讲1,4引脚,1引脚通过F1(自恢复保险丝,作用是当后级电路发生短路时,八年四自动切断电路,保护开发板及计算机的USB口,当电路正常后,保险丝会恢复畅通,正常工作)接到右侧,在正常情况下保险丝可看为导线,因此左右两边都是USB电源+5V。 右侧有两条支路,第一条是在+5V和GND接了一个100μF的电容,电容是隔离直流的,所以这条支路是没有电流的;第二条支路,发光二极管,和普通二级管一样,这个二极管也有阴极和阳极,也称负极和正极,正向导通,方向接对了才会有电流通过,让LED发光,LED1自身的压降大概是2V,那么下方的R34这个电阻上承受的电压就是3V,如果要求电流范围为1~20mA,根据欧姆定律,就可以算出R34的取值范围是150~3kΩ。这个电阻大小的变化,直接限制这条电路上电流的大小,因为这个电阻通常称为“限流电阻”。图中的R34为1KΩ,这条电路的电流大小就可以轻松算出来,3V/1000Ω=3 mA,这个发光二级管的作用只是电源指示灯,使用USB线将开发板和计算机连起来,这个灯就亮了。

嵌入式点亮一个LED灯的程序

飞凌OK6410开发板(裸板)第一个点亮LED灯程序,主要的C程序,完整程序请下载附件。 #define rGPMCON (*(volatile unsigned *)(0x7F008820)) #define rGPMDAT (*(volatile unsigned *)(0x7F008824)) #define rGPMPUD (*(volatile unsigned *)(0x7F008828)) void msDelay(int time) { volatile unsigned int i,j; for(i = 0; i < 2000000; i++) for(j=0; j

1.设计要求 EM-STM3210E开发板上有一个LED灯D1,编写程序点亮该灯。 2.硬件电路连接 在开发板上,D1与STM32F103ZE芯片上的引脚PF6相连,如下图所示。 3.软件程序设计

根据任务要求,程序内容主要包括: 1、配置Reset and clock control (RCC)以使能GPIOF端口模块的时钟 2、配置GPIOF端口的PF6引脚(50MHz,推挽输出) 3、调用STM32标准固件库函数GPIO_WriteBit以令PF6引脚输出高电平,从而点亮LED灯D1。 整个工程用户只需要实现源代码文件:main.c,其他工程文件由MDK和STM32标准固件库提供。 main.c文件的内容如下: [cpp] /** ********************************************************** ******************** * @file main.c * @author Max Liao * @version * @date 02-Novenber-2012 * @brief Main program body ********************************************************** ******************** */ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/

教你用STM32一步一步点亮led灯

STM32之一步一步点亮led (2011-05-09 19:40) 标签: stm32led MDK 入门分类:stm32 入手stm32以来,一直想快速上手,所以在各大论坛闲逛,各个达人的blog 上学习,正所谓欲速则不达,心急是吃不了热豆腐的!有木有 最终决定使用st官网的库开发,据大侠们写道使用库可以快速上手,貌似的确如此,一个个教程写的那么好,直接拿过来用就是了。可是那么多个库,聪明的你请告诉到底选择哪一个啊My God!实话实说,我被这些库折腾了个够!好吧,我最后还是承认最后用的是的库,是很方便! 切入正题,点亮LED。 硬件:红牛开发板,STM32F103ZET6(144封装). 软件:RealView MDK stm32固件库:附上自己整理后的库: 根据官网库自己整理了下,新建了工程模板如下图:(主要参考文章《在 Keil MDK+环境下使用STM32 库.pdf》)在KeilMDK+环境下使用 库.pdf

入图所示:新建一个目录01_ProLed,建议放在英文路径下,避免不必要的麻烦。将上面的库解压到此目录,再新建一个project目录,存放工程。 说明: CMSIS:最底层接口。StartUp:系统启动文件。StdPeriph_Lib:stm32外围设备驱动文件。Project:工程文件。User:用户文件。新建工程步骤:此处略去300字。

简单说明: 该文件是内核访问层的源文件和头文件,查看其中的代码多半是使用汇编语言编写的。在线不甚了解。--摘自《在Keil MDK+环境下使用STM32 库》

该文件是外设访问层的头文件,该文件是最重要的头文件之一。就像51里面的一样。例如定义了 CPU是哪种容量的 CPU,中断向量等等。除了这些该头文件还定义了和外设寄存器相关的结构体,例如: 1.typedef struct 2.{ 3.__IO uint32_t CR; 4.__IO uint32_t CFGR; 5.__IO uint32_t CIR; 6.__IO uint32_t APB2RSTR; 7.__IO uint32_t APB1RSTR; 8.__IO uint32_t AHBENR; 9.__IO uint32_t APB2ENR; 10.__IO uint32_t APB1ENR; 11.__IO uint32_t BDCR; 12.__IO uint32_t CSR; 13. 14.#ifdef STM32F10X_CL 15.__IO uint32_t AHBRSTR; 16.__IO uint32_t CFGR2; 17.#endif /* STM32F10X_CL */ 18. 19.#if defined (STM32F10X_LD_VL)|| defined (STM32F10X_MD_VL)|| defined (STM32F10X_HD_VL) 20.uint32_t RESERVED0; 21.__IO uint32_t CFGR2; 22.#endif /*STM32F10X_LD_VL ||STM32F10X_MD_VL ||STM32F10X_HD_VL */ 23.} RCC_TypeDef;

单片机C语言LED灯点亮程序完全版

1例子1第二个灯亮 #include void main() { P1=0xfd; } #include Sbit D1=P1^0; V oid main() { D1=0 } 注意:稍微改程序时需重新hex化 例子2第一个灯亮 #include //52单片机头文件 sbit led1=P1^0; //单片机管脚位声明 void main() //主函数 { led1=0; //将单片机P1.0口清零 while(1); //程序停止在这里,在后面会讲到为什么这样写。} 例子3第一个灯亮 #include //52单片机头文件 void main() //主函数 { P1=0xfe; //将单片机P1口的8个口由高到低分别赋值为11111110 while(1); //程序停止在这里,在后面会讲到为什么这样写。} 2例子1第三个灯闪烁fir循环 #include sbit D2=P1^2; unsigned int a; void main() { D2=0; for(a=0;a<=10000;a++){}; D2=1; for(a=0;a<=10000;a++){}; } 例子2第三个闪烁while循环 #include sbit D2=P1^2; unsigned int a; void main()

{ a=5000; D2=0; while(a--); a=5000; D2=1; while(a--); } 2.#include //52单片机头文件 sbit led1=P1^0; //单片机管脚位声明 void main() //主函数 { unsigned int i; //定义一个int型变量 while(1) { i=50000; //变量赋初值为50000 led1=0; //点亮灯 while(i--); //延时 i=50000; led1=1; //熄灭灯 while(i--); } } 3例子1 3 5 7灯同时亮 #include //52单片机头文件 sbit led1=P1^0; //单片机管脚位声明 sbit led3=P1^2; //单片机管脚位声明 sbit led5=P1^4; //单片机管脚位声明 sbit led7=P1^6; //单片机管脚位声明 void main() //主函数 { led1=0; //将单片机P1.0口清零 led3=0; //将单片机P1.2口清零 led5=0; //将单片机P1.4口清零 led7=0; //将单片机P1.6口清零 while(1); //程序停止在这里,在后面会讲到为什么这样写。} 例子2 1 3 5 7同时亮 #include //52单片机头文件 void main() //主函数 { P1=0xaa; //将单片机P1口的8个口由高到低分别赋值为10101010

实验一:点亮第一个LED灯

电气与自动化工程学院 单片机实训课程研究型学习 技术报告 项目名称:点亮第一个LED灯 学生姓名:张倩如学号:160512239 项目序号: 1 专业:自动化 提交时间:指导老师:卢振利

一、项目概述 (1) 二、硬件设计 (2) 三、程序设计 (3) 四、程序代码 (3) 五、运行结果 (4) 六、讨论 (5) 七、参考文献 (5) 一、项目概述 通过一简单的实验掌握: 1. 掌握PL2303驱动的安装,掌握Keil3开发环境的安装、设置和基本使用; 2. 掌握项目、文件的建立方法、程序的下载以及寄存器、存储器内容的查看方法; 3. 掌握程序的执行及断点设置方法。 实验内容:通过了解P1口的开关控制电路和P0的LED电路,编写基本输入输出实验程序。实验内容为设置P1为输入口,P0口为输出口,将P1口的开关状态发送到P0口,让灯亮灭,将P1的电平状态通过P0口的LED的亮灭表示出来。 本实验由自己独立一人完成所有上述项目。

二、硬件设计 图1-1 LED接口电路 电路图说明:该图为LED接口电路,P0口连接八个LED灯,每个LED灯要接300欧的上拉电阻作为保护电路。八个灯为共阳极,低电平点亮LED灯。

图1-2 拨码开关电路图 该图为拨码开关电路图,每个开关拨上连接到地,P1口为低电平,拨下连接到VCC ,P1口为高电平。 三、程序设计 程序说明:从主程序开始不断执行将P1口赋值给P0口。 四、程序代码 #include void main(void) // 程序主函数 { 开 始 P0=P1

while(1) // 循环用于实时扫描IO状态 { P0=P1; // 将P1口的数据发送给P0口 } } 五、运行结果

3-1-点亮一个LED灯

章节目录 第一章百度AI智能识别技术 第二章人脸识别技术 第三章Arduino基础学习 第四章Arduino进阶学习 第五章IOT物联网 第六章WIFI与Arduino的结合 第七章阿里云IOT服务 第八章百度天工物联网 第九章APPInventor制作手机APP 第十章自己做的七七八八 第十一章制作APPInventor自定义插件 第十二章手机实现局域网连接 第十三章项目应用——小学生百度天工 第十四章项目应用——ESP32-cam摄像头模块第十五章项目应用——ESP32-cam摄像头模块二第十六章项目应用——WIFI模块手动配网 第十七章项目应用——红纳里斯的跨阵M1 第十八章项目应用——OLED液晶屏插件

3-1-点亮一个LED灯 从今天开始,我们要动手学习Arduino开发板了。我 们之前学的Scratch程序都是在电脑中运行的,离开 电脑我们就什么也做不了;现在有了Arduino开发板, 我们可以根据我们的愿望,编写程序,设计出很好玩 的东西,把程序写入Arduino开发板后,离开了电脑, 我们也能照样能让程序运行起来。 我从网上随意地下载几个被人用Arduino设计 制作的作品,这些酷炫的东西,都可以自己动手制作 出来的。 当然,在学习之前,你还是需要购买一块 Arduino开发板的,现在的国产仿制的Arduino开发 板已经非常便宜了,低的在20几块就可以买到。当 然我还是建议大家开始学习的时候,最好买套装,买一些品牌比较大的,这样我们会有技术支持,有不懂的地方,商家也会帮我们解决。不用买那些豪华版的套装,大概200元左右的就可以。 准备好了吗,让我们一起开始Arduino开发板的漫长而富有挑战的学习之旅吧。 一. 认识Arduino开发板 Arduino开发板是一款便捷灵活、方便上手的开源电子原型平台。有一个欧洲开发团队于2005年开发,之后很快就风靡全球,成为最流行、应用最广的开源学习平台。

单片机课程设计 8个LED灯来回点亮

目录 第一章绪论--------------------------------------------------------3 第二章设计目的及要求-----------------------------------------5 1.1 设计目的--------------------------------------------------------5 1.2 设计要求--------------------------------------------------------5 第三章设计电路原理----------- -------------------------------7 3.1 控制部分的设计与选择-------------------------------------7 3.2 LED显示方案-----------------------------------------------8 第四章硬件系统------------------------------------------------9 4.1 原件清单-------------------------------------------------------9 4.2 单片机AT89C51---------------------------------------------9 4.3 单片机时钟电路--------------------------------------------10

4.4 单片机复位电路---------------------------------------------11 4.5 工作电路------------------------------------------------------12 第五章软件设计------------------------------------------------13 5.1 程序流程图--------------------------------------------------13 5.2 编辑源程序--------------------------------------------------14 第六章系统调试与仿真结果--------------------------------16 6.1系统调试-----------------------------------------------------16 6.2仿真结果----------------------------------------------------16 总结------------------------------------------------------------- 19 参考文献--------------------------------------------------------20

点亮一个发光二极管方式

一、点亮一个发光二极管方式 #include //调用51单片机的头文件void main(void) //主函数,单片机开机后就是从这个函数开始运行 { P0_0=1; //按位方式写PO.0=1 P0_1=0; //按位方式写PO.1=0 P0_2=0; //按位方式写PO.2=0 P0_3=0; //按位方式写PO.3=0 P0_4=0; //按位方式写PO.4=0 P0_5=0; //按位方式写PO.5=0 P0_6=0; //按位方式写PO.6=0 P0_7=0; //按位方式写PO.7=0 while(1) //死循环,单片机初始化后,将一直运行这个死循环 { } }

二、发光二极管流水显示 #include //调用51单片机的头文件 //--------------------------------------- void main(void) //主函数,单片机开机后就是从这个函数开始运行 { unsigned int a; //定义一个int型变量,做延时用P0=0; while(1) //死循环,单片机初始化后,将一直运行这个死循环 { for(a=0;a<20000;a++); //延时若干时间,具体时长暂不理会 if(P0==0) P0=0x80; else P0=P0>>1; //将PO右移 } }

三、8独立按键一位数码管显示 #include //调用51单片机的头文件 //--------------------------------------- //定义一个数据表格 unsigned char code TAB[10]= { //定义表格一定要使用code,这样会做到程序存储区中 0x3F, //表格第1步数据0b00111111 0x06, //表格第2步数据0b00000110 0x5B, //表格第3步数据0b01011011 0x4F, //表格第4步数据0b01001111 0x66, //表格第5步数据0b01100110 0x6D, //表格第6步数据0b01101101 0x7D, //表格第7步数据0b01111101 0x07, //表格第8步数据0b00000111 0x7F, //表格第9步数据0b01111111 0x6F, //表格第10步数据0b01101111 }; //--------------------------------------- //8独立按键相关I/O设置 sbit P1key=P1^0; //按键P1接在P0.0口上

单片机C语言LED灯点亮程序完全版

1例子1第二个灯亮 #include<> voidmain() { P1=0xfd; } #include<> SbitD1=P1^0; Voidmain() { D1=0 } 注意:稍微改程序时需重新hex化 例子2第一个灯亮 #include<>include<>//52单片机头文件sbitled1=P1^0;//单片机管脚位声明voidmain() //主函数 { unsignedinti;//定义一个int型变量while(1) {

i=50000;//变量赋初值为50000 led1=0; //点亮灯 while(i--);//延时 i=50000; led1=1;//熄灭灯 while(i--); } } 3例子1357灯同时亮 #include<>//52单片机头文件 sbitled1=P1^0;//单片机管脚位声明 sbitled3=P1^2;//单片机管脚位声明 sbitled5=P1^4;//单片机管脚位声明 sbitled7=P1^6;//单片机管脚位声明 voidmain() //主函数 { led1=0; //将单片机口清零 led3=0; //将单片机口清零 led5=0; //将单片机口清零 led7=0; //将单片机口清零 while(1);//程序停止在这里,在后面会讲到为什么这样写。}

例子21357同时亮 #include<>//52单片机头文件 voidmain() //主函数 { P1=0xaa; while(1);//程序停止在这里,在后面会讲到为什么这样写。} 例子3流水灯一个一个接着亮不循环 #include<>//52单片机头文件 voidmain() //主函数 { unsignedinti;//定义一个int型变量 while(1) { i=50000; //变量赋初值为50000 P1=0xfe; //点亮第一个灯 while(i--); //延时 i=50000; //变量赋初值为50000 P1=0xfd; //点亮第二个灯 while(i--); //延时 i=50000; //变量赋初值为50000 P1=0xfb; //点亮第三个灯

单片机点亮LED灯程序集合

#include sbit led0=P0^0; void main() { led0=0; } #include sbit D1=P0^0; sbit D2=P2^4; void main() { D1=0; D2=0; } #include #include //库函数#define uchar unsigned char #define uint unsigned int sbit d0=P2^4; void delay(void) { uchar a,b; for(a=0;a<200;a++) for(b=0;b<200;b++); } void main() { uchar k; d0=0; k=0xfe; while(1) { P0=k; delay(); k=_crol_(k,1);//k移1位} } #include #define uint unsigned int #define uchar unsigned char sbit D1=P0^0;

sbit D2=P0^1; sbit D3=P0^2; sbit D4=P0^3; sbit D5=P0^4; sbit D6=P0^5; sbit D7=P0^6; sbit D8=P0^7; sbit D0=P2^4; sbit cs0=P2^0; sbit cs1=P2^1; sbit cs2=P2^2; sbit cs3=P2^3; void delay(uint z); uint a; void main() { D0=0; while(1) { a=10000; D1=0;D2=D3=D4=D5=D6=D7=D8=1; //cs0=cs1=cs2=cs3=0; while(a--); delay(1000); D2=0;D1=D3=D4=D5=D6=D7=D8=1; //cs0=cs1=cs2=cs3=0; a=10000; while(a--); delay(1000); D3=0;D1=D2=D4=D5=D6=D7=D8=1; //cs0=cs1=cs2=cs3=0; a=10000; while(a--); delay(1000); D4=0;D1=D2=D3=D5=D6=D7=D8=1; //cs0=cs1=cs2=cs3=0; a=10000; while(a--); delay(1000); D5=0;D2=D3=D4=D1=D6=D7=D8=1; //cs0=cs1=cs2=cs3=0; a=10000; while(a--); delay(1000);

相关主题