51单片机C语言学习 7

发布者:mmsg3814最新更新时间:2016-01-21 来源: eefocus关键字:51单片机  C语言学习 手机看文章 扫描二维码
随时随地手机看文章

  上课到这一课相隔了好长一段时间,这些日子里收到不少网友的来信支持和鼓励,要求尽快完成余下的部分。出门在外的人不得不先为吃饭而努力,似乎这也成为我的借口,以后每晚抽空打一些吧这样大家也就可以不用隔太久就能看到一些新东西。或许我的笔记并不是很正确,但我尽量的保证每课的实验都会亲自做一次,包括硬件的部分,已求不会误人子弟。
随着访问量不断的增加,网站已启用了www.cdle.net的国际域名,在这里我感谢各位一直支持磁动力工作室的朋友,更要感激身在远方一直默默支持我的女友。
                    明浩 2003-7-14 晚
  呵,费话少说了。上两课说了常量和变量,先来补充一个用以重新定义数据类型的的语句吧。这个语句就是typedef,这是个很好用的语句,但我自己却不常用它,通常我定义变量的数据类型时都是使用标准的关键字,这样别人可以很方便的研读你的程序。如果你是个DELPHI编程爱好者或是程序员,你对变量的定义也许习惯了DELPHI的关键字,如int类型常会用关键字Integer来定义,在用C51时你还想用回这个的话,你可以这样写:
    typedef int integer;
    integer a,b;

  这两句在编译时,其实是先把integer定义为int,在以后的语句中遇到integer就用int置换,integer就等于int,所以a,b也就被定义为int。typedef不能直接用来定义变量,它只是对已有的数据类型作一个名字上的置换,并不是产生一个新的数据类型。下面两句就是一个错误的例子:
    typedef int integer;
    integer = 100;

使用typedef可以有方便程序的移植和简化较长的数据类型定义。用typedef还可以定义结构类型,这一点在后面详细解说结构类型时再一并说明。typedef的语法是
    typedef 已有的数据类型 新的数据类型名

  运算符就是完成某种特定运算的符号。运算符按其表达式中与运算符的关系可分为单目运算符,双目运算符和三目运算符。单目就是指需要有一个运算对象,双目就要求有两个运算对象,三目则要三个运算对象。表达式则是由运算及运算对象所组成的具有特定含义的式子。C是一种表达式语言,表达式后面加";"号就构成了一个表达式语句。

赋值运算符
对于"="这个符号大家不会陌生的,在C中它的功能是给变量赋值,称之为赋值运算符。它的作用不用多说大家也明白,就是但数据赋给变量。如,x=10;由此可见利用赋值运算符将一个变量与一个表达式连接起来的式子为赋值表达式,在表达式后面加";"便构成了赋值语句。使用"="的赋值语句格式如下:
    变量 = 表达式;
示例如下
    a = 0xFF; //将常数十六进制数FF赋于变量a
    b = c = 33; //同时赋值给变量b,c
    d = e; //将变量e的值赋于变量d
    f = a+b; //将变量a+b的值赋于变量f

  由上面的例子可以知道赋值语句的意义就是先计算出"="右边的表达式的值,然后将得到的值赋给左边的变量。而且右边的表达式可以是一个赋值表达式。
  在一些朋友的来信中会出现"=="与"="这两个符号混淆的错误原码,问为何编译报错,往往就是错在if (a=x)之类的语句中,错将"="用为"=="。"=="符号是用来进行相等关系运算。

算术,增减量运算符
  对于a+b,a/b这样的表达式大家都很熟悉,用在C语言中,+,/,就是算术运算符。C51中的算术运算符有如下几个,其中只有取正值和取负值运算符是单目运算符,其它则都是双目运算符:
   + 加或取正值运算符
   - 减或取负值运算符
   * 乘运算符
   / 除运算符
   % 取余运算符
算术表达式的形式:
   表达式1 算术运算符 表达式2

如:a+b*(10-a), (x+9)/(y-a)

  除法运算符和一般的算术运算规则有所不同,如是两浮点数相除,其结果为浮点数,如10.0/20.0所得值为0.5,而两个整数相除时,所得值就是整数,如7/3,值为2。像别的语言一样C的运算符与有优先级和结合性,同样可用用括号"()"来改变优先级。这些和我们小时候学的数学几乎是一样的,我也不必过多的说明了。
  :( 还有这么多运算符呀!暂时停一停吧,我们先来做一个实验吧。学习运算符和另外一些知识时,我们还是给我们的实验板加个串行接口吧。借助电脑转件直观的看单片机的输出结果,以后我还会用一些简单的实例讲解单片机和PC串口通讯的简单应用和编程。如果你用的是成品实验板或仿真器,那你就可以跳过这一段了。
  在制作电路前我们先来看看要用的MAX232,这里我们不去具体讨论它,只要知道它是TTL和RS232电平相互转换的芯片和基本的引脚接线功能就行了。通常我会用两个小功率晶体管加少量的电路去替换MAX232,可以省一点,效果也不错(如有兴趣可以查看http://www.cdle.net网站中的相关资料)。下图就是MAX232的基本接线图。

51单片机C语言学习 <wbr>7
图7-1 MAX232

  在上两课的电路的基础上按图7-3加上MAX232就可以了。这大热天的拿烙铁焊焊,还真的是热气迫人来呀:P串口座用DB9的母头,这样就可以用买来的PC串口延长线进行和电脑相连接,也可以直接接到电脑com口上。

51单片机C语言学习 <wbr>7
图7-2 DB9接头
51单片机C语言学习 <wbr>7
图7-3 加上了MAX232的实验电路

  做好后我们就先用回第一课的"Hello World!"程序,用它来和你的电脑说声Hello!把程序烧到芯片上,把串口连接好。嘿嘿,这时要打开你的串口调试软件,没有就赶快到网上DOWN一个了。你会用Windows的超级中端也行,不过我从不用它。我用http://emouze.com的comdebug,它是个不错的软件,我喜欢它是因为它功能好而且还有"线路状态"功能,这对我制作小玩意时很有用。串口号,波特率调好,打开串口,单片机上电,就可以在接收区看到不断出现的"Hello World!"。一定要先打开软件的串口,再把单片机上电,否则可能因字符不对齐而看到乱码哦。

51单片机C语言学习 <wbr>7
图7-4 调试结果

关键字:51单片机  C语言学习 引用地址:51单片机C语言学习 7

上一篇:c8051f330系列单片机AD转换
下一篇:51单片机C语言学习 6

推荐阅读最新更新时间:2024-03-16 14:44

C51单片机全自动洗衣机
源程序: #include reg51.h //定义头文件 #define uint unsigned int //定义字符uint #define uchar unsigned char //定义字符uchar #define TIME0H 0xff //定时器0计数器高位 #define TIME0L 0x9c //定时器0计数器低位 #define TIME1H 0x3c //定时器1计数器高位 #define TIME1L 0xb0
[单片机]
C<font color='red'>51单片机</font>全自动洗衣机
基于51单片机的号音自动播放器设计
1 引言 机关、院校日常作息需要计时和号音提示,笔者利用AT89C51型单片机和LM386型音频功率放大器构成了自动计时和号音播放器,成本低,效果好,值得推广。 2 AT89C51的主要特性和引脚功能 AT89C51是带4K字节闪烁可编程可擦除只读存储器(EPEROM)的低电压、高性能CMOS 8位微处理器(俗称单片机)。该单片机与工业标准的MCS-51型机的指令集和输出引脚兼容。AT89C51将多功能8位CPU和闪烁存储器组合在单个芯片中,为很多嵌入式控制提供了灵活性高且价格低廉的方案。 AT89C51的主要特性如下: 寿命达1000写/擦循环; 数据保留时间:10年; 全静态工作:0Hz-24MHz
[单片机]
基于<font color='red'>51单片机</font>的号音自动播放器设计
如何学习51单片机/心得/KEIL4/DXP
什么是单片机 学习使用单片机就是理解单片机硬件结构,以及内部资源的应用,在汇编或C语言中学会各种功能的初始化设置,以及实现各种功能的程序编制。 有人觉得要先学汇编。不过我个人觉得,学习51单片机,还是从C语言入手,一来方便,二来容易上手,仁者见仁,智者见智吧。 关于学习51单片机的书籍,市场上有很多,大家可以择优选取。 那么,如何用程序控制单片机的呢? 我开始学单片机的时候也曾有过这样的困惑啊,ok,下面帮大家整理一下思路。 怎么在Keil里写程序?keil怎么安装破解? 用过VC6.0的同学都知道,VC6.0是一个编译环境。什么是编译环境?简单地说,就是你写代码的地方。 那么,同理,单片机的编译环境就是Ke
[单片机]
如何<font color='red'>学习</font><font color='red'>51单片机</font>/心得/KEIL4/DXP
原创作品LED流星雨灯(51单片机程序代码)产品分享!
最近公司生产了一款流星雨灯!现把它分享给大家! 一、图片分享: 二、PCB文件分享: 三、原理图分享: 四、 上面只做了5根灯管,如果需要增加灯管的话,只需稍微改动下 下面的程序即可.如果增长 连线把灯管摆成圆形或者方形效果也比较牛逼的. 此款流星灯直径只有1.5公分只可以做30公分、50公分、80公分、1000公分等 。 这个东东主要是做装饰用,技术支持: http://www.51hei.com/ 下面公开全部的源代码. 请大家多多指教.程序代码大家可以随意修改,但不可用于商业用途. /*流星雨程序代码 作者:胡琴 2011-12-12 单片机型号:STC11F04 IO
[单片机]
原创作品LED流星雨灯(<font color='red'>51单片机</font>程序代码)产品分享!
自制51单片机超大数码管时钟
市面上出售的数码管一般都很小,本人用led发光管自己制作了一种个头很非常大的数码管,挂在家里显示效果非常牛逼下面是实物图: 下面是电路图: 下面是c51程序源代码: #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int #define pos P0 //设置数码显示的位选 #define segs P1 //设置数码显示的段选 code unsigned char d = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0
[单片机]
自制<font color='red'>51单片机</font>超大数码管时钟
PCF8591与AT89C51单片机的接口程序
  以AT89C51为主器件.I2C总线上连接4个PCF8591芯片,芯片地址分别为(OOOb、OlOb、020b、400b),89C51的P3.6作为SCL信号.P3.7做为SDA信号,每个芯片的模拟输入采用单端方式输入,参考电压VREF选用4.8V。参考电路如下图所示。下面程序为I2c协议、读取4路A,D转换数据以及写入D/A变换数值的C语言代码。
[单片机]
PCF8591与AT89C<font color='red'>51单片机</font>的接口程序
51单片机扩展中断的方法
一、采用硬件请求和软件查询的方法: 这种方法是:把各个中断源通过硬件“或非(高有效,如CD4002)”(与,低有效)门引入到单片机外部中断源输入端(INT0或INT1),同时再把外部中断源送到单片机的某个输入输出端口,这样当外部中断时,通过“或非”(与)门引起单片机中断,在中断服务程序中再通过软件查询,进而转相应的中断服务程序。显然,这种方法的中断优先级取决于软件查询的次序。其硬件连接和软件编程如下: Void zhongduan (void) interrupt 0 using 3 //中断函数 { EX0=0;//关中断 If(P0_0=1) { *****}//中断查询 If(P0_1=1) { ****
[单片机]
<font color='red'>51单片机</font>扩展中断的方法
关于单片机引脚读写操作
使用时肯定会用到单片机的IO引脚。以51单片机P1口为例。内部结构如图所示 当单片机进行写操作时,引脚锁存器(D触发器)CLK端接收有效电平,然后内部总线上需要写的数据就会通过D触发器传输到Q'。当写1时Q'为0,使MOSFET截止,因此外部引脚电平为1.当写0时Q'为1,MOSFET饱和导通,此时引脚可以看成接地,所以引脚为0。 如果对单片机IO口进行读操作。由图可以看出读操作包括读寄存器和读引脚。以前知道有这两种区别,但是从来没仔细区分过。从图中可以看出读寄存器时读寄存器上的三态缓冲器打开,Q端的值直接传到了内部总线上,而下面的读引脚三台缓冲器是高阻态,读引脚时则相反。 汇编语言中对读寄存
[单片机]
关于单片机引脚读写操作
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved