单片机实验报告_第1页
单片机实验报告_第2页
单片机实验报告_第3页
单片机实验报告_第4页
单片机实验报告_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单 片 机 实 验 报 告姓名:钟林春班级:0801205学号:2012212963任课教师:张开碧上课地点:S411实验一流水灯实验一、实验目的及要求1、闪烁的LED;2、从左到右的流水灯;3、8只LED左右来回点亮;4、LED模拟交通灯。要求1: LED按设定的时间间隔闪烁要求2:接在P0 口的8个LED从左到右循环依次点亮,产生走马灯效果要求3:程序利用循环移位函数 _crol_和_cror_形成来回滚动的效果;二、实验原理rarapapoPTaptipn血FZF3.3WH1 P2JW2 P? W ? l2 t&TAI !F2 POtlUFiMD Pl IHXD PS JJIHTD P3

2、 则IWIP3(UT1电路图2、金WLISCWL3EIWHRUMK acjwrFZIAA誥hOFl 1 吋PSW门WmH 的HPH.Trfi pjjmlxrPl WTI2n MtPLfl円相nfln.r土亠士土丄三、源程序要求1:#in clude#defi ne uchar un sig ned char#defi ne uint un sig ned int sbit LED=P1A0;/延时void DelayMS(ui nt x)uchar i;while(x-) for(i=0;i120;i+);/主程序void mai n()while(1)LED=LED; DelayMS(150

3、);要求2:#in clude _cror_(PO,y)#i nclude / 包含程序中的#defi ne uchar un sig ned char#defi ne uint un sig ned intuchar led;void delay (un sig ned int i)uint j;uchar k;for(j=i;j0;j-) for(k=125;k0;k-);void mai n()led=0x7f;只亮第一个delay(1000);while(1)P0=led;delay(500);led=_cror_(led,1);P0 逐步右移一位。要求3:#in elude #inc

4、lude /包含程序中的 _crol_(P0,y)#defi ne uchar un sig ned char#defi ne uint un sig ned intsbit led=P0A0;uchar i;void delay (un sig ned int i)uint j;uchar k;for(j=i;j0;j-)for(k=125;k0;k-);void mai n() P0=0xfe;delay(IOOO);while(1)for(i=0;i8;i+)P0=led;delay(500);led=_crol_(led,1);P0 逐步左移一位。for(i=0;i8;i+)P0=le

5、d;delay(500);led=_cror_(led,1);P0 逐步右移一位实验二独立键盘实验、实验目的1、K1-K4 按键状态显示;2、K1-K4控制LED移位;3、单只数码管循环显示 09;4、K1-K4控制数码管移位显示。要求1: K1、K2按下时LED点亮,松开时熄灭,K3、K4按下并释放时LED点亮,再次按下并释放时熄灭;要求2: 按下K1时,P0 口 LED上移一位;按下K2时,P0 口 LED下移一位;按下K3时,P2 口 LED上移一位;按下K4时,P2 口 LED下移一位;要求3:主程序中的循环语句反复将09的段码送至P0 口,使数字09循环显示;要求4:按下K1时加1计

6、数并增加显示位,按下K2时减1计数并减少显示位,按下K3时清零、实验原理亠二亠芒二亠亠占盘亠亠.亠玄亠mim liUiim uuhHV1LMnowi- 陆dm三、源程序要求1:#in clude#defi ne uchar un sig ned char#defi ne uint un sig ned intsbit LED仁POP;sbit LED2=P0A1;sbit LED3=P0A2;sbit LED4=P0A3;sbit K仁 P1AO;sbitK2=Pl;sbit K3=P1A2;sbit K4=P1A3;/延时voidDelayMS(ui nt x)uchar i;while(x

7、-) for(i=0;i120;i+);/主程序void mai n()PO=Oxff;P仁 Oxff;while(1)LED1=K1;LED2=K2;if(K3=0)while(K3=0); LED3=LED3;if(K4=O)while(K4=0);LED4=LED4;DelayMS(IO);要求2:#in clude#defi ne uchar un sig ned char#defi ne uint un sig ned intuchar led1;uchar led2;sbit K仁 P1A0;sbitK2=P1A1;sbit K3=P2;sbit K4=P1A3;/延时voidDe

8、layMS(ui nt x)uchar i;while(x-) for(i=0;i120;i+);/主程序void mai n()led 仁Oxfe;Led2=0xfe;while(1)if(K1=0)while(K1=0); P0=led1;PO 口 LED上移一位。P0 口 LED下移一位。Ied=_crol_(led1,1); if(K2=0)while(K2=0); P0=led1; led=_cror_(led1,1);if(K3=0)while(K3=0);P2=led2;Led仁_crol_(led2,1);P0 口 LED 上移一位。 if(K4=0)while(K4=0);P

9、2=led2;Led2=_cror_(led2,1);P0 口 LED 下移一位。要求3:#in clude#defi ne uchar un sig ned char#defi ne uint un sig ned intuchar code display10=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f;/延时Void DelayMS(ui nt x)uchar i;while(x-) for(i=0;i120;i+);/主程序void mai n()uchar i;while(1)for(i=0;i10;i+)PO=display

10、i;DelayMS(500)i=0;要求4:#in clude#defi ne uchar un sig ned char#defi ne uint un sig ned intsbit K仁 P1A0;Sbit K2=P1A1;sbit K3=P1A2;uchar code display10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/延时Void DelayMS(ui nt x) uchar i;while(x-) for(i=0;i a KS J= * 10 dI aKE KFa a4-三、源程序要求1:#in clude#in

11、 clude#defi ne uchar un sig ned char#defi ne uint un sig ned int/矩阵键盘按键特征码表uchar code KeyCodeTable=0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88;/延时voidDelayMS(ui nt x)uchar i;while(x-) for(i=0;i120;i+);/键盘扫描ucharKeys_Sca n()Uchar sCode,kCode,i,k;低4位置0,放入4行P仁 0xf0;若

12、高4位出现0,则有键按下if(P1 &0 xf0)!=0xf0)DelayMS(2);if(P1 &0xf0)!=0xf0)sCode=0xfe;行扫描码初值for(k=0;k4;k+)/对4行分别进行扫描P仁 sCode;if(P1 &0 xf0)!=0xf0)kCode=P1;for(i=0;i16;i+)/查表得到按键序号并返回if(kCode=KeyCodeTablei)return(i);elsesCode=_crol_(sCode,1);return(-1);/主程序void mai n()uchar i,P2_LED,P3_LED;ucharKeyNo=-1;按键序号,-1表示无

13、按键while(1)KeyNo=Keys_Sca n();/扫描键盘获取按键序号KeyNoif(KeyNo!=-1)P2_LED=0xff;P3_LED=0xff;for(i=0;i=KeyNo;i+)键值越大,点亮的 LED越多if(i=1;elseP2_LED=1;P3=P3_LED; /点亮条形 LEDP2=P2_LED;要求2:#in clude#in clude #defi ne uchar un sig ned char#defi ne uint un sig ned intun sig ned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x

14、6d,0x7d,void matrixkeysca n()0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0-F的码表/矩阵键盘P仁 Oxfe;temp=P1;temp=temp&0 xf0;if (temp!=OxfO)delay(IO);temp=P1; temp=temp&OxfO;if (temp!=0xf0) temp=P1;switch (temp)case 0xee:key=1, num=O;break;case 0xde:key=2, num=1;break;case 0xbe:key=3 ,num=2;break;case 0x7e

15、:key=4,num=3;break;while (temp!=OxfO)temp=P1; temp=temp&0 xf0;P仁 Oxfd;temp=P1;temp=temp&0 xf0;if (temp!=OxfO)delay(10);temp=P1; temp=temp&OxfO;if (temp!=OxfO)temp=P1; switch (temp) case Oxed:key=5 ,num=4;break;case Oxdd:key=6 ,num=5;break; case Oxbd:key=7 ,num=6;break; case 0x7d:key=8 ,num=7;break;w

16、hile (temp!=OxfO)temp=P1;temp=temp&0 xf0;P1=0xfb;temp=P1;temp=temp&0 xf0;if (temp!=0xf0)delay(10);temp=P1;temp=temp&0xf0;if (temp!=0xf0)temp=P1;switch (temp)case 0xeb:key=9 ,num=8;break;case 0xdb:key=9 ,num=9;break; case 0xbb:key=10;break; case 0x7 b:key=11;break;while (temp!=0xf0)temp=P1;temp=temp&

17、0 xf0;P仁 0xf7;temp=P1;temp=temp&0 xf0;if (temp!=OxfO)delay(10);temp=P1; temp=temp&OxfO;if (temp!=0xf0)temp=P1;switch (temp)case 0xe7:key=12;break; case 0xd7:key=13;break;case 0xb7: key=14;break;case 0x77: key=15;break;default: break;while (temp!=0xf0) temp=P1; temp=temp&0 xf0;Void mai n() while(1)ma

18、trixkeysca n();P0=tablekey;实验四外部中断实验一、实验目的及要求1、INTO中断计数;2、外部INTO中断控制 LED;3、INTO及INT1中断计数要求1:每次按下计数键时触发INTO中断,中断程序累加计数,计数值显示在3只数码管上,按下清零键时数码管清零要求2:每次按键都会触发INTO中断,中断发生时将 LED状态取反,产生LED状态 由按键控制的效果要求3:每次按下第1个计数键时,第1组计数值累加并显示在右边 3只数码管上, 每 次按下第2个计数键时,第2组计数值累加并显示在左边3只数码管上,后两个按键分别清零。二、实验原理电路图1、RPl三、源程序要求1:#i

19、n clude#defi ne uchar un sig ned char#defi ne uint un sig ned int09的段码uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;/计数值分解后各个待显示的数位uchar DSY_Buffer=0,0,0;uchar Coun t=0;sbit Clear_Key=P3A6;数码管上显示计数值void Show_Co unt_O N_DSY()DSY_Buffer2=Count/1OO; /获取 3 个数DSY_Buffer1=Cou

20、nt%1OO/1O;DSY_Buffer0=Cou nt%10;if(DSY_Buffer2=0)/高位为 0 时不显示DSY_Buffer2=0x0a;if(DSY_Buffer1=0)高位为0,若第二位为 0同样不显示DSY_Buffer1=0x0a;P0=DSY_CODEDSY_Buffer0;P1=DSY_CODEDSY_Buffer1;P2=DSY_CODEDSY_Buffer2;/主程序void mai n()P0=0x00;P仁0x00;P2=0x00;IE=0x81; / 允许 INT0 中断IT0=1;/下降沿触发while(1)if(Clear_Key=0) Count=0

21、;清 0Show_C ount_O N_DSY();/INT0中断函数void EX_INT0() in terrupt 0Cou nt+;计数值递增要求2:#in clude#defi ne uchar un sig ned char#defi ne uint un sig ned intSbit LED=P0A0;/主程序void mai n()IE=0x81; / 允许 INTO 中断IT0=1;/下降沿触发while(1);/INT0中断函数void EX_INT0() in terrupt 0LED=LED; 控制 LED 亮灭要求3:#in clude#defi ne uchar

22、un sig ned char#defi ne uint un sig ned intun sig ned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;int nu m1, nu m2;sbit K3=P3A4; 清零 1sbit K4=P3A5;/ 清零 2sbit wela 1=卩2人0;sbit wela2=P2Al;sbit wela3=P2A2;sbit wela4=P2A3;sbit wela5=P2A4;sbit wela6=P2A5

23、;Void display(i nt nu m2,i nt nu ml);void mai n()IE=0x85; / 开 EA 总中断,允许 INT1 和 INT0 中断,1000 0101IT0=1;/下降沿触发IT1=1;下降沿触发while(1)if(K3=0)while(K3=0);nu m1=0;if(K4=0)while(K4=0);nu m2=0;Display (nu m2, nu ml);/INTO中断函数void EX_INT0() in terrupt 0num1+;/右边的数字加 1void EX_INT0() in terrupt 0num2+;/左边的数字加 1V

24、oid display(i nt nu m2,i nt nu m1)bai=num1/100; 右边 num1 百位shi=(num1/10)%10; 右边 num1 十位ge=nu m1%10;swan=num2/100;左边num2百位,数码管十万位wa n=( nu m2/10)%10;qia n=nu m2%10;wela1=1;打开最高位数码管的位选P1=tableswan;输入段选数据,即 NUM2的百位数,数码管的十万位wela1=0;/关闭最高位数码管的位选wela2=1;P1=tablewa n;wela2=0;wela3=1;P1=tableqia n;wela3=0;we

25、la4=1;P1=tablebai;wela4=0;wela5=1; P仁tableshi;wela5=0;wela6=1;P1=tablege; wela6=0;实验五定时器中断实验一、实验目的1、定时器控制单只 LED;2、TIMERO 控制流水灯;3、定时器控制4个LED滚动闪烁;要求1 : LED在定时器的中断例程控制下不断闪烁;要求2 :定时器控制P0、P2 口的LED滚动显示,本例未使用中断函数; 要求3: 4只LED在定时器控制下滚动闪烁;二、实验原理电路图1、 C1C2卅22pf: R1丄m12M 10ic C31-册-w; s BU12_PO.ODO惯T赳PO.1XM51FO

26、.3JWD3XTAL2FO片恥04P0.5JMD5FO.6JWD6PO.7JWD7P2.0tAe P2.1XA9P2 2/A.1QPSN旳珈11gTP2 4/A12 旳阳JE*巴辺14P2 7/A.15P1I.QP.iQiRMpP3JJTXDP1I.2P3 2 剧 1TQP1I.3P3 3miriPI 4PS.UTOP1I.5P3.5H1P1i.BP1I.7iP3.7fiD199AT69C51卜 XJ三、源程序要求1:#in clude#define uchar un sig ned char#define uint un sig ned intsbit LED=P0A0;uchar T_Co

27、 un t=0;/主程序void mai n()TMOD=OxOO;定时器0工作方式0TH0=(8192-5000)/32;/5ms 定时TL0=(8192-5000)%32;IE=0x82;/允许T0中断TR0=1;while(1);/TO中断函数void LED_Flash() in terrupt 1TH0=(8192-5000)/32;恢复初值TL0=(8192-5000)%32;if(+T_Count=100)/0.5s 开关一次 LEDLED=LED;T_Cou nt=0;要求2:#in clude#in clude#defi ne uchar un sig ned char#de

28、fi ne uint un sig ned int/主程序void mai n()uchar T_Coun t=0;P0=0xfe;P2=0xfe;/定时器0工作方式1/40ms定时/启动定时器TMOD=0x01;TH0=(65536-40000)/256;TL0=(65536-40000)%256; TR0=1;while(1)if(TF0=1)TF0=0;TH0=(65536-40000)/256;/ 恢复初值TL0=(65536-40000)%256;if(+T_Cou nt=5)P0=_crol_(P0,1);P2=_crol_(P2,1);T_Cou nt=0;要求3:#in clude#defi ne uchar un sig ned char#defi ne uint un sig ned intsbit B仁 P0A0;sbit G仁 P0A1;sbit R仁 P0A2;sbit 丫仁 P0A3;uint i,j,k;/主程序void mai n()i=j=k=0;P0=0xff;定时器0工作方式2/200us 定时启动定时器TMOD=0x02; TH0=256-200;TL0=256-200;IE=0x82;TR0=1;while(1);/TO中断函数 void LED_Flash_a nd_Scroll() in ter

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论