第一个单片机程序:

#include //包含特殊功能寄存器定义的头文件

sbitLED = P0^0; //位地址声明,注意:sbit 必须小写、P 大写!

void main(){ //任何一个 C 程序都必须有且仅有一个 main 函数

LED = 0; //分号表示一条语句结束

}

先从程序语法上来分析一下:

main 是主函数的函数名字,每一个 C 程序都必须有且仅有一个 main 函数。

void 是函数的返回值类型,本程序没有返回值,用 void 表示。

{}在这里是函数开始和结束的标志,不可省略。

每条 C 语言语句以;结束的。

逻辑上来看,程序这样写就可以了,但是在实际单片机应用中,存在一个问题。比如我们的程序空间可以容纳 100 行代码,但是我们实际上的程序只用了 50 行代码,当运行完了50 行,再继续运行时,第 51 行的程序不是我们想运行的程序,而是不确定的未知内容,一旦执行下去程序就会出错从而可能导致单片机自动复位,

所以我们通常在程序中加入一个死循环,让程序停留在我们希望的这个状态下,不要乱运行

,有以下两种写法可以参考:

参考程序一:

#include

sbitLED = P0^0;

void main(){

while(1){

LED = 0;

}

}

参考程序二:

#include

sbitLED = P0^0;

void main(){

LED = 0;

while(1);

}

程序一的功能是程序在反复不断的无限次执行 LED = 0;这条语句,而程序二的功能是执行一次,然后程序直接停留下来等待,相对程序一来说程序二更加简洁一些。针对于图 2-6,我们这个程序能够把小灯点亮,但是这个程序却点不亮我们板子上的小灯,这是为什么呢?

这里大家就要培养一个意识了,我们做单片机编程,实际上算是硬件底层驱动程序开发,这种程序的开发,是离不开电路图的,必须根据我们的电路图来进行程序的编写。如果我们设计电路板的电路图和图 2-6 一样的话,程序可以成功点亮小灯,但是如果不一样,就可能点不亮。

我们的开发板上,还有一个 74HC138 作为 8 个 LED 小灯的总开关,而 P0.0 仅仅是个分开关。如同我们家里总是有一个供电总闸,然后每个电灯又有一个专门的开关,我们刚才的程序仅仅打开了那个电灯的开关,但是没有打开那个总电闸,所以程序需要加上这部分代码。

因为这节课要介绍的内容比较多,所以我们把 74HC138 的原理以及为什么要加额外的代码在下节课统一介绍,这节课我们直接加上这部分代码,大家知道有这么一回事就可以了。

#include //包含特殊功能寄存器定义的头文件

sbitLED = P0^0; //位地址声明,注意:sbit 必须小写、P 大写!

sbitADDR0 = P1^0;

sbitADDR1 = P1^1;

sbitADDR2 = P1^2;

sbitADDR3 = P1^3;

sbitENLED = P1^4;

void main(){

ENLED = 0;

ADDR3 = 1;

ADDR2 = 1;

ADDR1 = 1;

ADDR0 = 0;

LED = 0; //点亮小灯

while (1); //程序停止在这里

}

写了这么多啰嗦的语句,刚开始大家可能觉得很麻烦,为什么有的书上程序很简单就可以点亮小灯,我们这里却这么麻烦呢。大家要了解一点,就是我们做这个学习板,虽然仅仅提供给大家简单学习使用,但是我们也得按照实际产品的开发模式去设计,所以综合考虑因素很多,大家学到后边就会明白它的设计价值了,这里大家只要跟着我们去做就可以了。

程序编好了,我们要对我们的程序进行编译,生成我们需要的可以下载到单片机里的文件,在编译之前,我们先要勾选一个选项,Project-->Options for Target „Target1‟...,或者直接点图 2-17 中红框内的快捷图标:

图 2-17  工程选项图标

在弹出的对话框中,点击 Output 选项页,勾选其中的“Create HEX File”复选框,然后点 OK,如图 2-18 所示。

图 2-18  创建 HEX 文件

设置好以后呢,点击“Project-->rebuild all target files”,或者鼠标点击图 2-19 中红框内的快捷图标,就可以对程序进行编译了。

图2-19  编译程序

编译完成后,在我们的 Keil 下方的 Output 窗口会出现相应的提示,大家注意看图 2-20,这个窗口告诉我们编译完成后的情况,data=9.0,指的是我们的程序使用了单片机内部的 256字节 RAM 资源中的 9 个字节,code=29 的意思是使用了 8K 代码 Flash 资源中的 29 个字节。

当提示“0 Error(s), 0 warning(s)”表示我们的程序没有错误和警告,就会出现“creating hex file from “LED”...,意思是从当前工程生成了一个 HEX 文件,我们要下载到单片机上的就是这个HEX 文件。如果出现有错误和警告提示的话,就是 Error 和 warning 不是 0,那么我们就要对程序进行检查,找出问题,解决好了再进行编译产生 HEX 才可以。

图2-20  编译输出信息

到此为止,程序就编译好了,下边我们就要把编译好的程序文件下载到单片机里了。

转自http://c.biancheng.net/cpp/html/1860.html

c语言中语句开始的标志是,第一个单片机程序(C语言编写)相关推荐

  1. 第一个单片机程序(C语言编写)

    第一个单片机程序: 纯文本复制 #include <reg52.h> //包含特殊功能寄存器定义的头文件 sbit LED = P0^0; //位地址声明,注意:sbit 必须小写.P 大 ...

  2. java任何表达式都可以当作语句_在Java语言中语句用分号终止,并不是所有的表达式都可以构成语句...

    在Java语言中,语句以分号":"作为结束标志.块语句由其他语句组成,其本身不需要用分号结尾.另外,内嵌有块语句并以块语句结尾的语句,也不需要用分号结尾. Java语句可分为空语句 ...

  3. C语言中数组首地址和数组第一个元素的地址有什么区别

    C语言中数组首地址和数组第一个元素的地址关系如下: 1.它们的地址值是相等的. 2.第1个元素的地址如果是p,则p+1就是第2个元素的地址. 3.数组的首地址如果是p,则p+1就跳过这个数组而指向这个 ...

  4. 关于linuxC语言中创建进程,利用execlp函数执行.c程序问题

    关于linuxC语言中创建进程,利用execlp函数执行.c程序问题 对于一个小白来说,这个系统调用真的太难了,完全摸不着头脑啊,一搜execlp函数,全是执行的命令,什么传参硬是没懂. 不过说到底, ...

  5. python第一条入门程序_Python语言函数代码的执行流程

    https://www.xin3721.com/eschool/pythonxin3721/ Python语言函数代码的执行流程,为了保证函数的定义先于其首次调用时执行,我们需要知道中语句的执行顺序. ...

  6. c语言中语句作用,学习C语言的用途~

    原标题:学习C语言的用途~ C是基础的语言 C语言被广泛用于操作系统和编译器的开发 功能非常强 虽然现在不是最流行但是 最基础的东西是也比较好学的语言 如:金山的创始人江明 从30多岁开始学语言 学的 ...

  7. java语言中声明布尔型_【Java初探02】——Java语言基础

    本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...

  8. c语言中描述x和y都大于或等于z的表达式,C语言期末考试题含答案.doc

    C语言期末考试题含答案 <C语言程序设计>期末试卷 一.单项选择题(10x2'=20') 1.以下叙述正确的是( ) A)C语言的源程序不必通过编译就可以直接运行. B)C语言中的每条可执 ...

  9. c语言中用于判断ch是否是字符的表达式,最新C语言复习题集资料

    精品文档 C语言复习题集 一. 判断题 1-1.C语言程序是从源文件的第一条语句开始执行的. 正确答案:F 1-2.C语言中的变量名不区分大小写. 正确答案:F 1-3.若变量定义为double x; ...

最新文章

  1. VideoCapture 读取视频文件,显示视频(帧)信息
  2. ArrayList 为什么要实现 RandomAccess 接口?
  3. android基础ui控件,Android基础——基础UI控件
  4. sharepoint指定的人可以看到列表项
  5. IOS模拟登录之沙盒原理
  6. 说实话,用完Gradle之后,有点嫌弃Maven了。贼好用!
  7. 利用阿里云OSS对文件进行存储,上传等操作
  8. mysql备份还原数据库操作系统_mysql 命令行备份还原数据库操作
  9. Unix 激荡 50 年:驱动 Android、iOS 的操作系统是如何从失败开始的?
  10. kendotabstrip 动态加tab_加你的好友这么多,为什么偏偏记不住我这名微商?
  11. 简单的linux下docker的下载与安装
  12. .net reflector 反编译失败 索引超出了数组界限问题处理方法
  13. html返回到处乱跑,电脑鼠标乱动不受控制(鼠标到处乱跑不听使唤)
  14. keras深度训练4:GPU设置
  15. Project Tungsten:将Apache Spark更接近裸机
  16. Java标准教程:Java 2D绘图--第4章 使用Text API
  17. 【JDBC】操作数据库(CRUD)
  18. 【小白到大牛之路】-开发环境搭建
  19. html大一期末考试,2017年大学英语大一期末考试试题及答案
  20. (新)B站视频播放源地址获取及B站视频下载

热门文章

  1. 苹果Arcade订阅常见问题
  2. C++源代码单词扫描程序(词法分析)
  3. 内网穿透工具-Ngrok
  4. (ORACLE)PL/SQL 数据库概念
  5. mysql where id_MySQL where 子句
  6. VS无法下载,提示无法连接到网络
  7. Flak扩展库的使用
  8. Android-传感器开发-方向判断
  9. usb接上计算机没反应怎么办,u盘插上去电脑没反应怎么办 u盘插上后无任何反应的解决教程...
  10. win7下用VS2008写视频聊天程序,求VFW教程?qzvgK