电子技术应用基础.docx
- 文档编号:24712180
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:31
- 大小:85.36KB
电子技术应用基础.docx
《电子技术应用基础.docx》由会员分享,可在线阅读,更多相关《电子技术应用基础.docx(31页珍藏版)》请在冰豆网上搜索。
电子技术应用基础
实验1
1.实验功能
点亮的LEDd3d5从右边往左边移动1位,到达左边再往右边移动2位,依此循环。
复位之后,LED灯从D3,D5开始点亮后,依上循环。
2.实验程序
/******************************************************************************
*实验名:
流水灯实验
*使用的IO:
P2
*实验效果:
点亮的LEDd3d5从右边往左边移动1位,到达左边再往右边移动2位,依此循环。
*****************************************************************************/
#include
#include
#defineGPIO_LEDP2//将P2口另外取名为GPIO_LED
voidDelay10ms(unsignedint);//误差0us
/******************************************************************************
*函数名:
main
*函数功能:
主函数
*****************************************************************************/
voidmain(void)
{
unsignedcharn;
GPIO_LED=0xfc;//1111_1100
Delay10ms(50);
while
(1)
{
for(n=0;n<6;n++)//左移7次,这样子就会到达最左边
{
GPIO_LED=_crol_(GPIO_LED,1);//将GPIO_LED左移一位
Delay10ms(50);//延时
}
for(n=0;n<3;n++)//右移4次,这样子就会到达最右边
{
GPIO_LED=_cror_(GPIO_LED,2);//将GPIO_LED右移一位
Delay10ms(50);//延时
}
}
}
/*****************************************************************************
*函数名:
Delay10ms
*函数功能:
延时函数,延时10ms
*****************************************************************************/
voidDelay10ms(unsignedintc)//误差0us
{
unsignedchara,b;
for(;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
3.实验步骤
1)编写程序完成后,开始进行下载测试
2)观察实验情况是否符合功能描述
3)复位后,观察LED是否从D3,D4开始点亮
4.实验结果
5.实验总结
本次实验中比较重要的知识点是:
复位时,如何让LED灯从D3,D5开始点亮?
分析程序可知,我们需要在语句GPIO_LED=0xfc//1111_1100后加上语句Delay10ms(50),如此,可以为第一个状态和第二个状态间预留缓冲时间,从用户的角度来看,实现了让LED灯从D3,D5开始点亮。
实验2
1.功能描述
按下K1键,LED灯从右至左依次循环1个单位,按下K3键,LED循环左移两位。
其他情况,LED处于灭的状态。
2.程序清单
/**************************************************************************
*writer:
张雪
*日期:
2014年七七事变纪念日
*实验名:
独立按键实验
*使用的IO:
LED使用P2,键盘使用P3.1、P3.2
*实验效果:
按下K1键,LED灯从右至左依次循环1个单位,按下K3键,LED循环左移两位。
*注意:
由于P3.2口跟红外线共用,所以做按键实验时为了不让红外线影响实验效果,最好把红外线先取下来。
**************************************************************************/
#include
#include
#defineGPIO_LEDP2
sbitK1=P3^1;//K1对应于P3^1;K2对应于P3^0
sbitK3=P3^2
voidDelay10ms();//延时10ms,时间已更改,并非10ms
/**************************************************************************
*函数名:
main
*函数功能:
主函数
**************************************************************************/
voidmain(void)
{
unsignedcharn;
while
(1)
{
GPIO_LED=0xff;
Delay10ms();
if(K1==0)//检测按键K1是否按下
{
Delay10ms();//消除抖动
if(K1==0)//再次检测按键是否按下
{
GPIO_LED=0xfe;//初始将D3置为低电平“0”,LED点亮
Delay10ms();//保证循环执行时从初始位置起
for(n=0;n<7;n++)//左移7次,这样子就会到达最左边
{
GPIO_LED=_crol_(GPIO_LED,1);//将GPIO_LED左移一位
Delay10ms();//延时
}
}
}
if(K3==0)//检测按键K3是否按下
{
Delay10ms();
if(K3==0)
{
GPIO_LED=0x3f;//将LED灯的高两位置为“0”,呈点亮态
Delay10ms();
for(n=0;n<3;n++)//右移3次
{
GPIO_LED=_cror_(GPIO_LED,2);//每次间隔为2
Delay10ms();//延时
}
}
}
}
}
/*************************************************************************
*函数名:
Delay10ms
*函数功能:
延时函数,延时10ms
**************************************************************************/
voidDelay10ms(void)//误差0us
{
unsignedchara,b,c;
for(c=25;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
3.实验步骤
1)编写程序完成后,开始进行下载测试。
2)观察实验情况是否符合功能描述。
3)按下K1键不松手,观察LED灯是否从右至左依次循环1个单位。
4)按下K3键不松手,观察LED灯是否循环左移两位。
观察其他情况下,LED是否处于灭的状态。
四.实验结果
五.实验总结
刚开始我用的是K1对应于P3^0,K2对应于P3^2。
结果发现不对,按下K1不松手时,没有反应,按下K2不松手时执行的是程序中K1所对应的功能,由此可见,至少对于我用的这块板子来说,K1应对应于P3^1,K2应对应于P3^0。
实验3
1.功能描述
对于P2^i,对于i,实现奇数亮,偶数灭;偶数亮,奇数灭循环执行的功能。
二.程序清单
#include
sbitLED3=P2^0;//d3
sbitLED5=P2^1;//d5
sbitLED7=P2^2;//d7
sbitLED9=P2^3;//d9
sbitLED11=P2^4;//d11
sbitLED13=P2^5;//d13
sbitLED15=P2^6;//d15
sbitLED16=P2^7;//d16
voidDelay(unsignedinta);
voidmain()
{
while
(1)
{
LED3=1;
LED5=0;
LED7=1;
LED9=0;
LED11=1;
LED13=0;
LED15=1;
LED16=0;
Delay(5000);
LED3=0;
LED5=1;
LED7=0;
LED9=1;
LED11=0;
LED13=1;
LED15=0;
LED16=1;
Delay(5000);
}
}
voidDelay(unsignedinta)//0~65535
{
unsignedcharb;
for(;a>0;a--)
{
for(b=110;b>0;b--);
}
}
3.实验步骤
1)编写程序完成后,开始进行下载测试
2)观察实验情况是否符合功能描述
四.实验结果
五.实验总结
学会并掌握了sbit的用法。
实验4
1.功能描述
实现LED灯的高四位和低四位循环亮,其中高四位看成一个整体,第四位看成一个整体。
2.程序清单
#include
sbitLED3=P2^0;//d3
sbitLED5=P2^1;//d5
sbitLED7=P2^2;//d7
sbitLED9=P2^3;//d9
sbitLED11=P2^4;//d11
sbitLED13=P2^5;//d13
sbitLED15=P2^6;//d15
sbitLED16=P2^7;//d16
voidDelay(unsignedinta);
voidmain()
{
while
(1)
{
LED16=1;
LED3=0;
LED5=0;
LED7=0;
LED9=0;
LED11=1;
LED13=1;
LED15=1;
Delay(5000);
LED3=1;
LED5=1;
LED7=1;
LED9=1;
LED11=0;
LED13=0;
LED15=0;
LED16=0;
Delay(5000);
}
}
voidDelay(unsignedinta)//0~65535
{
unsignedcharb;
for(;a>0;a--)
{
for(b=110;b>0;b--);
}
}
3.实验步骤
1)编写程序完成后,开始进行下载测试
2)观察实验情况是否符合功能描述
四.实验结果
五.实验总结
较为简单,巩固了之前所学到的东西。
实验5
一.功能描述
二.程序清单
/*****************************************************************************
*实验名:
外部中断实验
*注意:
由于P3.2口跟红外线共用,所以做按键实验时为了不让红外线影响实验效果,最好把红外线先取下来。
*实验效果:
按一下K3键,中断相应指示灯亮,再按一下,相应的中断响应指示灯灭。
******************************************************************************/
#include
#include
#defineGPIO_LEDP2//外部中断的IO
sbitK3=P3^2;
voidIntConfiguration();
voidDelay(unsignedintn);
unsignedcharKeyValue=0;
unsignedintflag=0;
/*******************************************************************************
*函数名:
main
*函数功能:
主函数
*输入:
无
*输出:
无
******************************************************************************/
voidmain(void)
{
GPIO_LED=0Xfe;
IntConfiguration();
while
(1)
{if(flag==1)
flag++;
Delay(2000);
}
}
/*******************************************************************************
*函数名:
IntConfiguration()
*函数功能:
设置外部中断
*输入:
无
*输出:
无
******************************************************************************/
voidIntConfiguration()
{
//设置INT0
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//打开INT0的中断允许。
//设置INT1
IT1=1;
EX1=1;
EA=1;//打开总中断
}
/*******************************************************************************
*函数名:
Delay(unsignedintn)
*函数功能:
延时
*输入:
n
*输出:
无
*******************************************************************************/
voidDelay(unsignedintn)//延时50us误差0us
{
unsignedchara,b;
for(;n>0;n--)
{
for(b=1;b>0;b--)
for(a=22;a>0;a--);
}
}
/*******************************************************************************
*函数名:
Int0()interrupt0
*函数功能:
外部中断0的中断函数
******************************************************************************/
voidInt0()interrupt0//外部中断0的中断函数
{if(flag==0)
{GPIO_LED=0xfc;flag++;}
if(flag==2)
{GPIO_LED=0xfe;
flag=0;}
}
3.实验步骤
1)编写程序完成后,开始进行下载测试。
2)观察实验情况是否符合功能描述。
四.实验结果
五.实验总结
学习到了中断的使用方法以及如何利用标志位来区分同一个按键的不同中断响应。
起初,自己的想法是在中断函数里面运用循环语句,进行对于中断进行次数的判断,已让当中断为奇数次时,灯灭,偶数次时,灯亮。
后来,得知,CPU对于中断的相应要求具备快速性,一般不用较为耗时的语句,故而原来的想法不是太好。
而采用标志位来进行区分,则较为快速,语句也更简单。
实验六
1.功能描述
按一下K3键,中断相应指示灯亮,再按一下K4键,相应的中断响应指示灯灭。
二.程序清单
/*****************************************************************************
*实验名:
外部中断实验
*注意:
由于P3.2口跟红外线共用,所以做按键实验时为了不让红外线影响实验效果,最好把红外线先取下来。
*实验效果:
按一下K3键,中断相应指示灯亮,再按一下K4键,相应的中断响应指示灯灭。
******************************************************************************/
#include
#include
#defineGPIO_LEDP2//外部中断的IO
sbitK3=P3^2;
voidIntConfiguration();
voidDelay(unsignedintn);
/*******************************************************************************
*函数名:
main
*函数功能:
主函数
*输入:
无
*输出:
无
******************************************************************************/
voidmain(void)
{
GPIO_LED=0Xfe;
IntConfiguration();
while
(1)
{
Delay(2000);
}
}
/*******************************************************************************
*函数名:
IntConfiguration()
*函数功能:
设置外部中断
*输入:
无
*输出:
无
******************************************************************************/
voidIntConfiguration()
{
//设置INT0
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//打开INT0的中断允许。
//设置INT1
IT1=1;
EX1=1;
EA=1;//打开总中断
}
/*******************************************************************************
*函数名:
Delay(unsignedintn)
*函数功能:
延时
*输入:
n
*输出:
无
******************************************************************************/
voidDelay(unsignedintn)//延时50us误差0us
{
unsignedchara,b;
for(;n>0;n--)
{
for(b=1;b>0;b--)
for(a=22;a>0;a--);
}
}
voidInt0()interrupt0//外部中断0的中断函数
{
GPIO_LED=0xfc;
}
voidInt0()interrupt0//外部中断0的中断函数
{
GPIO_LED=0xfe;
}
3.实验步骤
1)编写程序完成后,开始进行下载测试。
2)观察实验情况是否符合功能描述。
3)按一下K3键,观察中断相应指示灯是否亮,再按一下K4键,观察相应的中断响应指示灯是否灭。
四.实验结果
五.实验总结
学习了对于中断的处理方法。
一开始,并不是太了解,还以为如果中断函数中没有关于按键的判断,就无法给CPU传送中断请求信号,后来,经老师讲解,才清楚原来硬件电路中已经规定按键对应于CPU的相应中断响应,加上对于开关是否按下的判断以及延时的语句是为了消除按键的抖动,避免CPU误以为是多次响应。
实验7
1.功能描述
按下K3键,数码管依次向左递减1显示,按下K4键,数码管依次向右递加1显示。
二.程序清单
/*******************************************************************************
*实验名:
静态数码管实验
*writer:
张雪,2014年7月8日
*使用的IO:
数码管使用P0,键盘使用P3.0、P3.1、P3.2、P3.3
*实验效果:
按下K3键,数码管依次向左递减1显示,按下K4键,数码管依次向右递加1显示。
*注意:
由于P3.2口跟红外线共用,所以做按键实验时为了不让红外线影响实验效果,最好把红外线先取下来。
*******************************************************************************/
#include
#include
#defineGPIO_DIGP0
sbitLSA=P2^2;
sbitLSB=P2^3;
sbitLSC=P2^4;
//sbitK1=P3^1;
//sbitK2=P3^0;
sbitK3=P3^2;
sbitK4=P3^3;
unsignedcharcodeDIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9的值
voidDelay10ms();//延时10ms
/***************************************************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子技术 应用 基础