为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

第7组(单片机实验总结)

2022-05-12 4页 pdf 1MB 4阅读

用户头像 个人认证

is_152972

暂无简介

举报
第7组(单片机实验总结)本文档如对你有帮助,请帮忙下载支持!广东药学院实验报告总结班级:生物医学工程11(电子仪器)组别:第19组组长:陈均连组员:陈春明、骆伟伟2013年12月15日实验三单片机I/O口控制实验1、要求利用P1口做输出口,接八只发光二极管。编写程序,使发光二极管循环点亮,或者产生有一定规律的花样,花样要求如下(提示:每一个要求编一个程序):①第一个发光管以间隔200ms闪烁#include//1#defineuintunsignedintvoiddelayms(uint);sbitled1=P1^0;voidmain(){while...
第7组(单片机实验总结)
本文档如对你有帮助,请帮忙下载支持!广东药学院实验报告总结班级:生物医学11(电子仪器)组别:第19组组长:陈均连组员:陈春明、骆伟伟2013年12月15日实验三单片机I/O口控制实验1、要求利用P1口做输出口,接八只发光二极管。编写程序,使发光二极管循环点亮,或者产生有一定规律的花样,花样要求如下(提示:每一个要求编一个程序):①第一个发光管以间隔200ms闪烁#include//1#defineuintunsignedintvoiddelayms(uint);sbitled1=P1^0;voidmain(){while(1){led1=0;delayms(200);led1=1;delayms(200);}}voiddelayms(uintxms){uinti,j;本文档如对你有帮助,请帮忙下载支持!for(i=xms;i>0;i--)for(j=110;j>0;j--);}②8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。#include//2#include#defineuintunsignedintvoiddelayms(uint);uintaa;sbitbeep=P1^5;voidmain(){P2=0xff;aa=0xfe;beep=1;while(1){P2=aa;beep=0;delayms(500);P2=0xff;beep=1;delayms(500);aa=_crol_(aa,1);}}voiddelayms(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}③8个发光管来回流动,第个管亮100ms,流动时让蜂鸣器发出“滴滴”声。#include//3#include#defineuintunsignedintvoiddelayms(uint);uintaa,i;sbitbeep=P2^3;voidmain(){P1=0xff;beep=1;本文档如对你有帮助,请帮忙下载支持!aa=0xfe;delayms(500);while(1){for(i=0;i<8;i++){P1=aa;beep=1;delayms(100);beep=0;delayms(100);aa=_crol_(aa,1);if(aa==0xfe)break;}aa=0x7f;for(i=0;i<8;i++){aa=_cror_(aa,1);P1=aa;beep=1;delayms(100);beep=0;delayms(100);if(aa==0xfe)break;}}}voiddelayms(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}④用8个发光管演示出8位二进制数累加过程,结合两个开关(一加一减)实现加减运算。#include//4#defineucharunsignedchar#defineuintunsignedintsbits0=P2^0;sbits1=P2^1;uchara;voiddelayms(uintz){inti,j;本文档如对你有帮助,请帮忙下载支持!for(i=z;i>0;i--)for(j=110;j>0;j--);}voidmain(){while(1){a=0;if(s0==0){while(a!=256){a++;P1=~a;delayms(500);}}a=0xff;if(s1==0){while(a!=0){a--;P1=~a;delayms(500);}}}}⑤8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。重复此过程。#include//5#include#defineuintunsignedintvoiddelayms(uint);uinta,i,j;voidmain(){while(1){a=0xfe;for(j=0;j<2;j++){for(i=0;i<8;i++)本文档如对你有帮助,请帮忙下载支持!{P1=a;a=_crol_(a,1);delayms(200);}a=0x7f;for(i=0;i<7;i++){a=_cror_(a,1);P1=a;delayms(200);}}P1=0xff;delayms(500);for(i=0;i<5;i++){P1=0x00;delayms(300);P1=0xff;delayms(300);}}}voiddelayms(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}⑥间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。#include//6#include#defineuintunsignedintvoiddelayms(uint);uinti,a;voidmain(){while(1){a=0xfe;for(i=0;i<8;i++){本文档如对你有帮助,请帮忙下载支持!P1=a;a=_crol_(a,1);delayms(500);}delayms(500);a=0xfc;for(i=0;i<4;i++){P1=a;a=_crol_(a,2);delayms(500);}delayms(500);a=0xf8;for(i=0;i<3;i++){P1=a;a=_crol_(a,3);delayms(500);}delayms(500);a=0xf0;for(i=0;i<2;i++){P1=a;a=_crol_(a,4);delayms(500);}delayms(500);a=0xe0;for(i=0;i<2;i++){P1=a;a=_crol_(a,5);delayms(500);}delayms(500);a=0xc0;for(i=0;i<2;i++){P1=a;a=_crol_(a,6);delayms(500);}本文档如对你有帮助,请帮忙下载支持!delayms(500);a=0x80;for(i=0;i<2;i++){P1=a;a=_crol_(a,7);delayms(500);}delayms(500);a=0x00;delayms(500);}}voiddelayms(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}⑦间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。#include//7#include#defineuintunsignedintvoiddelayms(uint);uinta,i,j;voidmain(){for(i=0;i<3;i++){P1=0xaa;//01010101delayms(1000);P1=0x55;//10101010delayms(1000);}P1=0xff;delayms(500);本文档如对你有帮助,请帮忙下载支持!for(i=0;i<3;i++){a=0xfe;for(j=0;j<7;j++){P1=a;delayms(500);a=_crol_(a,1);}for(j=0;j<8;j++){P1=a;delayms(500);a=_cror_(a,1);}}P1=0xff;delayms(500);for(i=0;i<3;i++){P1=0x7e;delayms(1000);P1=0xbd;delayms(1000);P1=0xdb;delayms(1000);P1=0xe7;delayms(1000);}P1=0xff;delayms(500);for(i=0;i<3;i++){本文档如对你有帮助,请帮忙下载支持!P1=0xe7;delayms(1000);P1=0xdb;delayms(1000);C1U11939XTAL1P0.0/AD038P0.1/AD127pF37X1P0.2/AD2P1=0xbd;1836CRYSTALXTAL2P0.3/AD3C235P0.4/AD434P0.5/AD533P0.6/AD627pF932delayms(1000);RSTP0.7/AD721R1P2.0/A822P2.1/A9231P2.2/A10P1=0x7e;C32924PSENP2.3/A113025ALEP2.4/A123126EAP2.5/A1310uF27R2P2.6/A1428delayms(1000);P2.7/A1510k110P1.0/T2P3.0/RXDD1211R3P1.1/T2EXP3.1/TXD312P1.2P3.2/INT0413100P1.3P3.3/INT1514LED-YELLOWP1.4P3.4/T0D2615R4P1.5P3.5/T1716P1.6P3.6/WR817100P1.7P3.7/RD}LED-YELLOWD3AT89C52R5P1=0xff;100D4LED-YELLOWR6100delayms(500);LED-YELLOWD5R7for(i=0;i<3;i++)100D6LED-YELLOWR8100{D7LED-YELLOWR9100D8LED-YELLOWP1=0x00;R10100delayms(1000);LED-YELLOWP1=0xff;delayms(1000);}while(1){P1=0xff;}}voiddelayms(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}心得体验:本实验主要学习使用单片机的I/O口控制发光二极管的亮灭,同时要熟悉延时子函数的调用,熟练进行移位操作,比如左移<<,右移>>,等指令。应该注意的是:单片机上电时,没有人为地控制I/O口的状态,所有未控制的I/O本文档如对你有帮助,请帮忙下载支持!口都默认为高电频。刚开始学习单片机这门课程,因为学过C语言,所以还是稍微能上手的。学习实验三,从中掌握了I/O口的工作原理和它的数据输出方式,通过P1口观察程序的运行。而且掌握了二个新软件proteuisis和keil,可以进行仿真实验,也和单片机实物结合理论联系实际,提高动手能力,从而全面掌握单片机的应用。而在实验三中,首先要理解目要求,相应地去编程,要有自己的思路,先把大概的脉络写出来,还要不断地去调试,最终才可以满足题目要求,在仿真和实物单片机都能实现需要的现象。本文档如对你有帮助,请帮忙下载支持!7.实验四LED数码管控制实验1.单片机AT89C51读入4位开关的输入状态(0~F),并将其输出到数码管显示。#include//数码管共阳,按键共阴(1)#include#defineucharunsignedchar#defineuintunsignedintsbitk1=P2^0;sbitk2=P2^1;sbitk3=P2^2;sbitk4=P2^3;uinta,b,c,d,m;ucharcodetable[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};voidmain(){a=k1;b=k2;c=k3;d=k4;本文档如对你有帮助,请帮忙下载支持!m=(8*!d+4*!c+2*!b+1*!a);P0=table[m];//P0}2、数码管动态显示。#include//数码管共阴(2)#include#defineucharunsignedchar#defineuintunsignedintuinti;//1//2//3//4//5//6ucharcodedula[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};ucharcodewela[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};voiddelayms(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}voidmain(){while(1){for(i=0;i<6;i++){P2=wela[i];//P1P0=dula[i];delayms(500);P0=0xff;//消影delayms(100);}}}本文档如对你有帮助,请帮忙下载支持!心得体验:本实验主要是熟练掌握I/O口对数码管显示的控制,在编写程序时,应先确定选用的数码管是共阴还是共阳数码管,不同的数码管使用不同的编码。数码管的动态显示中,一般都要上一句P0=0xff,即是消影。如果不进行消影,就会出现显示混乱的现象。学习了P1口和P2口的使用方法,要把P0口、P1口和P2口在keil中调出来调试观察0和1数值(高低电平)变化,由于买的单片机是内部接线固定好,只能通过修改程序和仿真图去满足实验要求,比其他同学所做的工作更多,也更复杂,不过我觉得这样可以让我更深入地去了解了单片机的结构。8.实验五广告流水灯中断控制1、利用定时/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪烁,设晶振频率为12MHz。#include//1本文档如对你有帮助,请帮忙下载支持!#defineuintunsignedintsbitled=P1^0;uintnum;voidmain(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1){if(num==20){num=0;led=~led;}}}voidT0_time()interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;num++;}2、利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,使8个指示灯依次一个一个闪动,闪动频率为10次/秒(8个灯依次亮一遍为一个周期),循环。#include//2单数码管共阳#include#defineuintunsignedint#defineucharunsignedcharUcharcodedula[]={0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x40};本文档如对你有帮助,请帮忙下载支持!uinta,num,i;voidmain(){TMOD=0x10;//T1TH1=(65536-10000)/256;//10msTL1=(65536-10000)%256;EA=1;ET1=1;TR1=1;num=0;i=0;a=0xfe;while(1){if(num==7){P1=a;P0=dula[i];i++;}if(num==10){num=0;P1=0xff;}if(i==10){i=0;a=_crol_(a,1);}//P1=0xff;}}本文档如对你有帮助,请帮忙下载支持!voidT1_time()interrupt3{TH1=(65536-10000)/256;TL1=(65536-10000)%256;num++;}3、用定时器以间隔500MS在6位数码管上依次显示0、1、2、3⋯.C、D、E、F,重复(电路自己)。#include//3共阴#defineuintunsignedint#defineucharunsignedcharucharcodedula[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};ucharcodewela[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};uintnum,i,j;voidmain(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;i=0;num=0;while(1){if(num==10){num=0;P2=wela[j];//0选中位选P3=dula[i];//段选i++;if(i==16){i=0;j++;if(j==6)j=0;}}}}本文档如对你有帮助,请帮忙下载支持!voidT0_time()interrupt1{TH0=(65536-50000)/256;//45872TL0=(65536-50000)%256;num++;}选做:INT0、INT1同时存在,P1为输出口,INT1优先级高于INT0,均为电平触发。要求:主程序8个发光二极管左、右移动2轮,再闪烁2次,INT0的中断服务程序控制P1口的8个发光二极管闪烁5次,INT1的中断服务程序控制P1口的8个发光二极管左、右移动3轮(所有计数通过数码管显示),信号灯优先级控制程序流程图如图8-5所示。#include//选做单数码管共阳#include#defineuintunsignedint#defineucharunsignedcharucharcodedula[]={0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x40};//1~9uinta,b,num0,num1,i,j;sbitN0=P3^2;sbitN1=P3^3;voiddelayms(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}voidmain(){TMOD=0xdd;TCON=0x00;PX1=1;//外部中断1为高优先PX0=0;//0为低EA=1;//全局允许中断EX1=1;//开外部中断1EX0=1;//开外部中断0num0=0;num1=0;i=0;a=0xfe;b=0xff;while(1){for(j=0;j<2;j++)//移动2轮{for(i=0;i<7;i++)//左本文档如对你有帮助,请帮忙下载支持!{P1=a;delayms(200);a=_crol_(a,1);}for(i=0;i<7;i++)//右{P1=a;delayms(200);a=_cror_(a,1);}}j=0;for(j=0;j<2;j++)//闪2次{P1=~b;delayms(200);P1=b;delayms(200);}}}voidexter0()interrupt0{b=0xff;while(1){P1=~b;P0=dula[num0];delayms(200);P1=b;delayms(200);num0++;if(num0==5){while(1){P1=b;}本文档如对你有帮助,请帮忙下载支持!}voidexter1()interrupt2{a=0xfe;while(1){for(i=0;i<7;i++)//左{P1=a;delayms(200);a=_crol_(a,1);}for(i=0;i<7;i++)//右{P1=a;delayms(200);a=_cror_(a,1);}P0=dula[num1];num1++;if(num1==3){while(1){P1=b;}}}}本文档如对你有帮助,请帮忙下载支持!实验五心得:由于水平有限,在实验五花了好长时间,先要了解了定时器/计数器工作方式,而且要搞清楚题目的中断延时要求,既要设计实验仿真电路,又要编程去实现要求。在实验中学习到了外部中断基本使用方法和中断优先级,学习了中断程序的编写程序方法。而在选做实验中断嵌套中进一步地利用了中断优先级去控制程序。9.实验六方波发生器(1)用内部定时器/计数器0的定时功能,实现周期为400us的方波输出。#include//(1)#defineucharunsignedchar#defineuintunsignedintsbita=P3^5;sbitb=P3^7;ucharnum;voidmain(){TMOD=0x01;//启动T0TH0=(65536-100)/256;//400USTL0=(65536-100)%256;本文档如对你有帮助,请帮忙下载支持!EA=1;ET0=1;TR0=1;a=0;b=0;while(1){if(num==2){num=0;a=!a;b=!b;}}}voidT0_time()interrupt1{TH0=(65536-100)/256;TL0=(65536-100)%256;num++;}(2)用内部定时器/计数器1的定时功能,在P3.0引脚上产生周期为10ms的方波输出,定时器采用查询和中断两种方式实现。本文档如对你有帮助,请帮忙下载支持!#include//(2)#defineucharunsignedchar#defineuintunsignedintsbita=P3^0;ucharnum;voidmain(){TMOD=0x10;//启动T1TH1=(65536-1000)/256;//10msTL1=(65536-1000)%256;EA=1;ET1=1;TR1=1;a=0;while(1){if(num==10){num=0;a=!a;}}}voidT1_time()interrupt3{本文档如对你有帮助,请帮忙下载支持!TH1=(65536-1000)/256;TL1=(65536-1000)%256;num++;}(3)用内部定时器/计数器0的方式2,在P3.0引脚上产生矩形波,高电平为50us,低电平为300us。#include//(3)#defineucharunsignedchar#defineuintunsignedintsbita=P3^0;ucharnum;voidmain(){TMOD=0x02;//启动T0TH0=(65536-50)/256;//50USTL0=(65536-50)%256;EA=1;ET0=1;TR0=1;a=0;while(1)//为什么在while里面程序不能实现?{}}voidT0_time()interrupt1{TH0=(65536-50)/256;TL0=(65536-50)%256;num++;if(a==1&&num==1){a=!a;num=0;本文档如对你有帮助,请帮忙下载支持!}if(a==0&&num==6){a=!a;num=0;}}(4)同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,1k(hz)的方波。#include//(4)#include//包含有左右循环移位子函数的库#defineuintunsignedint//宏定义#defineucharunsignedcharsbita=P3^0;sbitb=P1^5;uchartt;uinti,f,flag;ucharcodeFB[]={1,10,50,100,200,400,800,1000};voidmain()//主函数{i=0;f=50000;TMOD=0x11;//设置定时器0,定时器1为工作方式1TH0=(65536-f)/256;TL0=(65536-f)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;//开总中断ET0=1;//开定时器0中断本文档如对你有帮助,请帮忙下载支持!ET1=1;TR1=1;TR0=1;//启动定时器0while(1)//等待中断产生{if(tt=f){tt=0;a=!a;b=!b;}if(flag==6){flag=0;i++;}f=FB[i];}}voidT0_time()interrupt1//定时器0中断{TR0=0;//进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失TH0=(65536-f)/256;TL0=(65536-f)%256;tt++;}6、选作----计数器方式,原理图如下图9-10所示,流程图如图9-11、9-12、9-13所示(1)用内部定时器/计数器1的计数功能,工作在方式2,实现计数10次产生中断使P1.7所接发光二极管点亮(计数用数码管显示,需加数码管)。#include//选做(1)单数码管共阳接按键于P3^5#include#defineuintunsignedint#defineucharunsignedcharucharcodedula[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//0~9本文档如对你有帮助,请帮忙下载支持!voidT1_time()interrupt3//定时器1中断用来产生300微秒时间定时{TH1=(65536-50000)/256;TL1=(65536-50000)%256;flag++;}sbitled=P1^7;ucharCount=0;voidmain(){TMOD=0x60;//T1工作于计数器方式2TH1=255;//计数值设为256-1=255,当P3.5有键按下时,负跳变会使计数器初值255加1,TL1=255;//计数器立即溢出而触发计数中断,计数中断函数将计数变量Count累加ET1=1;//允许T1中断EA=1;//开总中断TR1=1;//启动T1while(1){P0=dula[Count];if(Count==9)led=0;elseled=1;}}voidKey_Counter()interrupt3//T1计数器中断函数{Count=(Count+1)%10;//计数控制在10以内无需再加if语句控制初值}(2)用内部定时器/计数器1的计数功能,工作在方式1,8位发光二极管以二进制显示按键次数。#include//选做(2)单数码管共阳voidmain(){TMOD=0x50;//设置T1为计数器,工作于方式1,最大计数值为65535TH1=0x00;//初值为0TL1=0x00;TR1=1;//启动T1while(1)本文档如对你有帮助,请帮忙下载支持!{P1=~TL1;//显示计数值低字节P1=~TH1;//显示计数值高字节}}实验六心得:实验六要用到单片机内部定时器的定时功能,通过查询本学习到了内部定时器的硬件结构和应用,熟悉了定时器T0和T1的两种用途的其中一种是作为定时器实现定时控制,掌握了TMOD、TCON的意思,也熟悉了使用VSM虚拟示波器来观测波形,也在编程时,熟悉了内部定时器的编程方法。实验七键盘设计与显示实验1、将AT89C51的P3端口分别连接8个按键,编号从1~8,P2端口连接LED数码管,在数码管上显示相应的键值。实验代码与结果:#include#defineucharunsignedchar#defineuintunsignedintsbitk1=P3^0;sbitk2=P3^1;sbitk3=P3^2;sbitk4=P3^3;sbitk5=P3^4;sbitk6=P3^5;sbitk7=P3^6;sbitk8=P3^7;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};voiddelayms(uint);ucharnum;voiddelayms(uintxms)本文档如对你有帮助,请帮忙下载支持!{uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}voidkeyscan(){if(k1==0){delayms(10);if(k1==0){num=1;while(!k1);}}if(k2==0){delayms(10);if(k2==0){num=2;while(!k2);}}if(k3==0){delayms(10);if(k3==0){num=3;while(!k3);}}if(k4==0){delayms(10);if(k4==0){num=4;while(!k4);}}if(k5==0)本文档如对你有帮助,请帮忙下载支持!{delayms(10);if(k5==0){num=5;while(!k5);}}if(k6==0){delayms(10);if(k6==0){num=6;while(!k6);}}if(k7==0){delayms(10);if(k7==0){num=7;while(!k7);}}if(k8==0){delayms(10);if(k8==0){num=8;while(!k8);}}}voidmain(){while(1){keyscan();P2=table[num];}}本文档如对你有帮助,请帮忙下载支持!2、一个4x4的矩阵式键盘,以P3.0~P3.3作为行线,以P3.4~P3.7作为列线,在数码管上显示每个按键相应的键值“0~F”。实验代码与结果:#include#defineucharunsignedcharvoidmain(){P2=0x00;while(1){P3=0xfe;if(P3==0xee){P2=0x3f;}if(P3==0xde){P2=0x06;}if(P3==0xbe){P2=0x5b;}if(P3==0x7e){P2=0x4f;}P3=0xfd;if(P3==0xed){P2=0x66;}if(P3==0xdd){P2=0x6d;}if(P3==0xbd){P2=0x7d;}if(P3==0x7d){P2=0x07;}P3=0xfb;if(P3==0xeb){P2=0x7f;}if(P3==0xdb){P2=0x6f;}if(P3==0xbb){P2=0x77;}if(P3==0x7b){P2=0x7c;}P3=0xf7;if(P3==0xe7){P2=0x39;}if(P3==0xd7){P2=0x5e;}if(P3==0xb7){P2=0x79;}if(P3==0x77){P2=0x71;}}}实验总结:进行这次实验的过程中,首先了解了接口电路的工作原理,也了解了键盘和显示器的接口方法。其中键盘分为独立式和矩阵式按键,独立式按键每个I/O口线接一个按键,而矩阵式键盘由行线和列线组成,按键位置交叉点上。实验七分别是验证独立式按键和矩阵式按键。该编程难度不大,注意好交叉式按键的排列即可。实验八并行D/A转换实验1、编写程序,使之控制D/A转换器DAC0832进行转换,能功过本文档如对你有帮助,请帮忙下载支持!示波器观察输出阶梯波、三角波、方波、正弦波。实验代码与结果:#include#defineucharunsignedchar#defineuintunsignedintsbitled1=P1^1;sbitdawr=P3^6;sbitdacs=P2^7;sbitkey1=P1^0;sbitkey2=P1^2;sbitkey3=P1^4;sbitkey4=P1^6;ucharcodesin[272]={//输出电压从0到最大值(正弦波1/4部分)0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,//输出电压从最大值到0(正弦波1/4部分)0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,//输出电压从0到最小值(正弦波1/4部分)0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,//输出电压从最小值到0(正弦波1/4部分)0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,本文档如对你有帮助,请帮忙下载支持!0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};ucharval,flag,aa,i;voiddelayms(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}voidmain(){EA=1;IT0=0;dacs=0;dawr=0;P0=0;EX0=1;}voidexter0()interrupt0{ucharval,flag;EX0=0;while(1){if(key1==0){delayms(10);if(key1==0){while(key2!=0&key3!=0&key4!=0){if(flag==0){val+=15;P0=val;if(val==255){本文档如对你有帮助,请帮忙下载支持!delayms(500);flag=1;}delayms(50);}else{val-=15;P0=val;if(val==0){delayms(500);flag=0;}delayms(50);}}while(!key1);}}if(key2==0){delayms(10);if(key2==0){while(key1!=0&key3!=0&key4!=0){if(flag==0){val+=15;P0=val;if(val==255){flag=1;}delayms(50);}else{val-=15;P0=val;if(val==0){flag=0;本文档如对你有帮助,请帮忙下载支持!}delayms(50);}}while(!key2);}}if(key3==0){delayms(10);if(key3==0){while(key2!=0&key1!=0&key4!=0){val=255;P0=val;delayms(500);val=0;P0=val;delayms(500);}while(!key3);}}if(key4==0){delayms(10);if(key4==0){while(key2!=0&key3!=0&key1!=0){if(i<272){P0=sin[i];delayms(5);i++;}elsei=0;}while(!key4);}}}}本文档如对你有帮助,请帮忙下载支持!2、用DAC0832实现数/模转换,从单片机输出数据到DAC0832,经其转换成模拟量输出,输出图形为鱼形。实验代码与结果:#include#defineuintunsignedint#defineucharunsignedcharsbitdawr=P3^6;sbitdacs=P2^7;ucharcodedesk[98]={0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x80,0x80,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,};voiddelayms(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}voidmain(){ucharfish,i;dacs=0;dawr=0;EA=1;EX0=1;//开外部中断0TCON=0x01;i=0;fish=0x40;while(1){if(i<98)//0x30本文档如对你有帮助,请帮忙下载支持!{P0=desk[i];delayms(1);P0=256-desk[i];delayms(1);i++;}if(i>=97&&i<105){P0=fish;delayms(1);P0=256-fish;delayms(1);i++;fish-=5;}if(i>=105){i=0;fish=0x40;}}}实验总结:做实验前先查阅资料,认识了D/A转换器DAC0832的工作原理,也知道DAC0832由T型R-2R电阻网络、模拟开关、运算放大器和参考电压VREF四大部分组成,掌握了D/A转换器DAC8032和单片机的接口方法。编程时,在网上查询了4个波形的编写程序方式,熟悉后,再自己试着编程,不断地修改才把程序写出来。在做鱼形波形时,先把鱼的构造用数组列出来,然后在程序中引用,得以完成。实验九A/D转换器1、用ADC0809对模拟信号进行转换,转换结果送七段数码管显示,同时用发光二极管显示转换值的二进本文档如对你有帮助,请帮忙下载支持!制,5LED静态显示前2位显示“AD”字样。实验代码与结果:#include#include#defineuintunsignedint#defineucharunsignedcharUcharcodetable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极sbitSTART=P3^6;sbitEOC=P3^3;sbitOE=P3^7;sbitling=P2^0;sbitALE1=P2^1;sbitALE2=P2^2;sbitDIN=P3^0;sbitCLK=P3^1;voiddisplay();voiilian(uint);voidshijinzhi();ucharshuju;voidmain(){ling=0;P0=0x02;ALE1=1;ALE1=0;ALE2=0;//设置ADC的输入地址为IN2P0=0xff;OE=0;while(1){START=0;START=1;//START=0;//启动ADCwhile(EOC==1);//OE=1;shuju=P0;P1=shuju;ALE2=0;display();ALE2=1;本文档如对你有帮助,请帮忙下载支持!/*ALE2=0;shijinzhi();ALE2=1;*/}}voidjilian(uintz){ucharj,anta;anta=z;for(j=0;j<8;j++){CLK=0;DIN=anta&0x01;CLK=1;anta=anta>>1;}}voiddisplay(){ucharbai,shi,ge;bai=shuju/100;shi=shuju%100/10;ge=shi%10;jilian(table[ge]);jilian(table[shi]);jilian(table[bai]);jilian(table[13]);jilian(table[10]);}voidshijinzhi(){ucharbai,shi,ge,gbw,dbw;bai=shuju/100;shi=shuju%100/10;ge=shi%10;gbw=shuju/16;dbw=shuju%16;jilian(table[ge]);jilian(table[shi]);jilian(table[bai]);jilian(table[dbw]);jilian(table[gbw]);}本文档如对你有帮助,请帮忙下载支持!实验总结:首先查阅了ADC0808模数转换器的知识,了解了它的引脚功能,掌握了该芯片与单片机的连接方法和应用,也了解了查询方式、中断方式完成模/数转换程序的编写方法。而该实验要对实验仿真图的原理要有清晰的思路,知道它的工作原理,然后编程实现实验要求。实验十串行通信实验1、设置AT89C51的串口工作方式0,串行口输出内存单元的数据,并且8位发光二极管逐个显示二进制值。实验代码和结果:#include#defineuintunsignedint#defineucharunsignedcharuchara,b,c;voiddelayms(uintz){inti,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}voidmain(){SCON=0;EA=1;ES=1;while(1)本文档如对你有帮助,请帮忙下载支持!{a+=1;SBUF=a;ES=0;delayms(500);if(a==256)a=0;if(TI==1)//数据发送完毕TI会置1TI=0;ES=1;}}2、设置AT89C51的串口工作在方式0,接收从74LS165输出的数据,并将数据送P0口的发光二极管显示。实验代码与结果:#include#defineuintunsignedint#defineucharunsignedcharsbitSK=P3^2;voiddelayms(uintxms){uchari,j;for(j=xms;j>0;j--)for(i=110;i>0;i--);}voidmain(){//SCON=0X10;//串行口工作在方式0SM0=0;SM1=0;REN=1;while(1){SK=0;//置数,读入并行输入口的8位数据SK=1;//移位,并口输入被封锁,串行转换开始while(RI==0);//等待接收完一字节数据?RI=0;//接收完成,RI置0P0=~SBUF;//接收到的字节显示在P0端口,显示的值与拨码开关对应delayms(20);}本文档如对你有帮助,请帮忙下载支持!}选作题:某控制系统有甲、乙两个单片机,甲机首先将P1口指拨开关数据载入SBUF,然后经过TXD将数据传送给乙机,乙机将接送的数据存入SBUF,再由SBUF载入累加器,并输出到P1口,点亮相应端口的LED。实验代码与结果:#include#defineucharunsignedchar#defineuintunsignedintuchara;voiddelayms(uintz){inti,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}voidmain(){TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;SM0=0;SM1=1;本文档如对你有帮助,请帮忙下载支持!EA=1;ES=1;while(1){a=P1;SBUF=a;while(!TI);TI=0;delayms(1);}}#include#defineucharunsignedchar#defineuintunsignedintuchara;voiddelayms(uintz){inti,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}voidmain(){TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;SM0=0;SM1=1;REN=1;EA=1;ES=1;while(1){a=SBUF;P1=a;while(!RI);RI=0;delayms(1);}}本文档如对你有帮助,请帮忙下载支持!实验总结:首先熟读实验预备知识,了解51单片机串行通行接口,了解了它的管脚TXD、RXD,还有串行接口寄存器和串行接口工作方式0.编程时,要对串行中断和工作方式0有很详细的了解,知道AT89C51和74LS164引脚的用处,也要注意串口中断工作方式0的RI会由内部硬件置0这规律。编程时,要熟读书本的例题,理解每一行的意义,再自己试着按实验要求编程,不断修改。实验十一液晶显示实验1、使用LCD显示两行字符,第一行显示“hello+自己的英文名字”,第二行显示正确的年月日。实验代码与结果:#include#defineucharunsignedchar#defineuintunsignedintucharcodetable1[]="helloluoweiwei";ucharcodetable2[]="20131210";ucharcodetable3[]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02
/
本文档为【第7组(单片机实验总结)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索