微机原理与单片机接口技术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理与单片机接口技术
实验报告
专业班级:自动化12-08班
姓名:牛远征
学号:311208000516
指导教师:杨俊起
实验一流水灯实验一、实验目的
(1)简单I/O引脚的输出
(2)掌握软件延时编程方法
(3)简单按键输入捕获判断
二、实验实现的功能
(1)开机是点亮12发光二极管,闪烁三下
(2)按照顺时针循环依次点亮发光二极管
(3)通过按键将发光二极管的显示改为顺逆时针方式三、系统硬件设计
四、系统软件设计
******************************主程序******************************** #include
#include
#include
sbit Led1=P3^2;
sbit Led2=P3^3;
sbit Led3=P3^4;
sbit Led4=P3^5;
//函数说明
void shun(); //led顺时针亮
void ni(); //led逆时针亮
void shanshuo(); //闪烁
//主函数
void main (void)
{
for(i=0;i<=2;i++)
{
shanshuo();
Delay(1000);
}
while(1)
{
keyboard();
if(ptr==0) shun();
else if(ptr==1)
ni();
else if(ptr==2)
shun();
}
}
void ni()
{
P2=0xff;
Led4=0;
Delay(500);
Led4=1;
Led3=0;
Delay(500);
Led3=1;
Led2=0;
Delay(500);
Led2=1;
Led1=0;
Delay(500);
Led1=1;
P2=0xfe;
Led1=1;Led2=1;Led3=1;Led4=1;
for(i=0;i<8;i++)
{
P2=_cror_(P2,1); //P2 的值向右循环移动
Delay(500);
}
}
void shun()
{
P2=0xfe;
Delay(500);
Led1=1;Led2=1;Led3=1;Led4=1;
for(i=0;i<7;i++)
{
P2=_crol_(P2,1); // P2 的值向左循环移动Delay(500);
}
P2=0xff;
Led1=0;
Delay(500);
Led1=1;
Led2=0;
Delay(500);Led2=1;
Led3=0;
Delay(500);Led3=1;
Led4=0;
Delay(500);
}
void shanshuo()
{
P2=0x00;
Led1=0;Led2=0;Led3=0;Led4=0;
Delay(1000);
P2=0xff;
Led1=1;Led2=1;Led3=1;Led4=1;
Delay(1000);
}
******************************子程序******************************** #ifndef _key_H_
#define _key_H_
unsigned char i;
unsigned int ptr=0;
sbit H1=P3^6;
sbit H2=P3^7;
sbit L1=P0^5;
sbit L2=P0^6;
sbit L3=P0^7;
bit KEY1,KEY2,KEY3,KEY4,KEY5,KEY6;
void Delay(unsigned int t)
{
unsigned int x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
void keyboard(void)
{
L1=0;L2=1;L3=1;
if(H1==0) Delay(30); //延时消抖
if(H1==0){while(H1==0); {KEY1=1;ptr=1;}}
else KEY1=0;
if(H2==0) Delay(30);
if(H2==0){while(H2==0);{ KEY4=1;ptr=4;}}
else KEY4=0;
L1=1;L2=0;L3=1;
if(H1==0) Delay(30);
if(H1==0){while(H1==0);{ KEY2=1;ptr=2;}}
else KEY2=0;
if(H2==0) Delay(30);
if(H2==0){while(H2==0);{KEY5=1;ptr=5;}}
else KEY5=0;
L1=1;L2=1;L3=0;
if(H1==0) Delay(30);
if(H1==0){while(H1==0);{KEY3=1;ptr=3;}}
else KEY3=0;
if(H2==0) Delay(30);
if(H2==0){KEY6=1;ptr=6;}
else KEY6=0;
}
#endif
五、实验过程中遇到的问题及解决方法
1、遇到的问题就是如何扫描按键。
解决这个问题的方法是利用软件扫描按键1和2,初始化ptr=0,按键1按下后返回1,按键2按下后返回2,没有按键按下则返回0。
指导老师签字:
日期: