嵌入式系统接口大作业.docx
- 文档编号:25271449
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:17
- 大小:830.48KB
嵌入式系统接口大作业.docx
《嵌入式系统接口大作业.docx》由会员分享,可在线阅读,更多相关《嵌入式系统接口大作业.docx(17页珍藏版)》请在冰豆网上搜索。
嵌入式系统接口大作业
试验一:
1、设计要求说明:
(1)按键按下,点亮D1;
(2)按键持续按下1秒则点亮D2,此后按键持续按下时间每增加1秒则顺次增加点亮下一个LED(D3~D8);
(3)D1~D8都点亮后,按键继续持续按下时,持续时间每增加0.5秒,D1~D8同时翻转状态1次(以此实现每秒闪烁1次)
(4)按键释放,熄灭D1~D8
2、目标:
学会中断程序的应用
3、程序框图与解释
是
是
否
(1)程序通过检测外部中断信号0位的标志位IE0状态来决定1、执行中断程序或者2、立即熄灭所有灯使得中断程序从开始执行。
(2)中断程序调用延时程序实现点亮等延时。
4、运行截图
点亮前两个灯
点亮前7个灯过程
全部灯点亮
全部灯闪烁
5、相关器件及软件说明
本设计使用了单片机最小系统和8个LED灯及8个电阻实现跑马灯的先依次点亮后共同闪烁的功能,软件方面使用了外部中断信号0的标志位来作为程序判断执行的信号,使用中断程序来实现按下键时执行任务。
6、源程序截图与源程序如下:
程序截图
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
voidDelayMS(uintx)
{
uchari;
while(x--)
{for(i=0;i<255;i++);}
}
voidmain()
{EA=1;//开总中断
EX0=1;//开外部中断0
EX1=1;
IT0=0;
IT1=0;//外部中断1的触发方式为电平触发
while
(1)
{if(IE0==0)//判断是否一直有中断信号
P1=0xff;}//无中断信号时,结束中断程序执行(重要)
}
voidint0()interrupt0//中断子程序
{if(P1==0x00)
{
P1=0xff;
DelayMS(200);
P1=0X00;}//不停闪烁
else
P1=P1<<1;//依次点亮
DelayMS(640);
}
实验二
1、设计要求说明:
循环读取18B20温度数据送LCD1602显示
2、目标:
学会一般电子元器件的接口设计与软件编程(此例中为ds18b20温度传感器与LCD1602液晶显示器的编程)
3、程序框图与解释
LCD1602要想实现正常工作必须先进行初始化,经过延时后读取温度,然后判断温度正负并进行十进制转换,将转换后的温度写入LCD数据并显示。
4、运行截图
硬件截图
正温度值仿真
正温度值仿真
负温度值仿真
5、相关器件及软件说明
本设计使用DS18B20温度传感器读取温度值经过了单片机读取并转换数据后由LCD1602液晶显示器显示出温度,软件方面使用了18B20复位子程序、18B20写入子程序、温度转换子程序、温度读取子程序、LCD忙转换判断子程序、初始化子程序、LCD数据写入与读取子程序、与主函数组成按流程图顺序完成温度的读取与显示。
6、源程序如下:
#include
#include
typedefunsignedcharuint8;
typedefunsignedintuint16;
typedefcharint8;
typedefintint16;
sbitRS=P2^0;
sbitRW=P2^1;
sbitEN=P2^2;
sbitDQ=P3^3;//温度输入口
uint8codeword[]=
{
"Temperature:
"
};
uint8num_temp[]={"0123456789"};
#definenops();{_nop_();_nop_();_nop_();_nop_();}//定义空指令4us
voiddelay(uint16n)
{
while(n--);
}
voiddelay_ms(uint16m)
{
uint8n=120;
while(m--)
while(n--);
}
/*
*18B20复位函数
*/
voidDS1802_reset()
{
uint8flag=1;
while(flag)
{
while(flag)
{
DQ=1;
delay
(1);
DQ=0;
delay(50);//550us
DQ=1;
delay(6);//66us
flag=DQ;
}
delay(45);//延时500us
flag=~DQ;//500us后总线释放,DQ=1;
}
DQ=1;
}
/*
*18B20写1个字节函数
*向1-WIRE总线上写一个字节
*/
voidwrite_byte(uint8dat)
{
uint8i;
for(i=0;i<8;i++)
{
DQ=1;
_nop_();
DQ=0;
nops();
DQ=dat&0x01;//最低位移出
delay(6);//66us
dat>>=1;//右移一位
}
DQ=1;
delay
(1);
}
/*
*18B20读1个字节函数
*从1-WIRE总线上读取一个字节
*/
uint8read_byte()
{
uint8i,byte=0;
for(i=0;i<8;i++)
{
byte>>=1;
DQ=1;
_nop_();
DQ=0;
nops();
DQ=1;
nops();
if(DQ==1)byte|=0x80;
delay(6);
}
DQ=1;
returnbyte;
}
/*
*启动温度转换
*/
voidstart_temp_sensor()
{
DS1802_reset();
write_byte(0xcc);//发SkipROM命令
write_byte(0x44);//发转换命令
}
/*
*读出温度
*/
int16read_temp()
{
uint8temp_data[2];//读出温度暂放
uint16temp;
DS1802_reset();//复位
write_byte(0xcc);//发SkipROM命令
write_byte(0xbe);//发读命令
temp_data[0]=read_byte();//温度低8位
temp_data[1]=read_byte();//温度高8位
temp=temp_data[1];
temp<<=8;
temp|=temp_data[0];
//temp>>=4;//右移四位,相当于除以16(1/16=0.0625)
returntemp;
}
/*
*读忙状态
*/
voidwait()
{
P0=0xff;
do
{
EN=0;
RS=0;
RW=1;
EN=1;
}while(BUSY==1);
EN=0;
}
/*
*写指令
*/
voidwrite_cmd(uint8cmd)
{
wait();
EN=0;
P0=cmd;
RS=0;
RW=0;
EN=1;
EN=0;
}
/*
*写数据
*/
voidwrite_dat(uint8dat)
{
wait();
EN=0;
P0=dat;
RS=1;
RW=0;
EN=1;
EN=0;
}
/*
*初始化
*/
voidlcd1602_init()
{
delay_ms(15);
write_cmd(0x38);
delay_ms(5);
write_cmd(0x38);
delay_ms(5);
write_cmd(0x38);
delay_ms(5);
write_cmd(0x38);
write_cmd(0x0c);
write_cmd(0x06);
write_cmd(0x01);
}
/*
*写地址和数据
*/
voidwrite_lcd1602(uint8addr,uint8dat)
{
write_cmd(addr);
write_dat(dat);
}
/*
*写字符串
*/
voidwrite_string(uint8addr,uint8*p)
{
write_cmd(addr);
while(*p!
='\0')
{
write_dat(*p++);
}
}
/*
*主函数
*/
voidmain()
{
uint16temp;
lcd1602_init();
while
(1)
{
start_temp_sensor();
delay_ms(100);
temp=read_temp();
if(temp&0x8000)//判定是否为负
{
temp=~temp+1;
temp=(temp*0.0625)*10+0.5;
write_lcd1602(0xc0,'-');
write_lcd1602(0xc1,num_temp[temp/1000]);
write_lcd1602(0xc2,num_temp[(temp%1000)/100]);
write_lcd1602(0xc3,num_temp[(temp%100)/10]);
write_lcd1602(0xc4,'.');
write_lcd1602(0xc5,num_temp[temp%10]);
}
else
{
temp=(temp*0.0625)*10+0.5;
write_lcd1602(0xc0,'+');
write_lcd1602(0xc1,num_temp[temp/1000]);
write_lcd1602(0xc2,num_temp[(temp%1000)/100]);
write_lcd1602(0xc3,num_temp[(temp%100)/10]);
write_lcd1602(0xc4,'.');
write_lcd1602(0xc5,num_temp[temp%10]);
}
write_string(0x80,word);//写字符串
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 接口 作业