自制51单片机实验板 51单片机实验板手册(含原理图与实验程序)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程风明
2009 年 1 月 29 日
b=m2; c=m3; d=m4; switch(a*1000+b*100+c*10+d)
{ case 111: m=1;break; case 1011:m=2;break; case 1101:m=3;break; case 1110:m=4;break; default:break;
三、 实验板上硬件连接 利用短路帽,使 P2 口的 P20 至 P25 分别与数码管的位选 1 至 6
依次连接,用于控制选通哪一个数码管亮;使 P0 口的 P00 至 P07 分 别与数码管的段码 SM1 至 SM8 依次连接,用于输出相应的段码。 数字 0 1 2 3 4 5 6 7 8 9 段码 c0 f9 a4 b0 99 92 82 f8 80 90
} } } while(m1==0||m2==0||m3==0||m4==0); //直至按键松开此循环结束 n1=1; n2=1; n3=1; n4=1; switch(10*m+n) { case 11:P0=0xc0;break; //显示"0" case 12:P0=0xf9;break; //显示"1" case 13:P0=0xa4;break; //显示"2" case 14:P0=0xb0;break; //显示"3" case 21:P0=0x99;break; //显示"4" case 22:P0=0x92;break; //显示"5" case 23:P0=0x82;break; //显示"6" case 24:P0=0xf8;break; //显示"7" case 31:P0=0x80;break; //显示"8" case 32:P0=0x90;break; //显示"9" case 33:P0=0x88;break; //显示"A" case 34:P0=0x83;break; //显示"b" case 41:P0=0xc6;break; //显示"C" case 42:P0=0xa1;break; //显示"d" case 43:P0=0x86;break; //显示"E" case 44:P0=0x8e;break; //显示"F" default:break; } } /******************************主函数*******************************/ main() { P2=0xfe; //选择最右边的那个数码管 while(1) keyscan();}
键的“0”至“F”序号。对应的按键的序号排列如下图所示 :
二、电路原理图
-7-
51 单片机实验板实验手册
程风明
2009 年 1 月 29 日
三、实验板上硬件连接
利用短路帽,使 P1 口的 P10 至 P17 与 4×4 矩阵键盘的 ZJ1 至
ZJ8 依次连接,完成 51 单片机与矩阵键盘的连接;使 P0 口的 P00 至
//标志位
unchar i=0;
//确定所给正整数为几位数
unchar shu[6]; //由 0 至 5 依次存放所给正整数的由高到低各位上的数
unchar code code0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
0x90};//将数码管的段码定义到程序存储区
函数功能:显示六位数以内的正整数,最高位不显示零
入口参数:dat
出口参数:
*****************************************************************/
void xianshi_smg(unsigned long dat)
{
bit flag=0;
do{ _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); n--; }while(n);
}
/*****************************************************************
/***************************************************************** 函数功能:延迟子函数(晶振 12MHz),延时时间为 n 乘以 10us,n 最大为 255 入口参数:n 出口参数: *****************************************************************/ void delay_smg(unchar n) {
#define unint unsigned int
/****************************定义端口*******************************/
#define m1 P1_3
#define m2 P1_2
#define m3 P1_1
#define m4 P1_0
-4-
51 单片机实验板实验手册
程风明
2009 年 1 月 29 日
四、 源程序
#include<at89x51.h> #include<intrins.h> #define unchar unsigned char #define unint unsigned int /*****************************定义端口*****************************/ #define smg P2 //利用 P2_0 到 P2_5 由右向左依次选择要显示的数码管 #define dm P0 //利用 P0 口输出段码
{ do{ _nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
n--;
}while(n);
}
-8-
51 单片机实验板实验手册
程风明
2009 年 1 月 29 日
/******************************************************************** 函数功能:按矩阵键盘上的 16 个按键使最右边的数码管显示由 0 到 F 这 16 个数 入口参数: 出口参数: ********************************************************************/ void keyscan(void) {unchar m,n,a,b,c,d; m1=0; m2=0; m3=0; m4=0; if(n1==0||n2==0||n3==0||n4==0)
该实验板使用方便,只需利用短路帽进行电路的连接即可完成各
种实验。请结合电路图左上角的接口与下图说明理解该电路板的各引
脚的功能。
-2-
51 单片机实验板实验手册
电路图左上角的接口如下:
程风明
2009 年 1 月 29 日
该实验板利用 7805 构成了自己的稳压电路,为该实验板提供 +5V 的稳压电源。其电路图如下:
P07 分别与数码管的段码 SM1 至 SM8 依次连接,用于输出相应的段码;
使 P2 口的 P20 与数码管的位选 1 连接,利用一个数码管静态显示即
可完成实验。
四、源程序
#include<at89x51.h>
#include<intrins.h>
#define unchar unsigned char
unchar j,k;
unsigned long n;
-5-
51 单片机实验板实验手册
程风明
2009 年 1 月 29 日
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 语句
函数功能:延迟子函数(晶振 12MHz),延时时间为 n 乘以 10us,n 最大为 255
入口参数:n
出口参数:
********************************************************************/
void delay_jzaj(unchar n)
main()
{
unchar j;
while(1)
//循环显示 0、3、145、30705、860922 这五个正整
{
//数,以检验所编写的显示函数。
for(j=0;j<200;j++)
xianshi_smg(0);
for(j=0;j<200;j++)
xianshi_smg(3);
for(j=0;j<200;j++)
xianshi_smg(145);
for(j=0;j<200;j++)
xianshi_smg(30005);
for(j=0;j<200;j++)
xianshi_smg(860922);
}
}
-6-
51 单片机实验板实验手册
程风明
2009 年 1 月 29 日
实验二、4×4 矩阵式键盘识别实验
一、 实验任务 用 51 单片机的 P1 口接 4×4 矩阵键盘;在数码管上显示每个按
//m1 至 m4 分别对应实验板由上到下对应的行
#define n1 P1_4
#define n2 P1_5
#define n3 P1_6
#define n4 P1_7
//n1 至 n2 分别对应实验板由左向右对应的列
/********************************************************************
-1-
51 单片机实验板实验手册
程风明
2009 年 1 月 29 日
该实验板可以完成如下实验:
z 实验一、6 位 8 段数码管显示实验 z 实验二、4×4 矩阵式键盘识别实验 z 实验三、独立按键•发光二极管•蜂鸣器•继电器实验 z 实验四、定时/计数器 T0 作定时应用实验 z 实验五、基于 DS1302 的时钟实验 z 实验六、温度监测系统实验
该 51 单片机实验板,支持 AT89C51、AT89C52、AT89S51、AT89S52 这四款 51 单片机进行实验。它由 DS1302、DS18B20、AT24CXX(可以 更换 AT24C02、AT24C04、AT24C16 等存储容量大小不同的 EEPROM)、 蜂鸣器、继电器、六个数码管、四个发光二极管、一个四乘四的矩阵 键盘、四个独立按键、一个 1602 液晶接口等组成。如下图所示:
说明:J4 为心为负电压的 DC 插座;J5 为接正电压的针脚;J6 为接 负电压的针脚;J9 为接+5V 的针脚。
-3-
51 单片机实验板实验手册
程风明
2009 年 1 月 29 日
实验一、6 位 8 段数码管显示实验
一、 实验任务 显示六位数以内的任意正整数。若位数低于六位时,未用到的数
码管不能发光。比如,要显示 145 这个正整数,显示结果应为“145”, 而不能是“00145”。 二、 电路原理图
} 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;
-9-
51 单片机实验板实验手册
{ 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) { case 111: n=1;break; case 1011:n=2;break; case 1101:n=3;break; case 1110:n=4;break; default:break; } }
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=k<<1; k=~k; dm=0xff; smg=0xff; }
}
/*****************************主函数*******************************/
51 单片机实验板实验手册
作者:程风明 时间:2009 年 1 月 29 日 地点:山东聊城 邮箱:cfm12@126.com
51 单片机实验板实验手册
程风明
2009 年 1 月 29 日
51 单片机实验板说明
学习 51 单片机必须做大量的实验,与其说 51 单片机是学出来的, 倒不如说 51 单片机是“玩”出来的。就好像个人电脑一样,让你在 那看十天使用说明不如你亲自玩一天收获大。为了方便大家做一些 51 单片机的入门实验,制作了这块 51 单片机实验板。
{
//成立,i 增加 1,flag 置 1。无论 shu[j]
i++;
//为何值,if 语句皆成立。故,可完成 i
flag=1;
//记录所给正整数为几位数的功能。但,所
}
//给正整数若为零,会出现 i 为 0 这种情况,
dat=dat%n;
Байду номын сангаас
//故,需在最后判断 i 是否为 0。若 i 为 0,
}
//需将 i 置 1。