试验报告 精品.docx
- 文档编号:8407822
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:31
- 大小:26.22KB
试验报告 精品.docx
《试验报告 精品.docx》由会员分享,可在线阅读,更多相关《试验报告 精品.docx(31页珍藏版)》请在冰豆网上搜索。
试验报告精品
专业:
电科101
姓名:
李静
试验一LED闪烁的简单试验
试验目的:
1、了解单片机C程序的基本结构
2、了解单片机C程序的设计和调试方法
3、掌握顺序控制程序的简单编程
实验原理:
p2口的八个端口分别对应控制8个LED灯,当对应端口为低电平时,灯亮;否则灯灭。
试验程序:
#include
voiddelay(unsignedinti);//声明延时函数
main()
{
P2=0x00;//置P0口为低电平点亮P2口8个LED灯
delay(600);//调用延时程序等待一段时间后熄灭
P2=0xff;//置P0口为高电平熄灭P2口8个LED灯
delay(600);//调用延时程序
}
/*******延时函数*************/
voiddelay(unsignedinti)
{
unsignedcharj;
for(i;i>0;i--)//循环600*255次机器在这里执行需要一段时间也就达到了延时效果
for(j=255;j>0;j--);
}
试验二按键控制LED灯的亮灭
试验目的:
1实现按键对LED的控制,及实现不同的功能,让按键更加多功能,熟练掌握按键功能。
2掌握顺序控制程序的简单编程
试验原理:
按键则点亮LED灯,8路指示灯接p0口。
通过控制按键来控制LED灯的亮灭,按下按键灯亮,反之灯灭。
试验程序:
#include
sbitLED=P2^0;//定义LED在P2.0脚上
sbitK1=P0^0;//定义按钮在P0.0脚上
main()
{
if(!
K1)LED=0;//当按键按下对应单片机脚变低电平LED变低灯亮
elseLED=1;//当松开键按对应单片机脚变高电平LED变高灯灭
}
试验报告三按键控制程序
试验目的:
按键控制程序
试验原理:
P2与JP1(LED灯)连接,P0与JP5(按键接口)连接
开始点亮P1LED,按P01LED向右移一位,按P00LED向左移一位,连续
按动按钮LED会不停的左移或右移
试验程序:
#include
#include
unsignedcharscan_key();
voidproc_key(unsignedcharkey_v);
voiddelayms(unsignedcharms);
sbitK1=P0^0;//对应按钮K1
sbitK2=P0^1;//对应按钮K2
main()
{
unsignedcharkey_s,key_v;
key_v=0x03;
P2=0xfe;
while
(1)
{
key_s=scan_key();
if(key_s!
=key_v)
{
delayms(10);
key_s=scan_key();
if(key_s!
=key_v)
{
key_v=key_s;
proc_key(key_v);
}
}
}
}
unsignedcharscan_key()
{
unsignedcharkey_s;
key_s=0x00;
key_s|=K2;
key_s<<=1;
key_s|=K1;
returnkey_s;
}
voidproc_key(unsignedcharkey_v)
{
if((key_v&0x01)==0)
{
P2=_cror_(P2,1);
}
elseif((key_v&0x02)==0)
{
P2=_crol_(P2,1);
}
}
voiddelayms(unsignedcharms)//延时子程序
{
unsignedchari;
while(ms--)
{
for(i=0;i<120;i++);
}
试验报告四蜂鸣器简单发声
试验目的:
1、学习8031内部端口的使用和编程方法。
2、进一步掌握顺序处理程序的编程方法。
试验原理:
p1.5接峰鸣器,按键接p0.0脚,利用按键控制峰鸣器发声。
按下按键时,蜂鸣器发出声音。
试验程序:
#include
sbitBEEP=P1^5;//定义蜂鸣器接、在P1.5脚上
sbitK1=P0^0;//定义按钮在P0.0脚上
main()
{
if(!
K1)BEEP=0;//当按键按下对应单片机脚变低电平BEEP发声
elseBEEP=1;//当松开键按对应单片机脚变高电平BEE
试验报告五继电器实验
试验目的:
1学习8031内部继电器的使用方法。
2学习驱动芯片处理程序的编程方法。
试验原理:
JP11(P2)与JP5(按钮接口),按下P2.7继电器P1.4动作,通过74HC14控制ULN2003驱动芯片驱动继电器
*
试验程序:
#include
sbitRELAY=P1^4;//定义继电器对应单片机管脚
sbitK1=P2^7;//定义按钮对应单片机管脚
main()
{
if(!
K1)RELAY=0;//按钮按下开启继电器
elseRELAY=1;//按钮松开关闭继电器
试验报告六138译码器
试验目的:
1.了解138译码器工作原理
2.学会用C语言对138译码器简单的编程控制
试验原理:
利用译码器输入端A在P2.2管脚上,输入端B接P2.3,输入端C接P2.4,来控制LED灯的亮灭
试验程序:
#include
sbitHC138A=P2^2;//定义译码器输入端A在P2.2管脚上
sbitHC138B=P2^3;//定义译码器输入端B在P2.3管脚上
sbitHC138C=P2^4;//定义译码器输入端C在P2.4管脚上
voiddelay(unsignedinti)
{
unsignedcharj;
for(i;i>0;i--)
for(j=255;j>0;j--);
}
main()
{
//点亮第一个LED灯
HC138C=0;HC138B=0;HC138A=0;
delay(1500);//延时
//点亮第二个LED灯
HC138C=0;HC138B=0;HC138A=1;
delay(1500);//延时
//点亮第三个LED灯
HC138C=0;HC138B=1;HC138A=0;
delay(1500);
//点亮第四个LED灯
HC138C=0;HC138B=1;HC138A=1;
delay(2000);
//点亮第五个LED灯
HC138C=1;HC138B=0;HC138A=0;
delay(1500);
//点亮第六个LED灯
HC138C=1;HC138B=0;HC138A=1;
delay(1500);
HC138C=1;HC138B=1;HC138A=0;
delay(1500);
HC138C=1;HC138B=1;HC138A=1;
delay(1500);
}
试验报告七
试验目的:
用单片机脚直接控制数码管
试验原理:
P0与JP3用8PIN排线连接,
试验程序:
#include
#include
#defineNOP()_nop_()/*定义空指令*/
voiddelay(unsignedinti);//函数声名
//此表为LED的字模
unsignedcharcodeLED7Code[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};
main()
{
unsignedintLedNumVal=1,C;//定义变量
while
(1)
{
if(++C>=300)
{LedNumVal++;//每隔300个扫描周期加一次
C=0;//每隔300个扫描清零
}
//将字模送到P0口显示
P0=LED7Code[LedNumVal%10]&0x7f;//LED70x7f为小数点共阴和共阳此处也是不一样;
delay(150);//调用延时程序
}
}
试验报告八试验数码管上显示数字
试验目的:
1单片机直接实现位选共阴极
2掌握数码管的位选,段选。
试验原理:
利用单片机的端口直接控制数码管,实现数字显示
试验程序:
#include
#include
voiddelay(unsignedinti);//函数声名
charDelayCNT;//定义变量
//此表为LED的字模,共阴数码管0-9-
unsignedcharcodeDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//段码控制
//此表为8个数码管位选控制,共阴数码管1-8个-
unsignedcharcodedispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//位选控制查表的方法控制
/************主函数**********************/
main()
{
unsignedinti,LedNumVal=1;//变量定义
unsignedintLedOut[10];//变量定义
DelayCNT=0;
while
(1)
{
if(++DelayCNT>=20)//控制数字变化速度
{
DelayCNT=0;//20个扫描周期清零一次
++LedNumVal;//每隔20个扫描周期加一次
}
LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;
LedOut[2]=Disp_Tab[LedNumVal%100/10];
LedOut[3]=Disp_Tab[LedNumVal%10];
LedOut[4]=Disp_Tab[LedNumVal%10000/1000];//千位
LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80;//百位带小数点
LedOut[6]=Disp_Tab[LedNumVal%100/10];//十位
LedOut[7]=Disp_Tab[LedNumVal%10];//个位
for(i=0;i<9;i++)
{
P0=LedOut[i];
P1=dispbit[i];//使用查表法进行位选
/*switch(i)//使用switch语句控制位选
{
case0:
P1=0x7F;break;
case1:
P1=0xbF;break;
case2:
P1=0xdF;break;
case3:
P1=0xeF;break;
case4:
P1=0xf7;break;
case5:
P1=0xfb;break;
case6:
P1=0xfd;break;
case7:
P1=0xfe;break;
}*/
delay(150);//扫描间隔时间太长会数码管会有闪烁感
}
}
}
voiddelay(unsignedinti)
{
charj;
for(i;i>0;i--)
for(j=200;j>0;j--);
}
试验报告九试验数码管上显示数字
试验目的:
培养运用单片机进行综合控制的能力和技巧
试验原理:
译码器位选共阴极,P0与J12用8PIN排线连接
试验程序:
#include
#include
sbitLS138A=P2^2;//定义138译码器的输入A脚由P2.2控制
sbitLS138B=P2^3;//定义138译码器的输入脚B由P2.3控制
sbitLS138C=P2^4;//定义138译码器的输入脚C由P2.4控制
voiddelay(unsignedinti);//函数声名
charDelayCNT;
//此表为LED的字模,共阴数码管0-9-
unsignedcharcodeDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
/************主函数**********************/
main()
{
unsignedinti,LedNumVal=1;
unsignedintLedOut[10];
DelayCNT=0;
while
(1)//进入循环状态
{
if(++DelayCNT>=50)
{
DelayCNT=0;//延时计数每扫描一次加一次
++LedNumVal;//每隔50个扫描周期加一次
}
LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;
LedOut[2]=Disp_Tab[LedNumVal%100/10];
LedOut[3]=Disp_Tab[LedNumVal%10];
LedOut[4]=Disp_Tab[LedNumVal%10000/1000];//千位
LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80;//百位带小数点
LedOut[6]=Disp_Tab[LedNumVal%100/10];//十位
LedOut[7]=Disp_Tab[LedNumVal%10];//个位
for(i=0;i<9;i++)//实现8位动态扫描循环
{
P0=LedOut[i];//将字模送到P0口显示
switch(i)//使用switch语句控制位选也可以是用查表的方式学员可以试着自己修改
{
case0:
LS138A=0;LS138B=0;LS138C=0;break;
case1:
LS138A=1;LS138B=0;LS138C=0;break;
case2:
LS138A=0;LS138B=1;LS138C=0;break;
case3:
LS138A=1;LS138B=1;LS138C=0;break;
case4:
LS138A=0;LS138B=0;LS138C=1;break;
case5:
LS138A=1;LS138B=0;LS138C=1;break;
case6:
LS138A=0;LS138B=1;LS138C=1;break;
case7:
LS138A=1;LS138B=1;LS138C=1;break;
}
delay(150);
}
}
}
试验报告十试验数码管显示时钟
试验目的:
1通过本例程了解DS1302时钟芯片的基本原理和使用,2驱动程序的编写以及实现数字字符在数码管中的显示。
3懂DS1302在C语言中的操作
实验原理:
DS1302时钟芯片的基本原理和使用,驱动程序的编写以及实现数字字符在数码管中的显示。
JP1302跳线冒要短接。
*
实验程序:
#include
#include
sbitSCK=P3^6;//时钟
sbitSDA=P3^4;//数据
sbitRST=P3^5;//DS1302复位
sbitLS138A=P2^2;
sbitLS138B=P2^3;
sbitLS138C=P2^4;
bitReadRTC_Flag;//定义读DS1302标志
unsignedcharl_tmpdate[7]={0,0,12,15,5,3,8};//秒分时日月周年08-05-1512:
00:
00
unsignedcharl_tmpdisplay[8];
codeunsignedcharwrite_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//秒分时日月周年最低位读写位
codeunsignedcharread_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
codeunsignedchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
//共阴数码管0-9'-''熄灭‘表
voidWrite_Ds1302_byte(unsignedchartemp);
voidWrite_Ds1302(unsignedcharaddress,unsignedchardat);
unsignedcharRead_Ds1302(unsignedcharaddress);
voidRead_RTC(void);//readRTC
voidSet_RTC(void);//setRTC
voidInitTIMER0(void);//initaltimer0
voidmain(void)
{
InitTIMER0();//初始化定时器0
Set_RTC();//写入时钟值,如果使用备用电池时候,不需要没每次上电写入,此程序应该屏蔽
while
(1)
{
if(ReadRTC_Flag)
{
ReadRTC_Flag=0;
Read_RTC();
l_tmpdisplay[0]=l_tmpdate[2]/16;//数据的转换,因我们采用数码管0~9的显示,将数据分开
l_tmpdisplay[1]=l_tmpdate[2]&0x0f;
l_tmpdisplay[2]=10;//加入"-"
l_tmpdisplay[3]=l_tmpdate[1]/16;
l_tmpdisplay[4]=l_tmpdate[1]&0x0f;
l_tmpdisplay[5]=10;
l_tmpdisplay[6]=l_tmpdate[0]/16;
l_tmpdisplay[7]=l_tmpdate[0]&0x0f;
}
}
}
voidInitTIMER0(void)
{
TMOD|=0x01;//定时器设置16位
TH0=0xef;//初始化值
TL0=0xf0;
ET0=1;
TR0=1;
EA=1;
}
voidWrite_Ds1302_Byte(unsignedchartemp)
{
unsignedchari;
for(i=0;i<8;i++)//循环8次写入数据
{
SCK=0;
SDA=temp&0x01;//每次传输低字节
temp>>=1;//右移一位
SCK=1;
}
}
voidWrite_Ds1302(unsignedcharaddress,unsignedchardat)
{
RST=0;
_nop_();
SCK=0;
_nop_();
RST=1;
_nop_();//启动
Write_Ds1302_Byte(address);//发送地址
Write_Ds1302_Byte(dat);//发送数据
RST=0;//恢复
}
/******************************************************************/
/*读出DS1302数据*/
/******************************************************************/
unsignedcharRead_Ds1302(unsignedcharaddress)
{
unsignedchari,temp=0x00;
RST=0;
_nop_();
_nop_();
SCK=0;
_nop_();
_nop_();
RST=1;
_nop_();
_nop_();
Write_Ds1302_Byte(address);
for(i=0;i<8;i++)//循环8次读取数据
{
if(SDA)
temp|=0x80;//每次传输低字节
SCK=0;
temp>>=1;//右移一位
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 试验报告 精品