试验报告.docx

上传人:b****7 文档编号:8970544 上传时间:2023-02-02 格式:DOCX 页数:37 大小:60.37KB
下载 相关 举报
试验报告.docx_第1页
第1页 / 共37页
试验报告.docx_第2页
第2页 / 共37页
试验报告.docx_第3页
第3页 / 共37页
试验报告.docx_第4页
第4页 / 共37页
试验报告.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

试验报告.docx

《试验报告.docx》由会员分享,可在线阅读,更多相关《试验报告.docx(37页珍藏版)》请在冰豆网上搜索。

试验报告.docx

试验报告

试验报告

 

 

专业:

电科101

姓名:

李静

 

试验一LED闪烁的简单试验

试验目的:

1、了解单片机C程序的基本结构

2、了解单片机C程序的设计和调试方法

3、掌握顺序控制程序的简单编程

实验原理:

p2口的八个端口分别对应控制8个LED灯,当对应端口为低电平时,灯亮;否则灯灭。

试验程序:

#include//此文件中定义了51的一些特殊功能寄存器

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//51的端口和各特殊寄存器定义在此文件中此包含比不可少

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//51的端口和各特殊寄存器定义在此文件中此包含比不可少

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//51的端口和各特殊寄存器定义在此文件中

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>>

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

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

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