单片机课程
单片机开发板是用于学习51、STC、AVR型号的单片机实验设备。根据单片机使用的型号又有51单片机开发板、STC单片机开发板、AVR单片机开发板。常见配套有硬件、实验程序源码、电路原理图、电路PCB图等学习资料。例如电子人单片机开发板,针对部分学者需要特别配套有VB上位机软件开发,游戏开发等教程学习资料。开发此类单片机开发板的公司一般提供完善的售后服务与技术支持。单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
单片机(Microcontrollers)诞生于1971年,经历了SCM、MCU、SoC三大阶段,早期的SCM单片机都是8位或4位的。其中最成功的是INTEL的8051,此后在8051上发展出了MCS51系列MCU系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。 而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。高端的32位Soc单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。
常见配套资源如下:
1、硬件实验板及其配件如:连接线、CPU芯片、流水灯、点阵显示、ds18b20温度检测、彩色TFT液晶屏,SD卡,游戏开发(推箱子游戏)、收音机、mp3解码等。
2、实验程序源码,包含汇编源程序、C语言源程序。
3、电路原理图、PCB电路图。
4、实验手册、使用手册。
5、针对单片机开发板的详细讲解视频。
6、附加PCB设计制作、VB软件开发等计算机学习资料
1、8个LED灯,可以练习基本单片机IO操作,在其他程序中可以做指示灯使用。
2、2个四联8段数码管,显示温度数据,HELLO欢迎词、时钟等。
3、高亮8*8点阵,如练习数字,字母,图片显示,或者小游戏的开发如贪吃蛇等。
4、4个独立按键,可以配置为中断键盘,为程序的按键扫描节省更多的时间。 5、8个AD按键,主要设计为游戏开发如推箱子等,去掉了矩阵键盘,AD键盘在实际中的应用相当广泛,如电视机加减搜台等都是采用AD键盘,一根AD线可以扩展几百个按键,更接近工程。
6、PCF8591具有AD/DA功能,其采用IIC总线协议,可练习IIC总线的操作。
7、DS18B20温度检测:单线多点检测支持。
8、光敏电阻测试光线强度,感受白天黑夜的区别。
9、FM收音机:能接收80M到110MHz之间的FM频段。可实现自动搜台和手动搜台。
10、DS1302时钟芯片提供实时时钟,带3V电池,在掉电的情况下,时钟仍然可以继续运行。
11、可读写SD卡文件系统,保存数据显示到TFT液晶屏等。
12、继电器可以控制高电压的设备,高压危险,请小心使用。
13、直流电机接口,控制直流电机。
14、步进电机接口,控制步进电机运行。
15、蜂鸣器,可以做电子琴、音乐发声等。
16、74HC595芯片练习串行转并行数据扩展。
17、74HC573锁存扩展芯片,可以扩展接口。
18、ULN2003电机驱动芯片。(这里用它来驱动步进电机,直流电机,继电器和蜂鸣器)
19、MAX232串口数据传输延长发送距离。(可与计算机通信,同时也可做为STC单片机下载程序的接口) 20、PL2303下载单片机,一线下载,直接的USB下载方式,高速下载。
21、TFT液晶屏,单片机也可以控制彩屏了,让你的学习充满乐趣
22、nRF24L01无线数据传输芯片接口,可以插nRF24L01芯片,做高速无线数据传输。
23、LCD1602液晶接口,字符液晶两行,每行可以显示16个字符。
24、LCD12864带字库液晶接口。
25、LCD12864图形液晶接口。
26、DS18B20单线多点温度采集接口。一根线上便可拓展多个DS18B20温度传感器,先提供两个。
27、提供ISP下载接口,可下载AVR、AT的单片机。支持AVR单片机。
28、40针扩展接口,可以无限扩展。以后的DZR-01A开发板配件将从此端口扩展出去。
29、PS2鼠标键盘接口。配合红外遥控器甚至可以遥控我们的电脑!(配例程)
30、AVR/51复位按键。可以复位51 STC AVR单片机,全部支持
31、TEA5767的IIC总线控制。学习IIC控制
32、SD卡的SPI总线控制。扩展大容量存储器
33、红外遥控接收器,可采集红外遥控发出的信号,可使用遥控信号控制其他设备。
34、外接5V供电电源座。
35、RXD、TXD、POWER电源指示灯
36、40PIN紧锁座(非常方便单片机芯片的取放)
37、带LM1117-3.3稳压芯片(为彩屏液晶,SD卡和无线模块供电)
38、USB供电(USB可以提供500MA的电流,完全能满足开发板的需求了)
39、预留电源+5V,GND接口各四个(方便用户扩展其他外围电路时取电和共地)
学习51单片机必须做大量的实验,与其说51单片机是学出来的,倒不如说是“玩”出来的。就好像个人电脑一样,让你在那看十天使用说明不如你亲自玩一天收获大。为了方便大家做一些51单片 http://www.fulinmenst.com/ccgx/index.html 机的入门实验,制作了这块51单片机实验板。 该51单片机实验板,支持AT89C51、AT89C52、AT89S51、AT89S52这四款51单片机进行实验。它由DS1302、DS18B20、AT24CXX(可以更换AT24C02、AT24C04、AT24C16等存储容量大小不同的EEPROM)、蜂鸣器、继电器、六个数码管、四个发光二极管、一个四乘四的矩阵键盘、四个独立按键、一个1602液晶接口等组成。如下图所示:
电路图左上角的接口如下:
该实验板利用7805构成了自己的稳压电路,为该实验板提供
+5V的稳压电源。其电路图如下:
说明:J4为心为负电压的DC插座;J5为接正电压的针脚;J6为接负电压的针脚;J9为接+5V的针脚。
实验板上硬件连接
利用短路帽,使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
- 5 -
四、 源程序
#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口输出段码
/***************************************************************** 函数功能:延迟子函数(晶振12MHz),延时时间为n乘以10us,n最大为255 入口参数:n 出口参数:
*****************************************************************/ void delay_smg(unchar n) {
do{
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); n--;
}while(n); }
/***************************************************************** 函数功能:显示六位数以内的正整数,最高位不显示零 入口参数:dat 出口参数: *****************************************************************/ void xianshi_smg(unsigned long dat) {
bit flag=0; //标志位
unchar i=0; //确定所给正整数为几位数
unchar shu[6]; //由0至5依次存放所给正整数的由高到低各位上的
数 unchar code code0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80, 0x90};//将数码管的段码定义到程序存储区
unchar j,k;
unsigned long n;
- 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语句皆成立。故,可完成i flag=1; //记录所给正整数为几位数的功能。但,所 } //给正整数若为零,会出现i为0这种情况,
dat=dat%n; //故,需在最后判断i是否为0。若i为0,
行 #define n1 P1_4 #define n2 P1_5 #define n3 P1_6
#define n4 P1_7 //n1至n2分别对应实验板由左向右对应的列
/******************************************************************** 函数功能:延迟子函数(晶振12MHz),延时时间为n乘以10us,n最大为255 入口参数:n 出口参数:
********************************************************************/ void delay_jzaj(unchar n) { do{ _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); n--;
}while(n); }
- 9 -
/******************************************************************** 函数功能:按矩阵键盘上的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) {
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;
}
}
} 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;
- 10 -
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;
}
}
}
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()
转载请保留出处,http://www.360docs.net/doc/info-f8f292a91eb91a37f0115c70.html
联系客服