ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:72.04KB ,
资源ID:5225251      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5225251.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(山东大学单片机实验 硬件实验.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

山东大学单片机实验 硬件实验.docx

1、山东大学单片机实验 硬件实验信息科学与工程学院20162017学年第二学期实验报告课程名称: 单片机原理与应用实验名称: 4.1声光报警实验4.58255并行I/O口扩展及交通灯信号控制实验4.77279键盘扫描及动态LED显示实验 实验报告【实验源程序】实验4.1:按键声光报警实验源程序:#include#define uint unsigned int#define uchar unsigned charsbit bell=P11; /P1.1口位赋值给铃声sbit led=P10; /P1.0口位赋值给灯sbit key0=P12; /P1.2口位赋值给按键uint count;/*主程

2、序*/void main() /按键按下后就触发中断 EA=1; /开放中断 EX0=1; /允许外部中断0中断 IT0=0; /外部中断0设置为电平触发方式 while(1); /循环执行void delay(uint count) /延时1ms uint x,y; for(x=count;x0;x-) for(y=120;y0;y-); void show(uint count) uint i;for(i=0;i=10) /到10清零按键数 count=0; EA=1; /开放中断实验 4.5:8255 并行 I/O 扩展及交通信号灯控制实验#include#include#include

3、 / 可使用其中定义的宏来访问绝对地址#define uchar unsigned char#define uint unsigned int#define PA XBYTE0x7FFC /PA指代外部数据存储器7FFCh的地址#define COM XBYTE0x7FFF /由P0 P2口联合输出地址sbit P30=P30;sbit P31=P31;uint temp,shi,ge,t;uchar a;void show(uint temp);void delay();void delays();void init_8255();void init_8255() COM=0x80; / c

4、 = out, a = out,b = outvoid delay() /延时500MS子程序 uint i,j; for(i=500;i0;i-) for(j=120;j0;j-);void delays() /延时1S子程序 uint i,j; for(i=1000;i0;i-) for(j=120;j0;j-);/*主程序*/void main() init_8255(); TMOD=0x01; /设定工作模式1 EA=1; /开放中断 ET0=1; /允许T0中断 TF0=0; /定时器0溢出标志位 while(1) a=0x26; /变量a赋初值 for(temp=25;temp19

5、;temp-) /绿灯倒计时25s a=a-1; PA=0x69; /东西绿灯亮 show(a); /调用数码管显示子程序 delays(); /延时1s a=0x1a; /变量a赋值 for(temp=19;temp9;temp-) /倒计时 a=a-1; PA=0x69; /东西绿灯亮 show(a); delays(); a=0x0a; for(temp=9;temp0;temp-) a=a-1; PA=0x69; show(a); delays(); for(t=5;t0;t-) /绿灯闪烁5s a=0; /当计时值为0时闪烁 show(a); PA=0xeb; /东西绿灯灭 dela

6、y(); /延时0.5s PA=0x69; /东西绿灯亮 delay(); /延时0.5s a=0x26; for(temp=25;temp19;temp-) /绿灯倒计时25s a=a-1; PA=0x96; /南北绿灯亮 show(a); delays(); a=0x1a; for(temp=19;temp9;temp-) a=a-1; PA=0x96; show(a); delays(); a=0x0a; for(temp=9;temp0;temp-) a=a-1; PA=0x96; show(a); delays(); for(t=5;t0;t-) /绿灯闪烁5s a=0; /当计时值

7、为0时闪烁 show(a); PA=0xbe; /南北绿灯灭 delay(); /延时0.5s PA=0x96; /南北绿灯亮 delay(); /延时0.5s void show(uint a) /显示子程序 SCON=0x00; /工作模式0 SBUF=a; /将变量a的值送给缓存寄存器 while(!TI) /等待发送是否完成 TI=0; /中断标志位清零实验 4.7:7279 键盘扫描及动态 LED 显示实验#include /* 函数定义 *#include #define uchar unsigned char#define uint unsigned int#define RES

8、ET 0xa4 / 复位指令#define RL 0xa1 /左移指令#define DECODE1 0xc8 /译码方式1#define READ 0x15 /读键盘指令void delay1(void); / 长延时void delay2(void);void write7279(uchar, uchar); / 写入到7279uchar read7279(uchar); / 从7279读出void send_byte(uchar); / 发送一个字节uchar receive_byte(void); / 接收一个字节uchar keyma=0x1b,0x13,0x0b,0x03,0x1a

9、,0x12,0x0a,0x02,0x19,0x11,0x09,0x01,0x18,0x10,0x08,0x00;/* 变量及I/O口定义 *sbit cs=P10; / cs 连接于 P1.0sbit clk=P11; / clk 连接于 P1.1sbit dio=P12; / dio 连接于 P1.2sbit key=P13; / key 连接于 P1.3void main() uchar anjian,i,num; send_byte(0xa4); /全部复位指令 while(1) if(key=0) /如果按键按下 send_byte(0x15); /读键盘指令 anjian=recei

10、ve_byte(); /接收键盘数据 for(i=0;i16;i+) if(anjian=keymai) num=i; break; send_byte(0xa1); write7279(0xc8,num);while(key=0); void write7279(uchar cmd, uchar num) send_byte (cmd); send_byte (num); uchar read7279(uchar command) send_byte(command); return(receive_byte();void send_byte( unsigned char out_byte)

11、 unsigned char i; cs=0; /芯片使能 delay1(); for (i=0;i8;i+) /分8次移入数据 if (out_byte&0x80)/先传高位 dio=1; else dio=0; clk=1; delay2(); clk=0; delay2(); out_byte=out_byte*2;/数据左移 dio=0;uchar receive_byte(void) uchar i, in_byte; dio=1; /设置传输口打开 delay1(); for (i=0;i8;i+)/分8次读入数据高位在前 clk=1; delay2(); in_byte=in_byte*2; /数据左移 if (dio) in_byte=in_byte|0x01; clk=0; delay2(); dio=0; return (in_byte);void delay1(void) uchar i; for (i=0;i0x30;i+);void delay2(void) uchar i; for (i=0;i8;i+);

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

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