手机版

c语言单片机实例

时间:2025-07-08   来源:未知    
字号:

第三章 单片机C语言编程基础

本章主要学习51单片机的外部引脚和内部结构等,叙述一下。本书任务驱动教学,引入案例有浅变深,循序渐进,给读者留下思考和发挥空间。

3.1 利用单片机的I/O口驱动LED

3.1.1利用单片机的P0.0 端口驱动1只LED闪烁

编程的目的是利用C语言控制单片机I/O端口按要求输出矩形波脉冲信号,信号的周期由延时函数决定。

一、电路原理

STC-89C51单片机的P0口采用为OD门输出,不存在拉出电流,因此利用P0驱动负载时有两种接法:一种是加上拉电阻R2,见图3-1-1,既用1K 电阻接电源正极,此时P0口输出高电平时LED亮;另一种电路为P0.7低电平驱动有效,在P0.7输出低电平时,STC-89C51端口灌入电流达20mA,可直接驱动小负载。图3-3-1中的R3为限流电阻,限制LED2的工作电流。

图3-1-1 驱动LED电路原理

单片机的最小系统包括晶体振荡电路,加电复位电路,同时要求单片机的31引脚EA接高电平。时钟频率主要由晶体CY决定,C1、C2为独石电容,用于微小调整单片机时钟的振荡频率;R1和C3组成加电复位电路,C3为电解电容器;整个电路由+5V电压供电。电路使用的元件参数见表3.1.1。

表3.1.1 3-1-1电路元件表

元件名称 单片机 电容器

序号 IC C1

标称 STC89C51 30PF

规格(封装,功率电压等参数)

DIP40 独石

作用 核心芯片 振荡

电容器 电容器 晶振 电阻 电阻 电阻 发光二极管 发光二极管

C2 C3 CY R1 R2 R3 LED1 LED2

30PF 10μF 12MHz 1K 1K 1K

独石 点解电容器

S型 1/4W,金属膜 1/4W,金属膜 1/4W,金属膜 红色高亮 红色高亮

振荡 复位 振荡

电容器C3放电电阻 端口电位上拉电阻

限流电阻 显示 显示

5 5

二、程序设计

1.程序设计平台

程序设计采用keil C 软件,为了养成一个良好的文件管理习惯,建议:编程前,在计算机的某个硬盘分区下建立一个目录,目录的名字为你编写程序的主题,然后把keil C产生的所有文件都放在该目录下。程序设计步骤如下:

(1)运行keil C,创建一个项目。利用keil C菜单栏中project-new project创建,项目的名字为你编程的主题,如本案例可以用“LED_1.uv2”或“一个LED闪烁实验.uv2”,存放目录为你的主题目录下;

(2)创建建一个文件,然后以“.c”后缀名,文件存放在你的主题目录下; (3) 把c文件添加在你的项目中,在project workspace窗口利用add file to group 实现。如果软件界面不显示这个窗口,运行keil C菜单栏中的view-project window。

(4)设置编译器,是编译过程中能生成“.hex”文件。默认文件名与主题名字相同。运行project-option for‘target 1’-output窗口下点击create HEX file。

(5)在编程区域写你的程序,结束后存储文件并编译,要做检查,尽量避免警告出现,直到程序编译无误为止。

(6)程序烧写并试运行。这个过程称为软件和硬件联合调试,如果实验板无误,程序编译通过,但在硬件上运行不成功是常用的事情,需要对程序进行多次调试。在没有实验板的情况下,可以利用proteus软件仿真调试,也可以检验你的程序设计结果。

2.程序设计

(1)利用P0.0口驱动LED闪烁,高电平有效

/*****************************************************************************/

#include<reg51.h> //包含头文件

sbit LED = P0^0; // LED接P0.0。在kell C51软件中,定义P0.0为P0^0, void delay(unsigned char x) //延时函数 { unsigned char i,j; for(i = 0;i < x;i++) for(j = 0;j < 200;j++); }

void main(void) //主函数 { While(1) //程序死循环 {

LED = 0; //P0.0输出低电平,LED灭

void delay(100); //调用延时函数,延时一段时间,约0.3秒,不精确 LED = 1; //P0.0输出高电平,LED亮

void delay(100); } }

/*****************************************************************************/

(2)利用P0.7端口驱动LED闪烁,低电平有效

/*****************************************************************************/ #include<reg51.h> //包含头文件,程序为小5号字 sbit LED = P0^7;

void delay(unsigned char x) //延时函数

{ unsigned char i,j; for(i = 0;i<x;i++) for(j = 0;j < 1000;j++); }

void main(void) //主函数 { while(1) {

LED = ~LED; //LED初始状态为灭,执行一次,LED改变一次状态

void delay(100); //延时一段时间

} }

/*****************************************************************************/

三、程序说明

1.应为使用的单片机芯片为STC89C51,因此程序开始处加入#include<reg51.h>,文件reg51.h中包含了51芯片所有特殊功能寄存器的名称定义和相对应的地址值;

2. 单片机程序单步顺序执行,先执行主函数,在主函数可以调用分函数,分函数可以调用分函数,但分函数不能调用主函数,程序执行一条命令再执行下一条,单片机等待的过程是执行了一个循环命令或一个浪费时间的程序,实际执行过程永远不会结束。delay()为函数延,单片机在执行此函数相关指令时占用的时间过长,在执行过程中,如果没有中断,单片机只能忙这一件事情。利用delay()不能得到精确的延 …… 此处隐藏:16491字,全部文档内容请下载后查看。喜欢就下载吧 ……

c语言单片机实例.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)