收藏 分销(赏)

关于单片机最小系统板的制作总结.docx

上传人:二*** 文档编号:4512617 上传时间:2024-09-26 格式:DOCX 页数:14 大小:463.61KB 下载积分:5 金币
下载 相关 举报
关于单片机最小系统板的制作总结.docx_第1页
第1页 / 共14页
本文档共14页,全文阅读请下载到手机保存,查看更方便
资源描述
关于单片机最小系统板的制作总结 通过制作最小系统板,我们对单片机内部硬件结构、工作原理 有了基本的认识,同时掌握了程序设计的基本方法;其次,我们学会 了电子电路设计的基本流程,熟悉了 89C51/C52芯片及一些基础电 路。最后,我们学会了基于C语言的Proteus仿真,熟悉了调试单片 机的应用系统的一般方法! 一.系统设计.最小系统 采用89C52芯片,外接时钟电路,复位电路。芯片的所有引脚 与排针相连,以方便以后的使用,并且特别引出了特殊引脚,以与其 它引脚区分。 1 .实现跑马灯 在系统板的P2端口,从P20—P27 I/O端口依次连接一个发光 管二极管,在软件的控制下实现花样跑马灯! 2 .电路 本次设计使用单片机芯片STC89C52,单片机最小系统电路如下: LED3=0xfe;for (i = 0 ;i < 8 ; i++) (P2 = LED3; de I ay (15000);LED3 = LED3« 1 ; LED3 = LED3 | 0x01;if (LED3 == 0x7f) break; }for (i = 0 ;i < 8 ; i++) (P2 二 LED3; delay (15000);LED3= LED3 » 1; LED3 二 LED3 | 0x80;) )仿真效果图3 五.小结 此51单片机最小系统板功能简单但乐趣甚多,制作过程简单易 学,作品完成后为我们带来了视觉上的成就感,尤其让我们对电子产 品的制作产生了极大的兴趣! 这几天的单片机的学习,我们在理论的基础上更深刻的掌握了单片机的深层内容,同时锻炼了我们的动手能力和思维能力,还有在软 件方面的编程能力。 附录资料:不需要的可以自行删除Abstract: Based on the comprehensive analysis on the plastic part's structure service requirement, mounding quality and mould menu factoring cost. A corresponding injection mould of internal side core pulling was designed. By adopting the multi-direction and multi-combination core-pulling. A corresponding injection mould of internal side core pulling was designed, the working process of the mould was introduced C语言详解-枚举类型 注:以下全部代码的执行环境为VC++6.0 在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这 项工作,您的代码可能是: # define MON 1dcfine TUE 2 # define WED 3define THU 4 # define FRI 5define SAT 6 # define SUN 7在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。 1 .定义一种新的数据类型-枚举型 以下代码定义了这种新的数据类型-枚举型enum DAY ( MON= 1, TUE, WED, THU, FRI, SAT, SUN}; (1)枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号, 隔开。 (2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。 (3)第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。 (4)可以人为设定枚举成员的值,从而自定义某个范围内的整数。 (5)枚举型是预处理指令#dehne的替代。 (6)类型定义以分号;结束。 2 .使用枚举类型对变量进行声明新的数据类型定义完成后,它就可以使用了。我们己经见过最基本的数据类型,如:整型ini, 单精度浮点型fl。叫双精度浮点型double,字符型char,短整型short等等。用这些基本数据 类型声明变量通常是这样: char a; 〃变晟a的类型均为字符型charcharletter; intx,y, z; 〃变量x,y和z的类型均为整型intint number; double m, n;double result; 〃变量result的类型为双精度浮点型double 既然枚举也是一种数据类型,那么它和基本数据类型一样也可以对变量进行声明。 方法一:枚举类型的定义和变量的声明分开enum DAY ( MON= I, TUE, WED, THU, FRI, SAT, SUN }; enum DAY yesterday;enum DAY today; enum DAY tomorrow; 〃变量 tomorrow 的类型为枚举型 enum DAYenum DAY good_day, bad_day; //变量 good_day 和 bad_day 的类型均为枚举型 enum DAY 方法二:类型定义与变量声明同时进行: enum//跟第一个定义不同的是,此处的标号DAY省略,这是允许的。 (Saturday, sunday = 0, monday, tuesday, Wednesday, thursday, friday } workday; //变量workday的类型为枚举型enum DAYenum week { Mon=k Tue, Wed, Thu, Fri Sat, Sun} days; 〃变量 days 的类型为枚举型 enum week enum BOOLEAN { false, true } end_flag, match_flag; 〃定义枚举类型并声明了两个枚举型变 量方法三:用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明: typedef enum workday ( Saturday, sunday = 0, monday, tuesday, Wednesday, thursday, friday} workday;//此处的workday为枚举型enum workday的另U名 workday today, tomorrow; 〃变量 today 和 tomorrow 的类型为枚举型 workday,也即 enum workday enum workday 中的 workday 可以省略: typedef enum ( Saturday, sunday = 0, monday, tuesday, Wednesday, thursday, friday} workday; 〃此处的workday为枚举型enum workday的别名 workday today, tomorrow; 〃变量 today 和 tomorrow 的类型为枚举型 workday,也即 enum workday 也可以用这种方式: typcdcf enum workday ( Saturday, sunday = 0, monday, tuesday, Wednesday, thursday, friday };workday today, tomorrow; 〃变量 today 和 tomorrow 的类型为枚举型 workday,也即 enum workday 注意:同一个程序中不能定义同名的枚举类型,不同的枚举类型中也不能存在同名的命名常 量。错误例如如下所示: 错误声明■:存在同名的枚举类型typedef enum { Wednesday, thursday, friday } workday;typedef enum WEEK Saturday, sunday = 0, monday, } workday;错误声明二:存在同名的枚举成员 typedef enum ( Wednesday, thursday, friday )workday」;typedef enum WEEK ( Wednesday, sunday = 0, inonday, )workday_2;.使用枚举类型的变量 2.1 对枚举型的变量赋值。 实例将枚举类型的赋值与基本数据类型的赋值进行了比照: 方法一:先声明变量,再对变量赋值#include<stdio.h> /*定义枚举类型*/enum DAY { MON=1,TUE, WED, THU, FRL SAT, SUN }; void main() ( /*使用基本数据类型声明变量,然后对变量赋值*/ int x, y, z; x = 10; y = 20; z = 30; /*使用枚举类型声明变量,再对枚举型变量赋值*/ cnum DAY yesterday, today, tomorrow; yesterday = MON; today = TUE; tomorrow = WED; printf("%d %d %d \n", yesterday, today, tomorrow);) 方法二:声明变量的同时赋初值#include <stdio.h> /*定义枚举类型*/enum DAY { MON=1,TUE, WED. THU. FRI. SAT, SUN }; void main()( /*使用基本数据类型声明变量同时对变量赋初值*/ int x=10, y=20, z=30; /*使用枚举类型声明变量同时对枚举型变量赋初值*/ enum DAY yesterday = MON,today = TUE. tomorrow = WED; printf("%d %d %d \n", yesterday, today, tomorrow);I 方法三:定义类型的同时声明变量,然后对变量赋值。 #include <stdio.h>/*定义枚举类型,同时声明该类型的三个变量,它们都为全局变量*/ enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } yesterday, today, tomorrow;/*定义三个具有基本数据类型的变量,它们都为全局变量*/ int x, y, z; void main()( /*对基本数据类型的变量赋值*/ x= 10; y = 20; z = 30; /*对枚举型的变量赋值*/ yesterday = MON; today = TUE; tomorrow = WED; printf("%d %d %d \n'\ x, y, z); 〃输出:10 20 30 printf("%d %d %d \n", yesterday, today, tomorrow); 〃输出:I 2 3) 方法四:类型定义,变量声明,赋初值同时进行。 #include <stdio.h>/*定义枚举类型,同时声明该类型的三个变量,并赋初值。它们都为全局变量*/ enum DAY | MON=h TUE, WED, THU, FRI, SAT, SUN) yesterday = MON, today = TUE, tomorrow = WED;/*定义三个具有基本数据类型的变量,并赋初值。它们都为全局变量*/ int x = 10, y = 20. z = 30;void main() ( printf("%d %d %d \n", x, y, z); //输出:1020 30 printf("%d %d %d \n", yesterday, today, tomorrow); 〃输出:1 2 3) 2.2 对枚举型的变量赋整数值时,需要进行类型转换。 #include <stdio.h>enum DAY { MON=I,TUE, WED, THU, FRI, SAT, SUN }; void main()( enuin DAY yesterday, today, tomorrow; yesterday = TUE; today = (enum DAY) (yesterday + I); 〃类型转换 tomorrow = (enum DAY) 30; 〃类型转换 //tomorrow = 3; 〃错误 printf("%d %d %d \n", yesterday, today, tomorrow); 〃输出:2 3 30使用枚举型变量 #include<stdio.h> enum BELL BACKSPACE = '\b\ HTAB= M', RETURN=V, NEWLINE = '\n; VTAB= '\v; SPACE="}; enum BOOLEAN { FALSE = 0, TRUE } match_flag;void main() ( int index = 0; int count_of_letter = 0; int count_oLspace = 0; char str[] = "I'm Ely efod"; match_flag = FALSE; for(; str[index] != *\0'; index++) if( SPACE != str[indcx]) count_of_letier++;else match_flag = (enum BOOLEAN) 1;count_of_space++; prinlf("%s %d times %cH, match_flag ? "match": "not match", counc_oLspace, NEWLINE); printf("count of letters: %d %c%c", count_oUetter, NEWLINE, RETURN): 输出: match 2 timescount of letters: 10 Press any key to continue 4.枚举类型与sizeof运算符#include <stdio.h> enum escapes ( BELL = 3a',BACKSPACE = '\b\ HTAB= *', RETURN= V', NEWLINE= '\n', VTAB=W, SPACE= 一}; enum BOOLEAN { FALSE = 0, TRUE } match_flag;void main() ( printf("%d bytes \n'\ sizcof(cnum escapes)); //4 bytes printf("%d bytes \n", sizeof(escapes)); //4 bytespnntf("%d bytes \n'\ sizeof(enum BOOLEAN)); //4 bytes printf("%d bytes \n", sizeof(BOOLEAN)); //4 bytes printf("%d bytes \n'\ sizeof(match_flag)); //4 bytes printf("%d bytes \n'\ sizeof(SPACE)); //4 bytes printf("%d bytes \n", sizeof(NEWLINE)); //4 bytes printf("%d bytes \n", sizeof(FALSE)); //4 bytes printf("%d bytes \n'\ sizeof(0)); //4 bytes } 5.综合举例 #include<stdio.h>enum Season spring, sunimer=100, fall=96, winter); 二.硬件单元电路 1 .复位电路 本次设计复位电路采用的是上电复位方式。上电复位时通过外部 复位路的电容充电来实现的,为了保证复位成功,只要RST引脚保持 足够时间。复位电路如下列图所示 .时钟电路 本次设计采用的是12MHz的晶振,两只电容在20pF〜100pF之间 取值,其取值在60pF〜70pF时振荡器频率稳定性较高,按照一般经验, 外接晶体时两个电容取值为30pF,本次设计选为30pF。晶振电路如typcdcf cnum ( Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday) Weekday;void main() ( /* Season */ printf("%d \n", spring); // 0 printf("%d, %c \n", summer, summer); // 100. d printf("%d \n", fall+winter); // 193 Season mySeason=winter; if(winter==mySeason)printf("mySeason is winter \n"); // mySeason is winter ini x=100; if(x==summcr)printf("x is equal to summer\n"); // x is equal to summer printf("%d bytes\n", sizeof(spring)); // 4 bytes /* Weekday */ printf("sizeof Weekday is: %d \n", sizeof(Weekday)); //sizeof Weekday is: 4 Weekday today = Saturday; Weekday tomorrow; if( today == Monday)tomorrow = Tuesday; elsetomorrow = (Weekday) (today + 1); //remember to convert from int to Weekday 本文来自CSDN--xiaobal32966博客 下列图所示 2 . 89C52芯片引脚 43333333333222222222 P1. 0 [: P1. 1 C P1. 2 C P1. 3 C Pl.4 EM0SI/P1. 5 C MI S0/P1.6 C SCK/P1. 7 匚 RST匚RXD/P3. 0 C TXD/P3. 1 CINT0/P3. 2 C INT1/P3. 3 ET0/P3.4 C X1/P3. 5 C WP3.6 C 而,P3. T C XTAL2 C XTAL1 C PDIP GND 匚□ Vcc □ PO. O/ADO □ PO. 1ZAD1 □ PO. 2/AD2 □ PO. 3/AD3 □ P0.4/AD4 □ PO. 5/AD5 □ PO. 6/AD6 □ PO. 7/AD7EA/VPP □ ALE/PROGPESN □ P2. 7ZA15 □ P2.6/A14 □ P2. 5/A13 □ P2. 4/A12 □ P2. 3ZA11 □ P2. 2ZA10P2. 1/A9 □ P2. 0/A8 通过学习,我们认识到:STC89C52是一种低功耗、高性能CM0S8 位微控制器,具有8K在系统可编程Flash存储器。使用高密度非易 失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片 上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯 片上,拥有灵巧的8位CPU和在线系统可编程Flash使得STC89c52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 STC89C52具有以下标准功:8k字节Flash256字节RAM, 32位I/O 口 线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个 6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另夕卜, STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。 空闲模式下,CPU停止工作允许RAM、定时器/计数器、串口、中断继 续工作。 三.材料详单.系统组件 89c51芯片,晶振(12MHZ, 1个),30pf电容(2个),20pf电容 (2个),电阻(10K, 1个),单排插针;.跑马灯 电阻(10K, 10个),发光二极管(10个);.焊接工具 烙铁,烙铁架,焊锡。 四.软件局部.依次循环亮 #i ncIude <reg52. h>void de I ay (uns i gned int i); void de I ay (uns i gned i nt i) uns igned char j; for (i; i > 0; i-)for(j = 255; j > 0; j—); }char LED;ma i n () ( uns i gned char i; while (1) { LED = Oxfe;for (i = 0 ;i < 4 ; i++) (P2 二 LED; de I ay (500);LED = LED « 1; LED 二 LED | 0x01;) for (i = 0 ;i < 4 ; i++)( P2 二 LED;de I ay (500); LED = LED » 1;LED = LED | 0x80; 仿真效果图1 1 .两边往中间跑#i ncIude<reg52.h> void delay (int t) ( i nt i ; for (i=0;i<t;i++);) i nt Ied[4] = {0x7e, Oxbd, Oxdb, 0xe7}; void ma in(void)( i nt i ;P2=0xff; whi le(1)for (i=0;i<4;i++) (P2=led[i]; de I ay (20000);) for (i=3;i;i-)( P2=led[i];delay (20000); 仿真效果图2 仿真效果图2 a壹 ”•丁 ・ 丁 •丁TT, 3依次累加 #incIude<reg52. h> void delay (int t)( i nt i ; for (i=0;i<t;i++);) uns i gnedi ntIed1[8] = {0x7f,0x3f,0x1f,OxOf, 0x07,0x03,0x01,0x00); i nt Ied2[4] = {0x7e, Oxbd, Oxdb, 0xe7); char LED3; void ma in(void)( int i,j,q; P2=0xff; whi le(1) {for (q=0;q<1;q++) for (i=1;i<9;i++)P2=led1 [j]; delay (10000);} )for (q=0;q<2;q++) (for (i=0;i<4;i++) (P2=led2[i]; de I ay (15000);} for(i-3;i;i-)( P2=led2[i];de I ay (15000); 1) for (q=0;q<2;q++)
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服