手把手教你学单片机的C语言程序设计(三)——C语言程序的基本结构.pdf_第1页
手把手教你学单片机的C语言程序设计(三)——C语言程序的基本结构.pdf_第2页
手把手教你学单片机的C语言程序设计(三)——C语言程序的基本结构.pdf_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

习单 片 机 手把手教你 学单片机 的 C语言程序设计 ( 三 ) C语言程序的基本结构 周 兴 华 在 s 3 型 试 验 板 上 实 现 : 使 L E D1 L E D 8这 8个 二极管 实现 1 、 3 、 5 、 7 及 2 4 、 6 、 8的交替 点亮 ,周 期约 1 S 。在 我的文档 中建立一个文件 目录 ( c s l 】 , 然后建立 c s l u v 2的工程项 目 最后建立源程序文件【 c s 1 C ) 。 输人下面的程序 : # i n c l u d e 序号 v o i d d el a y ( v oid) u n s i gn e d i n t l + J f o r ( i = 0 ; i 功能子函数 1 d e la y ( ) 函数体 功能予函数 2 lj _ lig h t ( ) 函数体- ” 功能子函数 n O U lig h t ( ) 一 i 一 维普资讯 函数体 主函数 ma in ( ) ( 主 函数体 结论 : C语言程序是由函数构成 的,一个 C源程序至少包括一个函数 ( 主函数) , 一个 C源程序有且只有一个 名为 ma i n ( ) 的函数 , 也可能包含其它函 数 , 因此 , 函数是 C程序的基本单位 。 函数后面一定有一对大括号 ” , 在大括号里书写程序。 C语言程序总是 从 ma i n主函数开始执行的。 而不管物 理位置上这个 ma i n ( ) 放在什么地方。 主 函数通过直接书写语句和调用其它功 能子函数来实现有关功能, 这些功能子 函数可以是由 C语言本身提供给我们 的库函数 , 也可以是用户自己编写的函 数。 那么库函数和用户自定义子函数有 什么区别呢?简单地说 , 库函数就是针 对一些经常使用的算法,经前人开发、 归纳、 整理形成的通用功能子函数集供 大家使用。 而自己编写的功能子函数则 称用户自定义功能子函数, 显然 , 用户 自定义功能子函数是用户根据 自己需 要而编写的。可以看出, 使用 C语言开 发产品, 可以大量使用库函数而减少用 户自己编写程序的工作量 。 这样 , 产 品 开发的速度和质量是汇编语言绝对不 能相比的。 K e i l C 5 1内部有数百个库函 数可供我们使用。调用 K e i l C 5 1的库 函数时只需要包含具有该函数说明的 相应的头文件即可。 刚才我们谈到过, 一个 C源程序至 少包括一个函数( 主函数) , 一个 C源程 序有且只有一个名为 ma i n ( ) 的函数 , 那 么我们将实验一的程序改动一下,只用 主函数完成。 而不用自定义功能子函数。 在 S 3 型 试 验 板 上 实 现 : 使 L E D1 L E D 8这 8个二极管实现 1 、 3 、 5 、 7及 2 、 4 、 6 、 8的交替点亮,周期约 1 s 。在我的文档中建立一个文件 目录 ( c s 2) , 然后建立 c s 2 u v 2的工程项 目。 最后建立源程序文件( c s 2 c o 学 习单 片机 输入下面的程序: # in c l u d e 序号( 以下同) : 1 一= = = = 一= 一= = 2 = = = v o id ma in ( v o id ) 3 ( u n s i g n e d in t , j : 4 wh i le ( 1 、| f5 ( 6 P 0 = 0 x a a ; 7 一一一一= = = = 8 f o r ( _ _ 0 : i 。 包含头文件即为文件包含处理。 所 谓 “ 文 件 包含 ” 是 指 一 个 文 件 将 另 外一 个 文 件 的 内容 全 部 包 含 进来 , 所 以这里 的预 处理命 令虽 然 只有 一 行 ,但 C 编译 器在 处 理 的时候却要 处 理几十 乃至几 百行 。 包 含 头文件 R E G5 1 H的 目的是 为 了要使 用 P 0这 个符 号 。即通 知 C 编 译 器 。程 序 中 所 写 的 P 0是 指 8 0 C5 1单 片机 的 P 0端 1:3而不是 其 它变量 。 用记 事 本 打 开 C :k K e i Ik C 5 1 l n c R e g 5 1 h ( 打开时的文件类型改为所有 文件) 可以看到这样的一些内容 : , - - REG51 H Hea de r f i le f o r ge ne r ic 80 C51 a n d 8 0C31 mi c r O c On t r O le r C o p y r i g h t ( C )1 9 8 8 - 2 0 0 2 K e i l E l e k t r o n ik GmbH an d Kei l S of t wa r e, I n c Al l r i gh t s r e se r ve d - - - - - - - - - - - - - - - - - - # i f n def RE G51 一H # de f ine RE G51 一H P B Y T E R e g is t e r | s f r P0 =0x 8 0; s f r P1 =0x 9 0; s f r P2=0x AO; s f r P3 =0x BO; s f r PSW=0 x D0; s f FACC =0x E0; s f r B= 0 x F 0; s f r S P=0 x 8 1 : s f r DPL =0 x 82; s f rDPH =0 x 83; s f r PCON =0 x8 7; s f rTCON= 0 x 88 ; s f rTMOD =0x 8 9; s f rTL 0 =0 x 8A; s f rTL 1 =0x 8B; s f rTH0 :0 x 8C: 维普资讯 学 习单 机 s f rT H1 :0 x 8D; s f r I E=0 x A8; s f rl P:0 x B8; s f r SCON :0 x 98 ; s f r SBUF=0x 9 9; P B I T R e g i s t e r | P P S W | s bitCY:0x D7; s bitAC:0x D6; s bi t F 0=0 x D5; sb i t RS1 :0x D4; s b i t RS 0 =0x D3; sb i t OV:0 xD2; sb i t P=0 xD0; 广 T C ON s bit TF1 :0 x8 F ; sbit TR1 =0 x 8E; sb i t TF 0 :0 x 8D; sb i t TR0 =0 x 8 C; s b i tI E1 :0x 8 B; s b i tlT1 =0 x 8 A; s bi t J E O =0 x8 9; s bi t I T O =0 x 8 8; r l E s b i t E A=0x AF; sb i t E S:0 x AC; sb i t ET1 =0x AB; sb i t EX1 :0 x AA; sb i t ET O :0 xA9; sb i t EX0 =0 x A8; l P sb i t PS=0 xB C; sb i t PT1 :0x BB; sb i t PX1 :0 xB A; s b i t P T0 =0x B9; s bit P X0 =0 xB8 ; P P 3 | s bitRD:0 xB7 ; s bit W R=0x B6; s bit T1 =0 xB 5; s bit TO =0 xB4 ; sb i t l NT1=0 xB3; sb i t l NT O=0 xB2; sb i t TXD =0 x B1 : sb i t RXD :0 x B0; 广 S C ON sb i t SM0 :0 x gF ; s bit SM 1 =0 x 9E; s bit SM2 =0 x 9D; s bitREN :0 x 9C; s bit TB8 =0 x9 B: s bitRB8 =0 x 9 A; s bit Tl :0 x 99 ; s bit Rl =0x 98; # en dif 因为之前我们都已学过了 手把手教你学单 片机 讲座 。 对 8 0 C 5 1内部结构比较熟悉 , 因此 从中可看出。 这里都是一些符号的定义 , 即规定 符号名与地址的对应关系。其中有 “ s f r P 0= 0 x 8 0 ; ”一行 。即定义 P 0口与地址 0 x 8 0对应 ( 0 x 8 0是 C语言中十六进制数的写法 , 相当于汇 编语言中的 8 0 H o 美国国家标准化协会( A N S I ) 制订的 C语言 标准( A N S I C) 中规定 , 函数必须要“ 先说明, 后 调用” , 我们在实验一的程序中, 是先定义( 说明) 了几个功能子函数 ,然后在主函数中进行调用 , 这样当然没问题。如果将顺序倒一下 。 将几个功 能子函数放在主函数的后面, 那么编译时就会出 错。 这时我们需要进行“ 先说明, 后调用” 。 下面就 是“ 先说明。 后调用” 的例子。 # i n c lu d e 序号( 以下同 ) : 1 一一:一一一= 一一= = 2 v o id d e la y ( v o i d ) ; 3 v o id j i_ li g h t ( v o i d ) ; 1 1 4 v oid o u l ig h t ( v o id ) ; 5 = = : 一=: = 一= = : = : 一= 6 v o id ma i n ( v o i d ) 7 l| | 8 w h i le ( 1 ) 9 1 0 j i_ l i g h t ( ) ; 1 1 d e l a y ( ) ; 1 2 ou fi g h t ( ) ; 1 3 d e l a y ( ) ; 1 4 1 5 1 6 =:=一=一一一一=1 7 = v o id d e la y ( v o i d ) 1 8 1 9 u n s i g n e d i n t i j :, 2 0 f o r ( I - 0 : i 功能子函数 1 说 明 功能子函数 2说 明 功能子函数 n 说明 功能子函数 1 主 函数 功能子 函数 2 功能子函数 n o u l ig h t ( ) 函数体 配文优惠邮购:K e il C 5 1 Wi n d o ws集成开 发环境 ( 已汉化光盘 ,邮购代号: K1 ) : 4 6元。 T OP 8 5 1多功能编程器 ( 邮购代号: B1 ) : 3 3 0元。 L E D 1 2 8 6 4图形液晶试验板 ( 邮购代号: S 3 ) : 1 6 0元。L E D 1 6 2字符液晶试验板( 邮购代号: S 2 ) : 1 4 0元。1 6 2字符型液晶显示模组( 邮购代 号: L 1 ) : 8 0元。1 2 8 6 4点阵图型液晶显示模组 ( 邮购代号: L 2 ) : 1 6 0元。 5 V高稳定专用稳压 电源( 邮购代号: D 1 ) : 3 5元。每次邮费保价费 1 2 元。开发票另加货款 7 ( ; E 款时注明) 。 邮购时 只需在附言栏 中写明邮购代号及数量并附上联 系电话即可。邮局; E 款邮购: 上海市闵行区莲花 路 2 1 5 1弄 5 7号 2 0 1室 邮编 : 2 0 1 1 0 3联

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论