- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机实验一报告
实 验 报 告1
实验项目名称: I/O口实验 同组人:
实验时间: 实验室: K2-407单片机室 指导教师: 一、实验目的:
(l)学习P1口的结构及使用方法; 熟悉Proteus软件电路设计和Keil软件程序调试方法。
(2)学习软件延时程序的编写。
重点:延时程序,P1口结构
二、实验预备知识:
(l)Pl口为准双向口,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入。
(2)Proteus软件应用,Keil软件程序调试应用。
三、实验内容:
㈠ 模拟开关灯的Proteus仿真及C语言程序设计
1、设计要求:监视开关K1(接在P3.0端口上),用发光二级管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。
2、仿真电路原理图(预习)
元器件选取:① AT89C52:单片机;② RES:电阻;③ CRYSTAL:晶振;④ CAP、CAP-ELEC:电容、电解电容;⑤ LED-GREEN:绿色发光二级管;⑥ SWITCH:开关。
模拟开关灯的电路原理图
3、程序设计内容(预习)
开关状态的检测过程
单片机对开关状态的检测相对于单片机来说,是从单片机的P3.0端口输入信号,而输入的信号只有高电平和低电平两种,当拨动开关K1拨上去,即输入高电平,相当开关断开,当拨动开关K1拨下去,即输入低电平,相当开关闭合。单片机可以采用if(K1= =1)或者if(K1= =0)指令来完成对开关状态的检测。
输出控制
当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二级管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二级管L1亮。
4、程序清单(预习)
#includereg52.h
sbit K1=P3^0;
sbit L1=P1^0;
void main(void)
{
while(1)
{
if(K1!=1)
L1=0;
else
L1=1;
}
}
5、实验结果及分析:
实验结果:C52加载HEX文件进行仿真运行之后,通过鼠标操控开关闭合可以达到控制发光二极管明灭的效果。
实验分析:通过位定义P3.0和P1.0口分别赋给K1和L3,二极管通过灌电流点亮,电阻R2为限流电阻,防止电流过大烧坏二极管,因此,只有P1.0为低电平时二极管点亮。开关如果闭合,K1=1,程序显示P3.0低电平,则控制P1.0输出低电平,二极管顺利点亮。
㈡ 广告灯(利用查表方式)的Protues仿真及程序设计
1、设计要求:利用查表的方法,使单片机端口输出电平控制灯光的变化。(例如:左移,右移,闪烁等等)延时的时间0.2 s。
2、仿真电路原理图(预习)
元器件选取:① AT89C52:单片机;② RES:电阻;③ CRYSTAL:晶振;④CAP、CAP-ELEC:电容、电解电容;⑤ LED-GREEN:绿色发光二级管。
广告灯的电路原理图
3、程序设计内容(预习)
查表法是单片机程序设计中常用的一种方法,它多用于一些较复杂的控制场合,如判断键盘按键的键值、利用I/O口控制外部设备作一些预先设定好的复杂动作(本题是其简单的示意)、输出正余弦、三角、梯形或更复杂的波形,甚至可以利用查表法实现一些复杂的算法。
C语言步骤如下:
定义一维数组TABLE[ ](复杂情况也可以用二维数组,另外,为节省单片机的RAM
资源,数组一般放在代码段中);
把控制码按顺序放入数组TABLE[ ]中;
定义变量i,改变i的值,就可以取出数组中对应的控制码。
4、程序清单(预习)
#includereg52.h
unsigned char code table[]={0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xdb, 0xbd,0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e, 0xbd,0xdb,0xaa,0x55,0xaa,0x55,0xaa,0x55, 0xaa,0x55,0xaa,0x55,0x0f,0xfe,0xfc,0xf8, 0xf0,0x00,0xf0,0x7f,0x3f,0x1f,0x0f,0x00,0x5a};
unsigned char i=0;
void delay(void)
{unsigned int a,b;
for(a=0;a=1000;a++)
for(b=0;b=110;b++);
}
void main(void)
{
while(1)
{
if(table[i]!=0x5a)
{
P3=tabl
文档评论(0)