文档库 最新最全的文档下载
当前位置:文档库 › 51单片机C语言编程实例

51单片机C语言编程实例

51单片机C语言编程实例
51单片机C语言编程实例

基础知识:51单片机编程基础

单片机的外部结构:

1.DIP40双列直插;

2.P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)

3.电源VCC(PIN40)和地线GND(PIN20);

4.高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位)

5.内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍)

6.程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序)

7.P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1

单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务)

1.四个8位通用I/O端口,对应引脚P0、P1、P2和P3;

2.两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1)

3.一个串行通信接口;(SCON,SBUF)

4.一个中断控制器;(IE,IP)

针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。

C语言编程基础:

1.十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。

2.如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。

3.++var表示对变量var先增一;var—表示对变量后减一。

4.x |= 0x0f;表示为x = x | 0x0f;

5.TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四

位。

6.While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;}

在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)

代码

注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至VCC电源。在某引脚输出低电平的编程方法:(比如P2.7引脚)

代码

在某引脚输出方波编程方法:(比如P3.1引脚)

代码

将某引脚的输入电平取反后,从另一个引脚输出:(比如P0.4 = NOT( P1.1) )代码

将某端口8个引脚输入电平,低四位取反后,从另一个端口8个引脚输出:(比如P2 = NOT( P3 ) )

代码

注意:一个字节的8位D7、D6至D0,分别输出到P3.7、P3.6至P3.0,比如P3=0x0f,则P3.7、P3.6、P3.5、P3.4四个引脚都输出低电平,而P3.3、P3.2、P3.1、P3.0四个引脚都输出高电平。同样,输入一个端口P2,即是将P2.7、P2.6至P2.0,读入到一个字节的8位D7、D6至D0。

第一节:单数码管按键显示

单片机最小系统的硬件原理接线图:

1.接电源:VCC(PIN40)、GND(PIN20)。加接退耦电容0.1uF

2.接晶体:X1(PIN18)、X2(PIN19)。注意标出晶体频率(选用12MHz),还有辅助电容30pF

3.接复位:RES(PIN9)。接上电复位电路,以及手动复位电路,分析复位工作原理

4.接配置:EA(PIN31)。说明原因。

发光二极的控制:单片机I/O输出

将一发光二极管LED的正极(阳极)接P1.1,LED的负极(阴极)接地GND。只要P1.1输出高电平VCC,LED就正向导通(导通时LED上的压降大于1V),有电流流过LED,至发LED发亮。实际上由于P1.1高电平输出电阻为10K,起到输出限流的作用,所以流过LED的电流小于(5V-1V)/10K = 0.4mA。只要P1.1输出低电平GND,实际小于0.3V,LED就不能导通,结果LED不亮。

开关双键的输入:输入先输出高

一个按键KEY_ON接在P1.6与GND之间,另一个按键KEY_OFF接P1.7与GND之间,按KEY_ON后LED亮,按KEY_OFF后LED灭。同时按下LED半亮,LED保持后松开键的状态,即ON亮OFF灭。

代码

数码管的接法和驱动原理

一支七段数码管实际由8个发光二极管构成,其中7个组形构成数字8的七段笔画,所以称为七段数码管,而余下的1个发光二极管作为小数点。作为习惯,分别给8个发光二极管标上记号:a,b,c,d,e,f,g,h。对应8的顶上一画,按顺时针方向排,中间一画为g,小数点为h。

我们通常又将各二极与一个字节的8位对应,a(D0),b(D1),c(D2),d(D3),e(D4),f(D5),g(D6),h(D7),相应8个发光二极管正好与单片机一个端口Pn的8个引脚连接,这样单片机就可以通过引脚输出高低电平控制8个发光二极的亮与灭,从而显示各种数字和符号;对应字节,引脚接法为:a(Pn.0),b(Pn.1),c(Pn.2),d(Pn.3),e(Pn.4),f(Pn.5),g(Pn.6),h(Pn.7)。

如果将8个发光二极管的负极(阴极)内接在一起,作为数码管的一个引脚,这种数码管则被称为共阴数码管,共同的引脚则称为共阴极,8个正极则为段极。否则,如果是将正极(阳极)内接在一起引出的,则称为共阳数码管,共同的引脚则称为共阳极,8个负极则为段极。

以单支共阴数码管为例,可将段极接到某端口Pn,共阴极接GND,则可编写出对应十六进制码的七段码表字节数据如右图:

16键码显示的程序

我们在P1端口接一支共阴数码管SLED,在P2、P3端口接16个按键,分别编号为KEY_0、KEY_1到KEY_F,操作时只能按一个键,按键后SLED显示对应键编号。

代码

第二节:双数码管可调秒表

解:只要满足题目要求,方法越简单越好。由于单片机I/O资源足够,所以双数码管可接成静态显示方式,两个共阴数码管分别接在P1(秒十位)和P2(秒个位)口,它们的共阴极都接地,安排两个按键接在P3.2(十位数调整)和P3.3(个位数调整)上,为了方便计时,选用12MHz的晶体。为了达到精确计时,选用定时器方式2,每计数250重载一次,即250us,定义一整数变量计数重载次数,这样计数4000次即为一秒。定义两个字节变量S10和S1分别计算秒十位和秒个位。编得如下程序:

代码

第三节:十字路口交通灯

如果一个单位时间为1秒,这里设定的十字路口交通灯按如下方式四个步骤循环工作: 60个单位时间,南北红,东西绿;λ

10个单位时间,南北红,东西黄;λ

60个单位时间,南北绿,东西红;λ

10个单位时间,南北黄,东西红;λ

解:用P1端口的6个引脚控制交通灯,高电平灯亮,低电平灯灭。

代码

第四节:数码管驱动

显示“12345678”

P1端口接8联共阴数码管SLED8的段极:P1.7接段h,…,P1.0接段a

P2端口接8联共阴数码管SLED8的段极:P2.7接左边的共阴极,…,P2.0接右边的共阴极

方案说明:晶振频率fosc=12MHz,数码管采用动态刷新方式显示,在1ms定时断服务程序中实现代码

第五节:键盘驱动

指提供一些函数给任务调用,获取按键信息,或读取按键值。定义一个头文档,描述可用函数,如下:

代码

定义函数体文档KEY.C,如下:代码

下面渐进讲解键盘物理层的驱动。

电路共同点:P2端口接一共阴数码管,共阴极接GND,P2.0接a段、P2.1接b段、…、P2.7接h段。软件共同点:code unsigned char Seg7Code[10] 是七段数码管共阴编码表。

Code unsigned char Seg7Code[16]=

// 0 1 2 3 4 5 6 7 8 9 A b C d E F

{0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};

例一:P1.0接一按键到GND,键编号为…6?,显示按键。

代码

例二:在例一中考虑按键20ms抖动问题。代码

例三:在例二中考虑干扰问题。即小于20ms的负脉冲干扰。代码

例四:状态图编程法。通过20ms周期中断,扫描按键。

代码

例五:状态图编程法。代码

例六:4X4按键。

代码

第六节:低频频率计

实例目的:学时定时器、计数器、中断应用

说明:选用24MHz的晶体,主频可达2MHz。用T1产生100us的时标,T0作信号脉冲计数器。假设晶体频率没有误差,而且稳定不变(实际上可达万分之一);被测信号是周期性矩形波(正负脉冲宽度都不能小于0.5us),频率小于1MHz,大于1Hz。要求测量时标1S,测量精度为0.1%。

解:从测量精度要求来看,当频率超过1KHz时,可采用1S时标内计数信号脉冲个数来测量信号频,而信号频率低于1KHz时,可以通过测量信号的周期来求出信号频率。两种方法自动转换。

对于低于1KHz的信号,信号周期最小为1ms,也就是说超过1000us,而我们用的定时器计时脉冲周期为0.5us,如果定时多计或少计一个脉冲,误差为1us,所以相对误差为1us/1000us=0.1%。信号周期越大,即信号频率越低,相对误差就越小。

从上面描述来看,当信号频率超过1KHz后,信号周期就少于1000us,显然采用上面的测量方法,不能达到测量精度要求,这时我们采用1S单位时间计数信号的脉冲个数,最少能计到1000个脉冲,由于信号频率不超过1MHz,而我们定时脉冲为2MHz,最差多计或少计一个信号脉冲,这样相对误差为1/1000,可见信号频率越高,相对误差越小。

信号除输入到T1(P3.5)外,还输入到INT1(P3.3)。

代码

51单片机04矩阵按键逐行扫描,行列扫描代码

矩阵键盘扫描原理 方法一: 逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。 方法二: 行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。

//行列扫描 #include #define GPIO_KEY P0 #define GPIO_LCD P2 unsigned char code a[17]= {~0xfc,~0x60,~0xda,~0xf2,~0x66,~0xb6,~0xbe,~0xe0, ~0xfe,~0xf6,~0xee,~0x3e,~0x9c,~0x7a,~0xde,~0x8e,~0x00}; //按位取反的用法 void delay10ms(); void keydown();//要与下面的定义一致 void main() { GPIO_LCD=a[16];//初始化数码管 while(1) { keydown(); } }

void delay10ms() { unsigned char a,b; for(a=38;a>0;a--) for(b=130;b>0;b--); } void keydown() //检测按下,按下时需要消抖,检测松开,返回按键值//没有按键时保持 { unsigned char n=0,key; GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f)//读取按键是否按下 { delay10ms(); //延时10ms消抖 if(GPIO_KEY!=0x0f)//再次检测按键是否按下 { GPIO_KEY=0x0f;//测试列 switch(GPIO_KEY) { case 0x07: key=0;break;

80c51单片机交通灯课程设计报告1.pdf

80C51单片机交通灯课程设计报告 目录 第一章引言 (3) 第二章单片机概述 (4) 第三章芯片介绍 (6) 3.1AT89S51单片机介绍 (6) 3.1.1简介 (6) 3.1.2主要管脚介绍 (6) 3.274LS164介绍 (8) 3.3共阳数码管介绍 (8) 3.3.1分类简介 (8) 图3.3LED数码管引脚定义 (9) 3.3.2驱动方式 (9) 3.3.3主要参数 (10) 3.3.4应用范围 (10) 第四章系统硬件设计 (11) 4.1硬件设计要求 (11) 4.2硬件设计所用元器件 (11) 4.3硬件设计图 (11) 4.4设计流程图 (12) 第五章系统软件设计 (13) 5.1流程图 (13)

5.2程序设计 (14) 第六章结论 (16) 参考文献 (18)

第一章引言 在今天,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。但这一技术在19世纪就已出现了。 1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。这是世界上最早的交通信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。 1914年,电气启动的红绿灯出现在美国。这种红绿灯由红绿黄三色圆形的投光器组成,安装在纽约市5号大街的一座高塔上。红灯亮表示“停止”,绿灯亮表示“通行”。 智能的交通信号灯指挥着人和各种车辆的安全运行,实现红、黄、绿灯的自动指挥是城乡交通管理现代化的重要课题.在城乡街道的十字交叉路口,为了保证交通秩序和行人安全,一般在每条道路上各有一组红、黄、绿交通信号灯,其中红灯亮,表示该条道路禁止通行;黄灯亮,表示该条道路上未过停车线的车辆停止通行,已过停车线的车辆继续通行;绿灯亮,表示该条道路允许通行.交通灯控制电路自动控制十字路口两组红、黄、绿交通灯的状态转换,指挥各种车辆和行人安全通行,实现十字路口城乡交通管理自动化。 本文为了实现交通道路的管理,力求交通管理先进性、科学化.分析应用了单片机实现智能交通灯管制的控制系统,以及该系统软、硬件设计方法,实验证明该系统实现简单、经济,能够有效地疏导交通,提高交通路口的通行能力。

51单片机实例程100讲全集

目录 目录 (1) 函数的使用和熟悉 (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1 口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (15) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0 口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0 口8 位LED流水点亮 (20) 实例29:用P0 、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (22) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (30)

基于51单片机课程设计报告

单片机课程设计 课题:基于51单片机的交通灯设计 专业:机械设计制造及其自动化 学号: 指导教师:邵添 设计日期:2017/12/18 成绩: 大学城市科技学院电气学院 基于51单片机数字温度计设计报告

一、设计目的作用 本设计是一款简单实用的小型数字温度计,所采用的主要元件有传感器DS18B20,单片机AT89C52,,四位共阴极数码管一个,电容电阻若干。DS18B20支持“一线总线”接口,测量温度围-55°C~+125°C。在-10~+85°C围,精度为±0.5°C。18B20的精度较差,为±2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。 本次数字温度计的设计共分为五部分,主控制器,LED显示部分,传感器部分,复位部分,按键设置部分,时钟电路。主控制器即单片机部分,用于存储程序和控制电路;LED显示部分是指四位共阴极数码管,用来显示温度;传感器部分,即温度传感器,用来采集温度,进行温度转换;复位部分,即复位电路,按键部分用来设置上下限报警温度。测量的总过程是,传感器采集到外部环境的温度,并进行转换后传到单片机,经过单片机处理判断后将温度传递到数码管显示。 二、设计要求 (1).利用DS18B20传感器实时检测温度并显示。 (2).利用数码管实时显示温度。 (3).当温度超过或者低于设定值时蜂鸣器报警,LED闪烁指示。 (4).能够手动设置上限和下限报警温度。 三、设计的具体实现 1、系统概述 方案一:由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。 方案设计框图如下:

51单片机中断系统详解

的定时器中断后便认为是1s,这样便可精确控制定时时间啦。要计50000个数时,TH0和TL0中应该装入的总数是65536-50000=15536.,把15536对256求模:15536/256=60装入TH0中,把15536对256求余:15536/256=176装入TL0中。 以上就是定时器初值的计算法,总结后得出如下结论:当用定时器的方式1时,设机器周期为T CY,定时器产生一次中断的时间为t,那么需要计数的个数为N=t/T CY ,装入THX和TLX中的数分别为: THX=(65536-N)/256 , TLX=(65536-N)%256 中断服务程序的写法 void 函数名()interrupt 中断号using 工作组 { 中断服务程序内容 } 在写单片机的定时器程序时,在程序开始处需要对定时器及中断寄存器做初始化设置,通常定时器初始化过程如下: (1)对TMOD赋值,以确定T0和 T1的工作方式。 (2)计算初值,并将初值写入TH0、TL0或TH1、TL1。 (3)中断方式时,则对IE赋值,开放中断。 (4)使TR0和TR1置位,启动定时器/计数器定时或计数。 例:利用定时器0工作方式1,实现一个发光管以1s亮灭闪烁。 程序代码如下: #include #define uchar unsigned char #define uint unsigned int sbit led1=P1^0; uchar num; void main() { TMOD=0x01; //设置定时器0位工作模式1(M1,M0位0,1) TH0=(65536-45872)/256; //装初值11.0592M晶振定时50ms数为45872 TL0=(65536-45872)%256; EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 while(1) { if(num==20) //如果到了20次,说明1秒时间 { led1=~led1; //让发光管状态取反 num=0; } } } void T0_time()interrupt 1

单片机矩阵键盘扫描程序

#include #include #define uint unsigned int #define uchar unsigned char sbit E=P2^7; //1602使能引脚 sbit RW=P2^6; //1602读写引脚 sbit RS=P2^5; //1602数据/命令选择引脚 uint keyflag ; //键盘正在读取标志位,如果Keyflag为1 ,表示正在读取键盘,停止其他功能; char x,y,m,n,c; //Keyflag为0,读取键盘结束,恢复其他功能 char flag1=0; //频率范围10~1000Hz uchar Hrate = 0; //一个周期内高点平占据时间 uchar Lrate = 0; //一个周期内低电平占据时间 uint FREQ0; //定时器T0的计数变量// uint FREQ1; //定时器T1的计数变量// sbit P2_1=P2^0; //设置P2.1,作为信号输出口// uint disbuf[3]; uint figure=0; int sum2=0; int sum1=0; int flag=0; uint count=0; uint max=0; uint disbuf_temp=0; /******************************************************************** * 名称: 1602显示延时函数delay() * 功能: 延时,延时时间大概为5US。

* 输出: 无 ***********************************************************************/ void delay() { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } /******************************************************************** * 名称: bit Busy(void) * 功能: 这个是一个读状态函数,读出函数是否处在忙状态 * 输入: 输入的命令值 * 输出: 无 ***********************************************************************/ bit Busy(void) { bit busy_flag = 0; RS = 0; RW = 1; E = 1; delay(); busy_flag = (bit)(P0 & 0x80); E = 0; return busy_flag; } /******************************************************************** * 名称: wcmd(uchar del) * 功能: 1602命令函数 * 输入: 输入的命令值 * 输出: 无 ***********************************************************************/ void wcmd(uchar del) { while(Busy()); RS = 0; RW = 0; E = 0; delay(); P0 = del; delay(); E = 1;

51单片机实用汇编程序库(word)

51 单片机实用程序库 4.1 流水灯 程序介绍:利用P1 口通过一定延时轮流产生低电平 输出,以达到发光二极管轮流亮的效果。实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。 程序实例(LAMP.ASM) ORG 0000H AJMP MAIN ORG 0030H MAIN: 9 MOV A,#00H MOV P1,A ;灭所有的灯 MOV A,#11111110B MAIN1: MOV P1,A ;开最左边的灯 ACALL DELAY ;延时 RL A ;将开的灯向右边移 AJMP MAIN ;循环 DELAY: MOV 30H,#0FFH D1: MOV 31H,#0FFH D2: DJNZ 31H,D2 DJNZ 30H,D1 RET END 4.2 方波输出 程序介绍:P1.0 口输出高电平,延时后再输出低电 平,循环输出产生方波。实际应用中例如:波形发生器。 程序实例(FAN.ASM): ORG 0000H MAIN: ;直接利用P1.0 口产生高低电平地形成方波////////////// ACALL DELAY SETB P1.0 ACALL DELAY 10 CLR P1.0 AJMP MAIN ;////////////////////////////////////////////////// DELAY: MOV R1,#0FFH DJNZ R1,$ RET

五、定时器功能实例 5.1 定时1 秒报警 程序介绍:定时器1 每隔1 秒钟将p1.o 的输出状态改变1 次,以达到定时报警的目的。实际应用例如:定时报警器。程序实例(DIN1.ASM): ORG 0000H AJMP MAIN ORG 000BH AJMP DIN0 ;定时器0 入口 MAIN: TFLA G EQU 34H ;时间秒标志,判是否到50 个 0.2 秒,即50*0.2=1 秒 MOV TMOD,#00000001B;定时器0 工作于方式 1 MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 11 SETB EA ;开总中断 SETB ET0 ;开定时器0 中断允许 SETB TR0 ;开定时0 运行 SETB P1.0 LOOP: AJMP LOOP DIN0: ;是否到一秒//////////////////////////////////////// INCC: INC TFLAG MOV A,TFLAG CJNE A,#20,RE MOV TFLAG,#00H CPL P1.0 ;////////////////////////////////////////////////// RE: MOV TL0,#0AFH MOV TH0,#3CH ;设定时时间为0.05 秒,定时 20 次则一秒 RETI END 5.2 频率输出公式 介绍:f=1/t s51 使用12M 晶振,一个周期是1 微秒使用定时器1 工作于方式0,最大值为65535,以产生200HZ 的频率为例: 200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电

51单片机中断系统编程

51单片机中断系统编程 51单片机中断系统编程 上传的图片 抱歉,您所在的组无权下载附件,请注册或登陆中断是指如下过程(如下图所示):CPU 与外设同时工作,CPU执行主程序,外设做准备工作。当外设准备好时向CPU发中断请求信 号,若条件满足,则CPU终止主程序的执行,转去执行中断服务程序。在中断服务程序中 CPU与外设交换信息,待中断服务程序执行完后,CPU再返回刚才终止的主程序继续执行。 5.3.1 中断系统 MCS-51单片机提供了5个固定的可屏蔽中断源,3个在片内,2个在片外,它们在程序存储 器中各有固定的中断入口地址,由此进入中断服务程序。5个中断源的符号、名称及产生 的条件如下。 ? INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。 ? INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。 ? T0:定时器/计数器0中断,由T0计数溢出引起。 ? T1:定时器/计数器l中断,由T1计数溢出引起。 ? TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。 中断源有两级中断优先级,可形成中断嵌套。两个特殊功能寄存器用于中断控制和条件设 置。整个中断系统的结构框图如图所示。 上传的图片 抱歉,您所在的组无权下载附件,请注册或登陆 中断系统结构框图 2 中断系统的控制寄存器 中断系统有两个控制寄存器(IE和IP),它们分别用来设定各个中断源的打开/关闭和中

断优先级。此外,在TCON中另有4位用于选择引起外部中断的条件并作为标志位。 (1)中断允许寄存器IE IE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分别是A8H-AFH。IE 用 来打开或关断各中断源的中断请求,基本格式如下: 上传的图片 抱歉,您所在的组无权下载附件,请注册或登陆 ? EA:全局中断允许位。EA=0,禁止一切中断;EA=1,打开全局中断控制,此时,由各 个中断控制位确定相应中断的打开或关闭。 ? ×:无效位。 ? ES:串行I/O中断允许位。ES=1,允许串行I/O中断;ES=0,禁止串行I/O中断。 ? ETl;定时器/计数器T1中断允许位。ETl=1,允许T1中断;ETl=0,禁止T1中断。 ? EXl:外部中断l中断允许位。EXl=1,允许外部中断1中断;EXl=0,禁止外部中断1中 断。 ? ET0:定时器/计数器T0中断允许位。ET0=1,允许T0中断;ET0=0,禁止TO中断。 ? EX0:外部中断0中断允许位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0中 断。 (2)中断优先级寄存器IP IP在特殊功能寄存器中,字节地址为B8H,位地址(由低位到高位)分别是B8H一BFH。 MCS-51单片机的中断分为两个优先级,IP用来设定各个中断源属于两级中断中的哪一级, 其基本格式如下: 上传的图片

51单片机按键控制数码管程序

#define uint unsigned int #define uchar unsigned char uchar c; sbit p10=P1^0; sbit p11=P1^1; sbit p12=P1^2; sbit p13=P1^3; sbit p14=P1^4; sbit p15=P1^5; sbit p16=P1^6; sbit p17=P1^7; void delay(uint z); int b[]={0,1,2,3,4,5,6,7};//设置每一位显示的数字 unsigned char code Tab[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//共阳极数码管 int a[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void main() { EA=1; EX0=1; IT0=1; P1=0xff; while(1) { for(c=0;c<8;c++)//数码管扫描显示

P2=a[c]; P0=Tab[b[c]]; delay (1); } } } void delay(uint z) { uint a,b; for(a=z;a>0;a--) for(b=110;b>0;b--); } int_0()interrupt 0 { EA=0; if(p10==0) b[0]=(b[0]+1)%10; if(p11==0) b[1]=(b[1]+1)%10; if(p12==0) b[2]=(b[2]+1)%10; if(p13==0) b[3]=(b[3]+1)%10; if(p14==0) b[4]=(b[4]+1)%10; if(p15==0) b[5]=(b[5]+1)%10; if(p16==0) b[6]=(b[6]+1)%10; if(p17==0) b[7]=(b[7]+1)%10;

(完整word版)51单片机课程设计实验报告

51单片机课程设计报告 学院: 专业班级: 姓名: 指导教师: 设计时间:

51单片机课程设计 一、设计任务与要求 1.任务:制作并调试51单片机学习板 2.要求: (1)了解并能识别学习板上的各种元器件,会读元器件标示; (2)会看电路原理图; (3)制作51单片机学习板; (4)学会使用Keil C软件下载调试程序; 用调试程序将51单片机学习板调试成功。 二、总原理图及元器件清单 1.总原理图 2.元件清单 三、模块电路分析 1. 最小系统: 单片机最小系统电路分为振荡电路和复位电路, 振荡电路选用12MHz 高精度晶振, 振荡电容选用22p和30p 独石电容;

图 1 图 2 复位电路使用RC 电路,使用普通的电解电容与金属膜电阻即可; 图 3 当单片机上电瞬间由于电容电压不能突变会使电容两边的电位相同,此时RST 为高电平,之后随着时间推移电源负极通过电阻对电容放电,放完电时RST 为低电平。正常工作为低电平,高电平复位。 2. 显示模块: 分析发光二极管显示电路: 图 4 发光二极管显示电路分析:它是半导体二极管的一种,可以把电能转化成光能,常简写为

LED。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,产生自发辐射的荧光。图中一共有五个发光二极管其中一个为电源指示灯,当学习板通电时会发光以指示状态。其余四个为功能状态指示灯,实际作用与学习板有关 分析数码管显示电路 图 5 数码管显示电路分析:数码管按段数分为七段数码管和八段数码管,图中所用为八段数码管(比七段管多了一个小数点显示位),按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管.共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。数码管主要用来显示经电路板处理后的程序的运行结果。图中使用了八个八段数码管,可以显示八个0-15的数字。使用数码管可以直观的得到程序运行所显示的结果.也可以显示预置在学习板上的程序,主要通过16个开关来控制。 四、硬件调试 1、是否短路 用万用表检查P2两端是短路。电阻为0,则短路,电阻为一适值,电路正常。 2、焊接顺序 焊接的顺序很重要,按功能划分的器件进行焊接,顺序是功能部件的焊接--调试--另一功能部件的焊接,这样容易找到问题的所在。 3、器件功能 1)检查原理图连接是否正确 2)检查原理图与PCB图是否一致 3)检查原理图与器件的DATASHEET上引脚是否一致 4)用万用表检查是否有虚焊,引脚短路现象 5)查询器件的DATASHEET,分析一下时序是否一致,同时分析一下命令字是否正确 6)通过示波器对芯片各个引脚进行检查,检查地址线是否有信号的 7)飞线。用别的的口线进行控制,看看能不能对其进行正常操作,多试验,才能找到问题出现在什么地方。 1、详细描述硬件安装过程中出现的故障现象,并作故障分析,及解决方法。 六、软件调试

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

89C51单片机课程设计之秒表设计实验报告.

这里可以加学校LOGAL 单片机课程设计报告 院系:12级物信系 班别:光信息科学与技术7班 课程名称:秒表设计 姓名:龚俊才欧一景 学号:1210407033 1210407041 指导老师:张涛 2011.12.23

目录 1课程设计的目的和任务 1.1 单片机秒表课程设计的概述 1.2课程设计思路及描述 1.3 课程设计任务和要求 2硬件与软件的设计流程 2.1系统硬件方案设计 2.2软件方案设计 3 程序编写流程及课程设计效果3.1源程序及注释 3.2原理图分析 3.3课程设计效果 4 心得体会 5 相关查阅资料

1. 课程设计的目的和任务 1.1单片机秒表课程设计的概述 一、课程设计题目 秒表系统设计——用STC89C52RC设计一个4位LED数码显示“秒表”,显示时间为 00.00~99.99秒,每10毫秒自动加一,每1000毫秒自动加一秒。 二、增加功能 增加一个“复位”按键(即清零),一个“暂停”和“开始”按键。 三、课程设计的难点 单片机电子秒表需要解决三个主要问题,一是有关单片机定时器的使用;二是如何实现LED 的动态扫描显示;三是如何对键盘输入进行编程。 四、课程设计内容提要 本课程利用单片机的定时器/计数器定时和记数的原理,结合集成电路芯片8051、LED数码管以及课程箱上的按键来设计计时器。将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。其中本课程设计有两个开关按键:其中key1按键按下去时开始计时,即秒表开始键(同时也用作暂停键),key2按键按下去时数码管清零,复位为“00.00”. 五、课程设计的意义 1)通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步 的了解。 2)掌握定时器、外部中断的设置和编程原理。 3)通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。 4)该课程通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的 计时、暂停、清零,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义 六、课程设计仪器 a) 集成电路芯片8051,七段数码管,89C51单片机开发板 b) MCS-51系列单片机微机仿真课程系统中的软件(Keil uvision2)。

51单片机中断系统程序实例

51单片机中断系统程序实例(STC89C52RC) 51单片机有了中断,在程序设计中就可以做到,在做某件事的过程中,停下来先去响应中断,做别的事情,做好别的事情再继续原来的事情。中断优先级是可以给要做的事情排序。 单片机的学习不难,只要掌握学习方法,学起来并不难。什么是好的学习方法呢,一定要掌握二个要点: 1. 要知道寄存器的英文全拼,比如IE = interrupt中断 不知道全拼,要去猜,去查。这样就可以理解为什么是这个名称,理解了以后就不用记忆了。 2. 每个知识点要有形像的出处 比如看到TF0,脑子里马上要形像地定位到TCON寄存器的某位 看到ET0, 马上要形像地定位到IE寄存器的第2位 https://www.wendangku.net/doc/ab11112128.html,/tuenhai/独家揭秘:形像是记忆的最大技巧。当人眼看到某个图时,是把视觉信号转化成电信号,再转化成人能理解的形像。当我们回忆形像时,就是在重新检索原先那个视觉信号,并放大。在学习过程中,不断练习检索、放大信号,我们的学习能力就会越来越强。 写程序代码时,也要把尽量把每行代码形像化。 51单片机内中断源 8051有五个中断源,有两个优先级。与中断系统有关的特殊功能寄存器有IE(中断允许寄存器)、IP(中断优先级控制寄存器)、中断源控制寄存器(如TCON、SCON的有关位)。51单片机的中断系统结构如下图(注意,IF0应为TF0):

8052有6个中断源,它比8051多一个定时器/计数器T2中断源。 8051五个中断源分别是: (1)51单片机外部中断源 8051有两个外部中断源,分别是INT0和INT1,分别从P3.2和P3.3两个引脚引入中断请求信号,两个中断源的中断触发允许由TCON的低4位控制,TCON的高4位控制运行和溢出标志。 INT0也就是Interrupt 0。在这里应该看一下你的51单片机开发板的电路原理图。离开形像的记忆是没有意义的。读到上面这句,你应该回忆起原理图上的连接。任何记忆都转化为形像,这是学习的根本原理,我们通过学习单片机要学会这种学习方法,会让你一辈子受益无穷。 TCON的结构如下图: (a)定时器T0的运行控制位TR0

51单片机矩阵键盘扫描程序

/*----------------------------------------------- 名称:矩阵键盘依次输入控制使用行列逐级扫描 论坛:https://www.wendangku.net/doc/ab11112128.html, 编写:shifang 日期:2009.5 修改:无 内容:如计算器输入数据形式相同从右至左使用行列扫描方法 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换 #define KeyPort P1 sbit LATCH1=P2^2;//定义锁存使能端口段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~F unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码 unsigned char TempData[8]; //存储显示值的全局变量 void DelayUs2x(unsigned char t);//us级延时函数声明 void DelayMs(unsigned char t); //ms级延时 void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数 unsigned char KeyScan(void);//键盘扫描 unsigned char KeyPro(void); void Init_Timer0(void);//定时器初始化 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { unsigned char num,i,j; unsigned char temp[8]; Init_Timer0(); while (1) //主循环 { num=KeyPro();

51单片机电子时钟课程设计报告报告

目录 第一部分设计任务和要求 1.1单片机课程设计内 容 (2) 1.2单片机课程设计要求………………………………………………… 2 1.3系统运行流程………………………………………………………… 2 第二部分设计方案 2.1 总体设计方案说明 (2) 2.2 系统方框图 (3) 2.3 系统流程图 (3) 第三部分主要器材及基本简介 3.1 主要器材 (4) 3.2 主要器材简介 (4) 第四部分系统硬件设计 4.1 最小系统 (6) 4.2 LCD显示电路 (6) 4.3 键盘输入电路 (7) 4.4 蜂鸣器和LED灯电路 (7)

第五部分仿真电路图与仿真结果 (8) 第六部分课程设计总结 (8) 第七部分参考文献 (9) 附录A 实物图 附录B 系统源程序 第一部分设计任务和要求 1.1 单片机课程设计内容 利用STC89C51单片机和LCD1602电子显示屏实现电子时钟,可由按键进行调时和12/24小时切换。 1.2 单片机课程设计要求 1.能实现年、月、日、星期、时、分、秒的显示; 2.能实现调时功能; 3.能实现12/24小时制切换; 4.能实现8:00—22:00整点报时功能。 1.3 系统运行流程 程序首先进行初始化,在主程序的循环程序中首先调用数据处理程序,然后调用显示程序,在判断是否有按键按下。若有按键按下则转到相应的功能程序执行,没有按键按下则调用时间程序。若没到则循环执行。计时中断服务程序完成秒的计时及向分钟、小时的进位和星期、年、月、日的进位。调时闪烁中断服务程序

用于被调单元的闪烁显示。调时程序用于调整分钟、小时、星期、日、月、年,主要由主函数组成通过对相关子程序的调用,如图所示。实现了对时间的设置和修改、LCD显示数值等主要功能。相关的调整是靠对功能键的判断来实现的。第二部分设计方案 2.1 总体设计方案说明 1.程序设计及调试 根据单片机课程设计内容和要求,完成Protues仿真电路的设计和用Keil软件编写程序,并进行仿真模拟调试。 2.硬件焊接及调试 根据仿真电路图完成电路板的焊接,并进行软、硬件的调试,只到达到预期目的。3.后期处理 对设计过程进行总结,完成设计报告。 2.2 单片机系统方框图

51单片机键盘设置

\\\§8.3 键盘接口技术 一、键盘输入应解决的问题 键盘是一组按键的集合,它是最常用的单片机输入设备. 操作人员可以通过键盘输入数据或命令,实现简单的人机通讯。 键是一种常开型按钮开关,平时(常态)键的二个触点处于断开状态,按下键时它们才闭合(短路)。 键盘分编码键盘和非编码键盘。 键盘上闭合键的识别由专用的硬件译码器实现并产生编号或键值的称为编码键盘, 如:ASCⅡ码键盘、BCD码键盘等; 靠软件识别的称为非编码键盘。 在单片机组成的测控系统及智能化仪器中用得最多的是非编码键盘。 本节着重讨论非编码键盘的原理、接口技术和程序设计。 键盘中每个按键都是—个常开关电路,如图所示。

1.按键的确认:P1.7=1 无按键; P1.7=0 有按键; 2.去抖动 去抖动的方法: ①硬件去抖动采用RS触发器: 优点: 速度快,实时, 缺点: 增加了硬件成本 ②软件去抖动采用延时方法 延时5—10ms 延时5—10ms P1.7=0 确认P1.7=0 P1.7=1 (去前沿抖动) (去后沿抖动) 二、独立式键盘

每个I/O口连接一个按,S1 P1.0 S2 P1.1 ………………………. S8 P1.7 软件: START:MOV P1,#0FFH ;置P1口为高电平 JNB P1.0, RS1 ; S1按下,程序去执行RS1 JNB P1.1, RS2 ; S2按下,程序去执行RS2

JNB P1.2, RS3 ; S3按下,程序去执行RS3 JNB P1.3, RS4 ; S4按下,程序去执行RS4 JNB P1.4, RS5 ; S5按下,程序去执行RS5 JNB P1.5, RS6 ; S6按下,程序去执行RS6 JNB P1.6, RS7 ; S7按下,程序去执行RS7 JNB P1.7, RS8 ; S8按下,程序去执行RS8 AJMP START ; 继续扫描按键 …………. RS1: AJMP PK1 ; RS2: AJMP PK2 ; RS3: AJMP PK3 ; RS4: AJMP PK4 ; RS5: AJMP PK5 ; RS6: AJMP PK6 ; RS7: AJMP PK7 ; RS8: AJMP PK8 ; AJMP START ; 无键按下,继续扫描………………… PK1: ……….. ;按键S1功能处理程序 AJMP START ;处理S1按键后, 继续扫描PK2: ……….. ;按键S2功能处理程序

矩阵键盘程序c程序,51单片机.

/*编译环境:Keil 7.50A c51 */ /*******************************************************/ /*********************************包含头文件********************************/ #include /*********************************数码管表格********************************/ unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x 8E}; /**************************************************************************** 函数功能:延时子程序 入口参数: 出口参数: ****************************************************************************/ void delay(void) { unsigned char i,j; for(i=0;i<20;i++) for(j=0;j<250;j++); } /**************************************************************************** 函数功能:LED显示子程序 入口参数:i 出口参数: ****************************************************************************/ void display(unsigned char i) { P2=0xfe; P0=table[i]; } /**************************************************************************** 函数功能:键盘扫描子程序 入口参数: 出口参数: ****************************************************************************/ void keyscan(void) { unsigned char n; //扫描第一行 P1=0xfe;

51单片机电子时钟课程设计报告

第一部分设计任务和要求 1.1 单片机课程设计内容 利用STC89C51单片机和LCD1602电子显示屏实现电子时钟,可由按键进行调时和12/24小时切换。 1.2 单片机课程设计要求 1.能实现年、月、日、星期、时、分、秒的显示; 2.能实现调时功能; 3.能实现12/24小时制切换; 4.能实现8:00—22:00整点报时功能。 1.3 系统运行流程 程序首先进行初始化,在主程序的循环程序中首先调用数据处理程序,然后调用显示程序,在判断是否有按键按下。若有按键按下则转到相应的功能程序执行,没有按键按下则调用时间程序。若没到则循环执行。计时中断服务程序完成秒的计时及向分钟、小时的进位和星期、年、月、日的进位。调时闪烁中断服务程序用于被调单元的闪烁显示。调时程序用于调整分钟、小时、星期、日、月、年,主要由主函数组成通过对相关子程序的调用,如图所示。实现了对时间的设置和修改、LCD显示数值等主要功能。相关的调整是靠对功能键的判断来实现的。 第二部分设计方案 2.1 总体设计方案说明 1.程序设计及调试 根据单片机课程设计内容和要求,完成Protues仿真电路的设计和用Keil软件编写程序,并进行仿真模拟调试。 2.硬件焊接及调试 根据仿真电路图完成电路板的焊接,并进行软、硬件的调试,只到达到预期目的。

3.后期处理 对设计过程进行总结,完成设计报告。 2.2 单片机系统方框图 2.2 单片机系统流程图 主流程图键盘扫描流程图

时钟流程图 第三部分主要器件及简介 3.1 主要器件 1. STC89C51单片机; 2.LCD1602液晶显示屏; 3.2 主要器件简介 1.STC89C51单片机简介 STC89C51是采用8051核的ISP(In System Programming)在系统可编程芯片,最高工作时钟频率 为80MHz,片内含8K Bytes的可反复擦写1000次的 Flash只读程序存储器,器件兼容标准MCS-51指令系 统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。 2.LCD1602液晶显示屏简介

相关文档
相关文档 最新文档