山东大学单片机硬件实验.docx
- 文档编号:1676893
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:16
- 大小:198.47KB
山东大学单片机硬件实验.docx
《山东大学单片机硬件实验.docx》由会员分享,可在线阅读,更多相关《山东大学单片机硬件实验.docx(16页珍藏版)》请在冰豆网上搜索。
山东大学单片机硬件实验
《单片机原理与应用》
实验文档存放目录:
一、实验题目:
实验1:
按键声光报警实验
实验5:
8255并行I/O扩展及交通信号灯控制实验
实验7:
7279 键盘扫描及动态LED显示实验
二、实验要求
实验1:
本实验联系静态按键识别,发光二极管驱动,要求利用外部硬件中断,按键按下一次产生一次外部中断,在中断服务程序中计数器加1,同时,通过发光二极管的闪烁和蜂鸣器响的次数,指示计数器的当前值。
当计数到10时,再次按键将重新从1开始计。
实验2:
本实验利用 8255实现可编程的并行 IO扩展功能,并利用其完成交通灯控制。
实验要求红灯常亮 30S,绿灯常亮 25S后闪烁 5S。
使用静态数码管显示绿灯常亮倒计时。
本实验中的东西方向信号灯同步控制,南北方向信号灯同步控制,即:
东西方向上同种颜色的灯同时亮或灭,南北方向上同种颜色的灯同时亮或灭。
实验3:
本实验利用7279进行键盘扫描及动态LED 数码管显示控制。
当按下某个按键时所按按键对应的字符显示在最右端LED数码管上,如果再次按下一个按键’2’,则原来显示的内容往左移1位,将新按下的按键’2’,的字符显示在最右端,依次类推显示0~F。
三、实验过程及结果记录(截图)
实验1
实验2
实验3
四、实验源程序
实验1
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitbell=P3^1; //P3.1口位赋值给铃声
sbit led=P3^0; //P3.0口位赋值给灯
sbitkey0=P3^2; //P3.2口位赋值给按键
uint count;
voiddelay(uint count) //延时1ms
ﻩ{
uint x,y;
ﻩfor(x=count;x>0;x--)
for(y=110;y>0;y--);
}
voidshow(uintcount)
{uint i;
for(i=0;i<=count;i++)
{
led=0;bell=0; //灯亮,铃响
delay(500); //延时0.5s
led=1;bell=1; //灯灭,铃不响
delay(500);
}
}
voids_timer0() interrupt0using0
{
EA=0; //屏蔽所有中断请求
ﻩshow(count); //调用子程序
count++;
ﻩdelay(50);
if(count>=10)
ﻩcount=0;
EA=1; //开放中断
}
/**************************主程序**********************************/
void main()
{EA=1; //开放中断
EX0=1; //允许外部中断0中断
IT0=0; //外部中断0为电平触发方式
ﻩwhile
(1); //循环执行
}
实验2
#include<reg51.h>
#include<stdio.h>
#include<absacc.h>
#defineucharunsigned char
#defineuint unsignedint
#definePAﻩXBYTE[0x7FFC]//CS--A15
#define COMﻩXBYTE[0x7FFF]
sbitP30=P3^0;
sbit P31=P3^1;
uinttemp,shi,ge,t;
uchara;
void xianshi(uinttemp);
void delay();
voiddelays();
voidinit_8255();
voidinit_8255()
{
ﻩCOM=0x80;ﻩ // c= out,a = out,b= out
}
voiddelay() //延时500MS子程序
{
uinti,j;
for(i=500;i>0;i--)
for(j=120;j>0;j--);
}
voiddelays() //延时1S子程序
{
uinti,j;
for(i=1000;i>0;i--)
for(j=120;j>0;j--);
}
/***************************主程序*****************************/
voidmain()
{
init_8255();
TMOD=0x01; //设定工作模式1
EA=1; //开放中断
ET0=1; //允许T0中断
TF0=0; //定时器0溢出标志位
while
(1)
{
a=0x26; //变量a赋初值
for(temp=25;temp>19;temp--) //绿灯倒计时25s
{
a=a-1;
PA=0x69; //东西绿灯亮
xianshi(a); //调用数码管显示子程序
ﻩdelays(); //延时1s
}
a=0x1a; //变量a赋值
for(temp=19;temp>9;temp--)//倒计时
{
a=a-1;
PA=0x69; //东西绿灯亮
xianshi(a);
ﻩdelays();
}
a=0x0a;
for(temp=9;temp>0;temp--)
{
a=a-1;
PA=0x69;
xianshi(a);
delays();
}
for(t=5;t>0;t--) //绿灯闪烁5s
{
a=0; //当计时值为0时闪烁
ﻩxianshi(a);
PA=0xeb; //东西绿灯灭
delay(); //延时0.5s
PA=0x69; //东西绿灯亮
delay(); //延时0.5s
}
a=0x26;
for(temp=25;temp>19;temp--) //绿灯倒计时25s
{
a=a-1;
PA=0x96; //南北绿灯亮
xianshi(a);
delays();
}
a=0x1a;
for(temp=19;temp>9;temp--)
{
a=a-1;
PA=0x96;
xianshi(a);
ﻩdelays();
}
a=0x0a;
for(temp=9;temp>0;temp--)
{
a=a-1;
PA=0x96;
xianshi(a);
delays();
}
for(t=5;t>0;t--) //绿灯闪烁5s
{
a=0; //当计时值为0时闪烁
xianshi(a);
PA=0xbe; //南北绿灯灭
delay(); //延时0.5s
PA=0x96; //南北绿灯亮
delay(); //延时0.5s
}
}
}
void xianshi(uinta) //显示子程序
{
SCON=0x00; //工作模式0
SBUF=a; //将变量a的值送给缓存寄存器
while(!
TI) //等待发送是否完成
TI=0; //中断标志位清零
}
实验3
#include<reg51.h>
#include
sbitCS=P1^0;//cs atP1.0
sbitCLK=P1^1; // clk连接于 P1.1
sbitDATA=P1^2; // dat连接于P1.2
sbitKEY=P1^3; //key 连接于P1.3
//********************HD7279A 指令******************/
#defineRESET0xa4 // 复位指令
#defineRL 0xa1 //左移指令
#defineDECODE10xc8 //译码方式1
#defineREAD0x15 //读键盘指令
/*********************长延时子程序******************/
voidldelay() //25us
{
unsignedchara,b;
for(b=1;b>0;b--)
for(a=20;a>0;a--);
}
/***************短延时子程序****************/
voidsdelay()
{
unsignedchara;
for(a=3;a>0;a--);
}
voidsend(unsigned charout) //发送一个字节
{
unsignedchari;
CS=0; //芯片使能
ﻩldelay(); //长延时
for(i=0;i<8;i++) //分8次移入数据
{
ﻩif(out&0x80) //先传高位
ﻩﻩDATA=1;
elseDATA=0;
ﻩCLK=1;
sdelay();
ﻩCLK=0;
ﻩsdelay();
ﻩﻩout=out<<1; //数据左移
}
DATA=0;
}
void write(unsigned charcommand,unsignedchardat)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 山东大学 单片机 硬件 实验