1、XD单片机学习板使用手册V20XD2007/8单片机学习板 使用手册 版本:V2.00ZJ单片机学习网完成日期:2009-09-10 目 录第1章 XD2007/8单片机学习板功能简介 1.1 概述 1.2. XD2007/8单片机学习板主要功能 1.3. STC89C52RC单片机性能 1.4. STC89系列单片机选型第2章 XD2007/8单片机学习板原理电路说明第3章 XD2007/8单片机学习板实践指导 3.1 基本入门实践部分1. 基本I/O口的输出实践2. 基本I/O口的输入实践3. 总线操作实践3.2 综合提高实践部分1. 单片机I/O串口实践2. 单片机点阵汉字显示实践3单片
2、机A/D、D/A综合实验4. 单片机秒表、报警综合实验5. 单片机温度测量、通信综合实验第5章 XD2007/8单片机学习板的功能扩展第4章 Keil软件平台与STC_ISP下载软件的安装使用 4.1 Keil软件平台的安装使用 4.2 STC_ISP下载软件的安装使用第6章 常见问题 第1章 XD2007/8单片机学习板功能简介1.1 概述XD2007/8单片机电路板是专为在校学生和单片机爱好者开发的一款单片机学习板,亦可作为工程人员开发参考之用。本学习板采用51内核的STC89C5x系列单片机为核心控制器,指令集与MCS-51完全兼容,是学习51系列单片机入门或提高开发技能的好平台。针对课
3、程和学习提高要求,编写了多个实践测试程序,对全面学习和掌握单片机开发技能很有帮助。由于该板选择了STC系列单片机,对于程序(目标码)下载提供了便利(只用串口即可完成)。1.2 XD2007/8单片机学习板主要功能 XD2007/8单片机学习板如图1所示。 从图1可以看出,XD2007/8学习板可以直接学习的内容有: 完全可以学习STC89C5x单片机的所有资源(中断、定时/计数、E2PROM等操作); 通过蜂鸣器与按键学习I/O口的操作; 通过LED灯学习总线的编程控制方法; 通过A/D变换器学习数据采集的编程与热敏电阻测温原理; 通过D/A变换器学习数字量到模拟量的转换及各种波形的产生原理;
4、 通过DS18B20数字温度传感器学习单线I/O接口编程方法; 通过1616点阵学习图形或汉字的显示原理; 通过74HC595学习串进并出编程方法与动态显示原理; 通过UART串口学习单片机与PC机的通信方法和编程技巧; 通过总线接口完全可以实现其它扩展功能。1.3 STC89C52RC单片机性能 1个8位字长的CPU和指令系统; 1个片内振荡器及时钟电路; 内部有8KB的E2PROM(程序存储器); 64KB的外部程序存储器寻址空间; 64KB的外部数据存储器寻址空间(片内集成有256字节RAM); SRAM数据存储器256字节(分低128字节和高128字节); 片内有2K字节E2POM;
5、3个16位定时器/计数器; 1个可编程的全双工串行接口; 32条可编程的I/O端口(分4个8位并行I/O端口); 有6个中断源、2个优先级中断控制器; 1个布尔处理器; 有111条指令; 有内部看门狗定时器; 有双数据指针(双DPTR); 时钟可加倍; 高抗电(ESD)保护; 低功耗,掉电0.1A、正常4mA7mA; 有DIP-40脚封装及TQFP-44脚封装。1.4 STC89系列单片机选型 STC89系列单片机选型见表1所示。 注:STC系列单片机网站:www.mcu-第2章 XD2007/8单片机学习板原理电路说明XD2007/8 学习板原理电路如图2图6所示。其中,图2是STC89C5
6、xCPU、总线锁存器(74HC573)、外部扩展接口(74HC573)、上电复位电路、时钟电路和DS18B20测温等部分。图3是地址译码器(U6,74HC138)、RS232串口电平转换(RS232)、A/D转换器(TLC549)、D/A转换器(TLC5615)、按键及LED灯等电路部分。图4是 1616点阵显示器驱动电路(2U1、2U2、2U7和2U8)、总线扩展接口及电源等部分。图5是1616点阵显示器原理电路。图6是 XD2007/8单片机学习板印制板(PCB)图。第3章 XD2007/8单片机学习板实践指导 XD2007/8单片机学习板软件编程既可以用51汇编也可以用C51编写。考虑到
7、程序的可读性,本指导用C语言编写。对于每一例子经“Keil Vision2” 编译成“文件名.HEX”文件后,再由“STC_ISP_V3.5”下载软件将“文件名.HEX”烧入XD2007/8学习板即可看到结果。3.1 基本入门实践部分1. 基本I/O口的输出实践通过图2中的蜂鸣器电路(V1与蜂鸣器),经SPEAK(P1.0引脚)控制其发声。源程序如下:#include reg52.h sbit SPEAK=P10; /定义蜂鸣器引脚 void delay(unsigned int x) /延时函数 unsigned int i; for (i=0;i0x4000) j=0x200; 2. 基本
8、I/O口的输入实践 通过图2的蜂鸣器与图3的K1、K2实现按键输入操作功能,当按K1时停止发声,当按K2时又继续发声。源程序如下: #include reg52.h sbit SPEAK=P10; /定义蜂鸣器引脚 sbit K1=P11; /定义K1按键 sbit K2=P24; /定义K2按键 void delay(unsigned int x) /延时函数 unsigned int i; for (i=0;i0x4000) while(1) j=j-0x300; SPEAK= SPEAK; /产生波形发声 delay(j); /延时变调 if (j0x100) goto start; i
9、f(K1=0) goto k1; /按K1停止发声 k1: while(1) SPEAK=1; /关声音 if (K2=0) goto start; /按K2开始发声 3. 总线操作实践 通过图2的U4、图3的U6及总线LED指示灯实现的LED等闪烁功能。如果用汇编程序其指令是“MOVX指令”,如果用C程序则用指针操作,源程序如下: #include reg52.h sbit SPEAK=P10; /定义蜂鸣器引脚 void delay(unsigned int x) /延时函数 unsigned int i; for (i=0;ix;i+); void main(void) unsigned
10、 char xdata *p1; /定义指针变量,指向外部存储器空间 unsigned char idata y; /定义数据 y=0x05; p1=0x1000; /指向1000H口地址(LED灯) while(1) SPEAK= SPEAK; /产生波形发声 delay(0x6000); /延时 y=y; /LED等数据取反 *p1=y|0x80; /LED灯闪烁点亮(总线操作) 3.2 综合提高实践部分1. 单片机I/O串口实践一、实验电路描述在实际应用当中,利用普通I/O口作串进并出是常用方法。图4中,两个74HC595级联实现16位串进并出是点阵显示器的行驱动电路。如果目的不只是点阵
11、显示器的行驱动也可用于其他16个控制(数字)输出的应用。二、软件编程根据74HC595的工作时序结合图4:由LEDDI(14脚)依次送入高位串行数据(D15D0)位;在每1位有效后,必由LEDCLK(11脚)输入时钟(上升沿有效);当对应16位数据均输入器件后,由LEDALE(12脚)送入低到高的锁存信号。数据立即再现到1L16L端口。C程序如下:#include /*包含52资源定义头文件*/sbit LEDALE=P13; /*定义74HC595锁存信号*/sbit LEDDI=P17; /*定义74HC595的串行输入信号*/sbit LEDCLK=P33; /*定义74HC595的时钟
12、信号*/void delay_l(unsigned int n) /*长延时*/ unsigned int i; for(i=0;in;i+); /*串行输出16位数据函数*/ void out_16bit(unsigned int numb) unsigned char i; unsigned int x; x=numb; LEDALE=0,LEDCLK=0; /*接口初始化*/ for(i=0;i16;i+) LEDDI=(x & 0x8000); /*如果x & 0x8000为真LEDDI=1*/ LEDCLK=1;LEDCLK=1; /*送时钟上升沿*/ LEDCLK=0;LEDCLK
13、=0; x=x1; /*数据左移1位*/ LEDALE=1; /*送锁存信号上升沿*/ LEDALE=0; void main(void) /*测试主函数*/ unsigned char xdata *Y0; /*定义外部指针变量*/ unsigned int x; unsigned char i,j=0; Y0=0x1000; /*将外部地址1000H赋给Y0*/ x=0x5555; while(1) /*在第1-16列上显示x的值,操作U4*/ x=x; /*x数值取反*/ for(i=0;i16;i+) out_16bit(x); /*输出x的非*/ j=i;j=3; /*计算合理的列值
14、*/ *Y0=j; delay_l(0x4000); /*延时*/ /*while(1)结束*/ /*main结束*/在本例中读者如果将“delay_l(0x4000)”延时函数中的0x4000,改成0x30后,再观看显示结果有何不同。2. 单片机点阵汉字显示实践一、硬件电路描述市面上已有很多有关点矩阵显示器的产品,如广告活动字幕机、股票显示板、活动布告栏等。它的优点是可按需要的大小、形状、单色或彩色来组合,可与计算机或单片机系统连接,做各种广告性文字或图形显示。点阵式LED显示器的种类可分为57、58、68、88等4种;而按LED发光变化颜色来分,可分为单色、双色、三色;按LED的极性排列方
15、式又可分为共阳极与共阴极。本实验作为一种原理性的学习,采用4块88的共阳极单色点阵式LED组成1616的点阵来显示汉字或图形。1616的点阵电路如图5所示。16行驱动与16列译码电路如图4所示。2片74HC138译码输出控制图4的三极管的16列。而2片74HC595连接起来作为16位数据的输出控制图5的16行。采用这种电路可以大大减少单片机I/O管脚的使用,而且可扩展更多的点阵驱动。读者通过基本LED点阵屏的编程练习,可以实现“静态”、“动态”和“滚屏”显示汉字或图形的方法,从中可以获得学习单片机的乐趣。二、软件编程根据XD2008综合实验电路,用C实现的汉字静态及动态显示程序如下:#incl
16、ude /*包含52资源定义头文件*/ #include /*XBYTE的头文件*/ sbit LEDALE=P13; /*定义74HC595锁存信号*/ sbit LEDDI=P17; /*定义74HC595的串行输入信号*/ sbit LEDCLK=P33; /*定义74HC595的时钟信号*/ sbit K1=P11; /*k1按键输入脚*/ sbit K2=P24; /*k2按键输入脚*/ #define Y0 XBYTE0x1000 /*Y0的口地址*/ unsigned char led123; /*定义LED灯变量*/ /*-有关汉字显示字模-*/ unsigned int co
17、de dis_numb116=0x4000,0x4FFE,0x4814,0x4824, 0x4844,0x7F84,0x4804,0x4804,0x4804,0x7F84,0x4844,0x4844, 0x4844,0x4FFE,0x4000,0x0000;/*西*/unsigned int code dis_numb216=0x0101,0x0901,0x3101,0x2102, 0x21E2,0x2F14,0xA514,0x6108,0x2114,0x2124,0x21C2,0x2103, 0x2902,0x3100,0x2100,0x0000;/*安*/unsigned int code
18、 dis_numb316=0x0000,0x0000,0x1FF0,0x1220, 0x1220,0x1220,0x1220,0xFFFC,0x1222,0x1222,0x1222,0x1222, 0x1FF2,0x0002,0x000E,0x0000;/*电*/unsigned int code dis_numb416=0x0080,0x0080,0x4080,0x4080, 0x4080,0x4082,0x4081,0x47FE,0x4880,0x5080,0x6080,0x4080, 0x0080,0x0180,0x0080,0x0000;/*子*/unsigned int code d
19、is_numb516=0x0820,0x4840,0x4980,0x4E00, 0x7FFF,0x8A00,0x8920,0x0020,0x4420,0x3340,0x0040,0x0040, 0xFFFF,0x0080,0x0080,0x0000;/*科*/unsigned int code dis_numb616=0x1080,0x1082,0x1101,0xFFFE, 0x1200,0x1402,0x0002,0x1304,0x12C8,0x1230,0xFE30,0x1248, 0x1384,0x1206,0x1004,0x0000;/*技*/unsigned int code dis
20、_numb716=0x0400,0x0401,0x0402,0x0404, 0x0408,0x0430,0x05C0,0xFE00,0x0580,0x0460,0x0410,0x040C, 0x0406,0x0403,0x0402,0x0000;/*大*/unsigned int code dis_numb816=0x0200,0x0C40,0x0840,0x4840, 0x3A40,0x2A40,0x0A42,0x8A41,0x7AFE,0x2B40,0x0A40,0x1840, 0xEA40,0x4C40,0x0840,0x0000;/*学*/unsigned int code dis_n
21、umbz0= 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/*不显示*/ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,0x0FFA,0x0000,0x0000,0x0000,/*!*/ 0x0000,0x4040,0x4042,0x5F43,0x5264,0x5254,0x7E48,0x52
22、48, 0x5248,0x5254,0x7FD4,0x5272,0x5242,0x5F41,0x4041,0x4040,/*要*/ 0x0000,0x1002,0x1002,0x1012,0x97D2,0x9552,0x9552,0x9552, 0xFFFE,0x5552,0x5552,0x5552,0x57D2,0x5012,0x1002,0x1002,/*重*/ 0x0000,0x0004,0x0046,0x7ECC,0x5258,0x5220,0x53C8,0x5204, 0x5202,0x7FFF,0x0002,0x5800,0xC400,0x23FF,0x1100,0x0880,/*
23、很*/ 0x0000,0x0906,0x2941,0x3922,0x491C,0x0970,0xFF88,0x0484, 0x0482,0x0008,0x7C88,0x4488,0x47FC,0x4404,0x7CFC,0x0004,/*践*/ 0x0000,0x2040,0x3040,0x2842,0x2047,0x2048,0x2050,0x6FE0, 0xA050,0x2948,0x2DC4,0x3242,0x2042,0x3041,0x0841,0x0000,/*实*/ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0
24、x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000; unsigned int code dis_numbz= 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/*不显示*/ 0x0000,0x2040,0x3040,0x2842,0x2047,0x2048,0x2050,0x6FE0, 0xA050,0x2948,0x2DC4,0x3242,0x2042,0x
25、3041,0x0841,0x0000,/*实*/ 0x0000,0x0906,0x2941,0x3922,0x491C,0x0970,0xFF88,0x0484, 0x0482,0x0008,0x7C88,0x4488,0x47FC,0x4404,0x7CFC,0x0004,/*践*/ 0x0000,0x0004,0x0046,0x7ECC,0x5258,0x5220,0x53C8,0x5204, 0x5202,0x7FFF,0x0002,0x5800,0xC400,0x23FF,0x1100,0x0880,/*很*/ 0x0000,0x1002,0x1002,0x1012,0x97D2,0x
26、9552,0x9552,0x9552, 0xFFFE,0x5552,0x5552,0x5552,0x57D2,0x5012,0x1002,0x1002,/*重*/ 0x0000,0x4040,0x4042,0x5F43,0x5264,0x5254,0x7E48,0x5248, 0x5248,0x5254,0x7FD4,0x5272,0x5242,0x5F41,0x4041,0x4040,/*要*/ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,0x0FFA,0x0000,
27、0x0000,0x0000,/*!*/ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000; void delay_l(unsigned int n) /*长延时*/ unsigned int i; for(i=0;in;i+); void delay_s(unsigned char n) /*短延时*/ unsigned int i; for(i=0;in;i+); /*串行输出16位行数据函数*/ void displ
28、ay_r(unsigned int numb) unsigned char i; unsigned int x; x=numb; /*数据取反*/ LEDALE=0,LEDCLK=0; for(i=0;i16;i+) LEDDI= (x & 0x8000); LEDCLK=1;LEDCLK=1; LEDCLK=0;LEDCLK=0; x=x1; Y0=led123 | 0x80; /*退出时关显示器D=1*/ LEDALE=1; LEDALE=0; /*正显示1616点阵汉字*/ void disp_16rz(unsigned int numb) unsigned char y0data=0,abcd=0,i,j; for(i=0;i16;i+) display_r(numbi); /*送行数据*/ j=abcd3; /*计算列的位置*/ y0data=j |(led123 & 0x07); Y0=y0data; /*显示一列数据*/ abcd+; /*列加1*/
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1