单片机程序设计简介
- 格式:ppt
- 大小:131.00 KB
- 文档页数:12


学习单片机
//实例1:用单片机控制第一个灯亮
#include //包含51单片机寄存器定义的头文件
void main(void)
{
P1=0xfe; //P1=1111 1110B,即P1.0输出低电平
}
//实例2:用单片机控制一个灯闪烁:认识单片机的工作频率
#include //包含单片机寄存器的头文件
/
函数功能:延时一段时间
/
void delay(void) //两个void意思分别为无需返回值,没有参数传递
{
unsigned int i; //定义无符号整数,最大取值范围65535
for(i=0;i<20000;i++) //做20000次空循环
; //什么也不做,等待一个机器周期
}
/
函数功能:主函数 (C语言规定必须有也只能有1个主函数)
/
void main(void)
{
while(1) //无限循环
{
P1=0xfe; //P1=1111 1110B, P1.0输出低电平
delay(); //延时一段时间
P1=0xff; //P1=1111 1111B, P1.0输出高电平
delay(); //延时一段时间
}
}
//实例3:将 P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能
单⽚机:模块化程序设计
单⽚机C语⾔模块化设计
模块化设计是为了以后相同功能的代码⽅便调⽤,避免重复输⼊代码。
我们原来写过延时函数、按键判断等,在写新程序时可以直接添加并引⼊。A 通过头⽂件引⼊到新⼯程中
以延时函数为例:
1.延时函数代码所在⽂件:delay.c
必须引⼊delay.h头⽂件
具体代码如下:
#include "delay.h"
void delay(unsigned int time)
{
unsigned int x,y;
for(x=time;x>0;x--)
for(y=110;y>0;y--);
}
2.延时头⽂件delay.h
注意:#ifndef空格+下划线+头⽂件名⼤写(点⽤下划线代替)+下划线
#ifndef _DELAY_H_
#define _DELAY_H_
void delay(unsigned int time);
#endif
3.主程序⽂件需要引⼊头⽂件
main.c
#include "delay.h"
在主函数中需要的位置可以直接调⽤其函数
4.以后如果设计其他应⽤时,可以直接将delay.c delay.h放⼊到新⼯程中,并添加
在新程序⽂件中引⽤相应的头⽂件,在需要的位置即可直接调⽤,所以以后设计其他程序时可通过此⽅法快速调⽤B不⽤头⽂件,只引⼊相应的代码⽂件
以延时函数为例:
1.延时函数代码所在⽂件:delay.c
必须引⼊delay.h头⽂件
具体代码如下:
#include "delay.h"
void delay(unsigned int time)
{
unsigned int x,y;
for(x=time;x>0;x--)
for(y=110;y>0;y--);
}
2.将delay.c复制到新⼯程位置,并增加delay.c⽂件到⼯作项⽬中
3.在需要调⽤的C程序⽂件中声明函数:
extern void delay(unsigned int timer);
//==============================================
日历时钟//==============================================
//日历时钟
//按K1,进入设置状态
//按k2,停止闹钟声音
//按k3,依次进入闹钟功能是否启用,闹钟时,分秒,年,月,日及时间时,分,秒的设置,直到退出设
置状态//按k4,调整是否起用闹钟和调节闹钟时,分,秒,年,月,日,时间的时,分,秒的数字
//LCD第二排中间显示小喇叭,表示启用闹钟功能,无则禁止闹钟功能(可在调整状态进行
设置)//正常状态,LCD上排最前面显示自定义字符,LCD下排最前面闪动"willar"
//设置状态,LCD上排最前面显示"P",下排最前面在设置闹钟时间时显示"alarm:",其它状态显
示"time"//年代变化2000--2099,星期自动转换
//程序中有自定义字符写入
#include
#include
unsignedcharcodedis_week[]={"SUN,MON,TUE,WED,THU,FRI,SAT"};
unsignedcharcodepara_month[13]={0,0,3,3,6,1,4,6,2,5,0,3,5};//星期月参变数
unsignedchardatadis_buf1[16];//lcd上排显示缓冲区
unsignedchardatadis_buf2[16];//lcd下排显示缓冲区
unsignedchardatayear,month,date,week;//年、月、日、星期
unsignedchardataarmhour,armmin,armsec;//闹钟时、分、秒
unsignedchardatahour,min,sec,sec100;//时、分、秒、百分之一秒
unsignedchardataflag,vkey,skey;//设置状态计数标志、按键先前值、按键当前值
单片机程序的设计
程序设计是单片机开发最重要的工作,程序设计就是利用单片机的指令系统,根据应用系统(即目标产品)的要求编写单片机的应用程序,其实我们前面已经开始这样做过了,这一课我们不是讲如何来设计具体的程序,而是教您设计单片机程序的基本方法。不过在讲解之前还是有必要先了解一下单片机的程序设计语言。一.程序设计语言这里的语言与我们通常理解的语言是有区别的,它指的是为开发单片机而设计的程序语言,如果您没有学过程序设计可能不太明白,我给大家简单解释一下,您知道微软的VB,VC吗?VB,VC就是为某些工程应用而设计的计算机程序语言,通俗地讲,它是一种设计工具,只不过这种工具是用来设计计算机程序的。要想设计单片机的程序当然也要有这样一种工具(说设计语言更确切些)
单片机的设计语言基本上有三类:
1.完全面向机器的机器语言机器语言就是能被单片机直接识别和执行的语言,计算机能识别什么?以前我们讲过--是数字"0"或"1",所以机器语言就是用一连串的"0"或"1"来表示的数字。比如:MOV A,40H;用机器语言来表示就是11100101 0100000,很显然,用机器语言来编写单片机的程序不太方便,也不好记忆,我们必须想办法用更好的语言来编写单片机的程序,于是就有了专门为单片机开发而设计的语言:
2.汇编语言汇编语言也叫符号化语言,它使用助记符来代替二进制的"0"和"1",比如:刚才的MOV A,40H就是汇编语言指令,显然用汇编语言写成的程序比机器语言好学也好记,所以单片机的指令普遍采用汇编指令来编写,用汇编语言写成的程序我们就叫它源程序或源代码。可是计算机不能识别和执行用汇编语言写成的程序啊?怎么办?当然有办法,我们可以通过"翻译"把源代码译成机器语言,这个过程就叫做汇编,汇编工作现在都是由计算机借助汇编程序自动完成的,不过在以前,都是靠手工来做的。
值得注意的是,汇编语言也是面向机器的,它仍是一种低级语言。每一类计算机都有它自己的汇编语言,比如:51系列有它的汇编语言,PIC系列也有它的汇编语言,微机也有它自己的汇编语言,它们的指令系统是各不相同的,也就是说,不同的单片机有不同的指令系统,它们之间是不通用的,这就是为什么世界上有很多单片机类型的缘故。为了解决这个问题,人们想了很多的办法,设计了许多的高级计算机语言,而其中最适合单片机编程的要数C语言。