51单片机实验板实验手册作者:程风明时间:2009年1月29日地点:山东聊城邮箱:cfm12@126.com51单片机实验板实验手册程风明2009年1月29日-1-51单片机实验板说明学习51单片机必须做大量的实验,与其说51单片机是学出来的,倒不如说51单片机是“玩”出来的。就好像个人电脑一样,让你在那看十天使用说明不如你亲自玩一天收获大。为了方便大家做一些51单片机的入门实验,制作了这块51单片机实验板。该51单片机实验板,支持AT89C51、AT89C52、AT89S51、AT89S52这四款51单片机进行实验。它由DS1302、DS18B20、AT24CXX(可以更换AT24C02、AT24C04、AT24C16等存储容量大小不同的EEPROM)、蜂鸣器、继电器、六个数码管、四个发光二极管、一个四乘四的矩阵键盘、四个独立按键、一个1602液晶接口等组成。如下图所示:51单片机实验板实验手册程风明2009年1月29日-2-该实验板可以完成如下实验:z实验一、6位8段数码管显示实验z实验二、4×4矩阵式键盘识别实验z实验三、独立按键•发光二极管•蜂鸣器•继电器实验z实验四、定时/计数器T0作定时应用实验z实验五、基于DS1302的时钟实验z实验六、温度监测系统实验该实验板使用方便,只需利用短路帽进行电路的连接即可完成各种实验。请结合电路图左上角的接口与下图说明理解该电路板的各引脚的功能。51单片机实验板实验手册程风明2009年1月29日-3-电路图左上角的接口如下:该实验板利用7805构成了自己的稳压电路,为该实验板提供+5V的稳压电源。其电路图如下:说明:J4为心为负电压的DC插座;J5为接正电压的针脚;J6为接负电压的针脚;J9为接+5V的针脚。51单片机实验板实验手册程风明2009年1月29日-4-实验一、6位8段数码管显示实验一、实验任务显示六位数以内的任意正整数。若位数低于六位时,未用到的数码管不能发光。比如,要显示145这个正整数,显示结果应为“145”,而不能是“00145”。二、电路原理图三、实验板上硬件连接利用短路帽,使P2口的P20至P25分别与数码管的位选1至6依次连接,用于控制选通哪一个数码管亮;使P0口的P00至P07分别与数码管的段码SM1至SM8依次连接,用于输出相应的段码。数字0123456789段码c0f9a4b0999282f8809051单片机实验板实验手册程风明2009年1月29日-5-四、源程序#includeat89x51.h#includeintrins.h#defineuncharunsignedchar#defineunintunsignedint/*****************************定义端口*****************************/#definesmgP2//利用P2_0到P2_5由右向左依次选择要显示的数码管#definedmP0//利用P0口输出段码/*****************************************************************函数功能:延迟子函数(晶振12MHz),延时时间为n乘以10us,n最大为255入口参数:n出口参数:*****************************************************************/voiddelay_smg(uncharn){do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();n--;}while(n);}/*****************************************************************函数功能:显示六位数以内的正整数,最高位不显示零入口参数:dat出口参数:*****************************************************************/voidxianshi_smg(unsignedlongdat){bitflag=0;//标志位unchari=0;//确定所给正整数为几位数uncharshu[6];//由0至5依次存放所给正整数的由高到低各位上的数uncharcodecode0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//将数码管的段码定义到程序存储区uncharj,k;unsignedlongn;51单片机实验板实验手册程风明2009年1月29日-6-for(j=0,n=100000;j=5;j++,n=n/10){shu[j]=dat/n;if(shu[j]!=0||flag==1)//flag初值为0。shu[j]不为0时,if语句{//成立,i增加1,flag置1。无论shu[j]i++;//为何值,if语句皆成立。故,可完成iflag=1;//记录所给正整数为几位数的功能。但,所}//给正整数若为零,会出现i为0这种情况,dat=dat%n;//故,需在最后判断i是否为0。若i为0,}//需将i置1。if(i==0)i=1;for(j=1,k=0xfe;j=i;j++){smg=k;dm=code0[shu[6-j]];delay_smg(100);k=~k;k=k1;k=~k;dm=0xff;smg=0xff;}}/*****************************主函数*******************************/main(){uncharj;while(1)//循环显示0、3、145、30705、860922这五个正整{//数,以检验所编写的显示函数。for(j=0;j200;j++)xianshi_smg(0);for(j=0;j200;j++)xianshi_smg(3);for(j=0;j200;j++)xianshi_smg(145);for(j=0;j200;j++)xianshi_smg(30005);for(j=0;j200;j++)xianshi_smg(860922);}}51单片机实验板实验手册程风明2009年1月29日-7-实验二、4×4矩阵式键盘识别实验一、实验任务用51单片机的P1口接4×4矩阵键盘;在数码管上显示每个按键的“0”至“F”序号。对应的按键的序号排列如下图所示:二、电路原理图51单片机实验板实验手册程风明2009年1月29日-8-三、实验板上硬件连接利用短路帽,使P1口的P10至P17与4×4矩阵键盘的ZJ1至ZJ8依次连接,完成51单片机与矩阵键盘的连接;使P0口的P00至P07分别与数码管的段码SM1至SM8依次连接,用于输出相应的段码;使P2口的P20与数码管的位选1连接,利用一个数码管静态显示即可完成实验。四、源程序#includeat89x51.h#includeintrins.h#defineuncharunsignedchar#defineunintunsignedint/****************************定义端口*******************************/#definem1P1_3#definem2P1_2#definem3P1_1#definem4P1_0//m1至m4分别对应实验板由上到下对应的行#definen1P1_4#definen2P1_5#definen3P1_6#definen4P1_7//n1至n2分别对应实验板由左向右对应的列/********************************************************************函数功能:延迟子函数(晶振12MHz),延时时间为n乘以10us,n最大为255入口参数:n出口参数:********************************************************************/voiddelay_jzaj(uncharn){do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();n--;}while(n);}51单片机实验板实验手册程风明2009年1月29日-9-/********************************************************************函数功能:按矩阵键盘上的16个按键使最右边的数码管显示由0到F这16个数入口参数:出口参数:********************************************************************/voidkeyscan(void){uncharm,n,a,b,c,d;m1=0;m2=0;m3=0;m4=0;if(n1==0||n2==0||n3==0||n4==0){delay_jzaj(50);if(n1==0||n2==0||n3==0||n4==0){a=n1;b=n2;c=n3;d=n4;switch(a*1000+b*100+c*10+d){case111:n=1;break;case1011:n=2;break;case1101:n=3;break;case1110:n=4;break;default:break;}}}m1=1;m2=1;m3=1;m4=1;n1=0;n2=0;n3=0;n4=0;if(m1==0||m2==0||m3==0||m4==0){delay_jzaj(50);if(m1==0||m2==0||m3==0||m4==0){a=m1;51单片机实验板实验手册程风明2009年1月29日-10-b=m2;c=m3;d=m4;switch(a*1000+b*100+c*10+d){case111:m=1;break;case1011:m=2;break;case1101:m=3;break;case1110:m=4;break;default:break;}}}while(m1==0||m2==0||m3==0||m4==0);//直至按键松开此循环结束n1=1;n2=1;n3=1;n4=1;switch(10*m+n){case11:P0=0xc0;break;//显示0case12:P0=0xf9;break;//显示1case13:P0=0xa4;break;//显示2case14:P0=0xb0;break;//显示3case21:P0=0x99;break;//显示4case22:P0=0x92;break;//显示5case23:P0=0x82;break;//显示6case24:P0=0xf8;break;//显示7case31:P0=0x80;break;//显示8case32:P0=0x90;break;//显示9case33:P0=0x88;break;//显示Acase34:P0=0x83;break;//显示bcase41:P0=0xc6;break;//显示Ccase42:P0=0xa1;break;//显示dcase43:P0=0x86;break;//显示Ecase44:P0=0x8e;break;//显示Fdefault:break;}}/******************************主函数*******************************/main(){P2=0xfe;//选择最右边的那个数码管while(1)keyscan();}51单片机实验板实验手册程风明2009年1月29日-11-实验三、独立按键·发光二极管·蜂鸣器·继电器实验一、实验任务由左至右依次按下那四个按键时,所对应的发光二极管依次发光且蜂鸣器响、继电器右边的那