嵌入式系统作业Word文档格式.docx

上传人:b****6 文档编号:21154363 上传时间:2023-01-28 格式:DOCX 页数:11 大小:297.34KB
下载 相关 举报
嵌入式系统作业Word文档格式.docx_第1页
第1页 / 共11页
嵌入式系统作业Word文档格式.docx_第2页
第2页 / 共11页
嵌入式系统作业Word文档格式.docx_第3页
第3页 / 共11页
嵌入式系统作业Word文档格式.docx_第4页
第4页 / 共11页
嵌入式系统作业Word文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

嵌入式系统作业Word文档格式.docx

《嵌入式系统作业Word文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式系统作业Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

嵌入式系统作业Word文档格式.docx

接收系统仿真原理图如图4所示。

图4红外接收系统模块

3.LED数码显示系统模块

采用多位一体数码管显示,以发光二极管为组成单元的显示器件。

采用共阴极数码管工作模式:

阴极接在一起,低电平,阳极为高电平时,则对应的LED灯亮。

工作原理图如图5所示。

图5LED数码管工作原理图

系统红外接收LED数码显示模块Multisim原理图如图6所示。

图6数码显示模块原理图

二、软件设计模块

1.发送模块程序设计

通过按键来控制I/O口电平高低转换。

由I/O口电平转换,组成红外编码时序图,然后通过开关上移、下移、左移、右移按键控制响应功能程序,并实现红外编码的调制。

相应程序设计流程图如图7所示。

图7发送模块程序设计流程图

2.接收模块程序设计

(1)红外接收模块是通过中断的方式来接收红外的信号,具体接收流程图如图8所示。

图8中断接收流程图

(2)通过中断接收的红外调制信号,按照图9所示的解调和解码。

解码过程中,通过判读是否接收到引导码来判断接收的信号是否是用户码,然后并对用户码进行识别,确认键码后解码。

利用接收波形的下降沿使单片机产生中断,相邻两次中断(两个下降沿)的间隔时间由定时器计时

图9解码流程图

3.数码管显示程序设计

数码管显示模块,通过单片机识别解码数据,并根据数据十进制高地位进行显示,设定片选每一位的显示时间。

每次中断切换数码管,四次为一个周期,定时时间4ms。

已知三个数码管分别显示十位、个位和十分位,对解码后的程序首先进行十位判断,如果有值则进行零值判断,如果无值则进行个位判断,依次到十分位判断,三个有效位依次根据判断顺序进行查表,并通过单片机程序片选十位、个位和十分位数码管进行显示。

根据一个周期4ms,对数码管进行扫描显示,就形成了红外编码显示。

具体程序设计流程图如图10所示。

图10数码管显示程序设计流程图

 

8051源程序

#include

//函数原型

voidSystemInit(void);

voidDelay_840us(void);

voidDelay_2400us(void);

voidLedDisp();

unsignedcharGetCode(void);

//获得码

voiddelay(unsignedcharloop);

//位变量

sbitIRIN=P3^2;

sbitBEEP=P1^6;

sbitswch=P1^7;

//变量

unsignedcharKeyValue;

//机器码

unsignedcharMaValue;

//键值码;

unsignedchardisbuf[4];

//数码管显示缓冲

unsignedcharscan[4]={0x04,0x08,0x10,0x20};

//p2位选择

unsignedcharcodetable[16]=

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

/*延时*/

voiddelay(unsignedcharloop)

{

unsignedchari;

for(i=0;

i>

8);

TR1=1;

while(!

TF1);

TF1=0;

TR1=0;

}

/*延时9ms*/

voidDelay_9000us(void)

TL1=153.6;

TH1=223.6;

TR1=1;

TF1=0;

TR1=0;

/*延时4.5ms*/

voidDelay_4500us(void)

TH1=239.8;

TL1=204.8;

/*系统初始化*/

voidSystemInit(void)

IRIN=1;

IT0=1;

//INT0负跳变触发

TMOD=0x10;

//定时器1工作在方式1

EA=1;

EX0=1;

/*读码*/

unsignedcharGetCode()

unsignedcharn;

statictemp=0;

for(n=0;

n<

8;

n++)

{

IRIN);

//等待高电平,开始解码

Delay_840us();

//延时0.84ms

if(IRIN)//若仍然为高电平,则为1,否则为0

temp=(0x80|(temp>

>

1));

//1

while(IRIN);

//等待跳变成低电平

}

else{

temp=(0x00|(temp>

//0

}

returntemp;

/*数码管显示*/

voidLedDisp()

i<

4;

i++)

P0=table[disbuf[i]];

P2=scan[i];

delay(50);

P0=0x00;

voidmain(void)

SystemInit();

while

(1)

//以下是查表显示

disbuf[0]=(((KeyValue&

0xf0)>

4)&

0x0f);

disbuf[1]=KeyValue&

0x0f;

disbuf[2]=(((MaValue&

disbuf[3]=MaValue&

LedDisp();

voidinterr_ir(void)interrupt0

/*用户码和机器码*/

unsignedcharaddrl,addrh,num1,num2;

EA=0;

//先关闭外部中断0

Delay_9000us();

//检测9ms开始码

if(IRIN){//检测是否为干扰信号

//重新开启外部中断0

return;

//退出解码

//等待跳为高电平

Delay_4500us();

//检测4.5ms结果码

//读码

addrl=GetCode();

//用户编码高位

addrh=GetCode();

//用户编码低位

num1=GetCode();

//机器码

num2=GetCode();

//机器码反码

//校验是否为错码

if(num1!

=~num2)

KeyValue=14;

EA=1;

return;

KeyValue=num2;

MaValue=addrh;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1