1、关于单片机最小系统板的制作总结通过制作最小系统板,我们对单片机内部硬件结构、工作原理 有了基本的认识,同时掌握了程序设计的基本方法;其次,我们学会 了电子电路设计的基本流程,熟悉了 89C51/C52芯片及一些基础电 路。最后,我们学会了基于C语言的Proteus仿真,熟悉了调试单片 机的应用系统的一般方法!一.系统设计.最小系统采用89C52芯片,外接时钟电路,复位电路。芯片的所有引脚 与排针相连,以方便以后的使用,并且特别引出了特殊引脚,以与其 它引脚区分。1 .实现跑马灯在系统板的P2端口,从P20P27 I/O端口依次连接一个发光 管二极管,在软件的控制下实现花样跑马灯!2 .电路本次
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单片机最小系统板功能简单但乐趣甚多,制作过程简单易 学,作品完成后为我们带来了视觉上的成就感,尤其让我们对电子产 品的制作产生
3、了极大的兴趣!这几天的单片机的学习,我们在理论的基础上更深刻的掌握了单片机的深层内容,同时锻炼了我们的动手能力和思维能力,还有在软 件方面的编程能力。附录资料:不需要的可以自行删除Abstract: Based on the comprehensive analysis on the plastic parts structure service requirement, mounding quality and mould menu factoring cost. A corresponding injection mould of internal side core pulling wa
4、s 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
5、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)第一
6、个枚举成员的默认值为整型的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
7、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 方法
8、二:类型定义与变量声明同时进行: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 weekenum BOOLEAN false, true end_flag, match_flag; 定义枚举类型并声明了两个枚举型变 量方法三:用typ
9、edef关键字将枚举类型定义成别名,并利用该别名进行变量声明: 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
10、, 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 和 tom
11、orrow 的类型为枚举型 workday,也即 enum workday注意:同一个程序中不能定义同名的枚举类型,不同的枚举类型中也不能存在同名的命名常 量。错误例如如下所示:错误声明:存在同名的枚举类型typedef enum Wednesday, thursday, friday workday;typedef enum WEEKSaturday,sunday = 0, monday, workday;错误声明二:存在同名的枚举成员typedef enum (Wednesday, thursday, friday )workday;typedef enum WEEK (Wednesday
12、, sunday = 0, inonday, )workday_2;.使用枚举类型的变量2.1 对枚举型的变量赋值。实例将枚举类型的赋值与基本数据类型的赋值进行了比照:方法一:先声明变量,再对变量赋值#include/*定义枚举类型*/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;yesterd
13、ay = MON;today = TUE;tomorrow = WED;printf(%d %d %d n, yesterday, today, tomorrow);)方法二:声明变量的同时赋初值#include /*定义枚举类型*/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;pri
14、ntf(%d %d %d n, yesterday, today, tomorrow);I方法三:定义类型的同时声明变量,然后对变量赋值。#include /*定义枚举类型,同时声明该类型的三个变量,它们都为全局变量*/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 =
15、MON;today = TUE;tomorrow = WED;printf(%d %d %d n x, y, z); 输出:10 20 30printf(%d %d %d n, yesterday, today, tomorrow); 输出:I 2 3)方法四:类型定义,变量声明,赋初值同时进行。#include /*定义枚举类型,同时声明该类型的三个变量,并赋初值。它们都为全局变量*/ enum DAY|MON=hTUE,WED,THU,FRI,SAT,SUN)yesterday = MON, today = TUE, tomorrow = WED;/*定义三个具有基本数据类型的变量,并赋初
16、值。它们都为全局变量*/int x = 10, y = 20. z = 30;void main()(printf(%d %d %d n, x, y, z); /输出:1020 30printf(%d %d %d n, yesterday, today, tomorrow); 输出:1 2 3)2.2 对枚举型的变量赋整数值时,需要进行类型转换。#include enum DAY MON=I,TUE, WED, THU, FRI, SAT, SUN ;void main()(enuin DAY yesterday, today, tomorrow;yesterday = TUE;today =
17、 (enum DAY) (yesterday + I); 类型转换tomorrow = (enum DAY) 30; 类型转换/tomorrow = 3; 错误printf(%d %d %d n, yesterday, today, tomorrow); 输出:2 3 30使用枚举型变量#include enumBELLBACKSPACE = bHTAB= M,RETURN=V,NEWLINE = n;VTAB= v;SPACE=;enum BOOLEAN FALSE = 0, TRUE match_flag;void main()(int index = 0;int count_of_let
18、ter = 0;int count_oLspace = 0;char str = Im Ely efod;match_flag = FALSE;for(; strindex != *0; index+) if( SPACE != strindcx) count_of_letier+;elsematch_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
19、%c%c, count_oUetter, NEWLINE, RETURN):输出:match 2 timescount of letters: 10Press any key to continue 4.枚举类型与sizeof运算符#include 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);
20、 /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 bytesprintf(%d bytes n sizeof(SPACE); /4 bytes printf(%d bytes n, sizeof(NEWLINE); /4 bytes printf(%d bytes n, s
21、izeof(FALSE); /4 bytes printf(%d bytes n sizeof(0); /4 bytes 5.综合举例 #includeenum Seasonspring, sunimer=100, fall=96, winter);二.硬件单元电路1 .复位电路本次设计复位电路采用的是上电复位方式。上电复位时通过外部 复位路的电容充电来实现的,为了保证复位成功,只要RST引脚保持 足够时间。复位电路如下列图所示.时钟电路本次设计采用的是12MHz的晶振,两只电容在20pF100pF之间 取值,其取值在60pF70pF时振荡器频率稳定性较高,按照一般经验, 外接晶体时两个电容取
22、值为30pF,本次设计选为30pF。晶振电路如typcdcf cnum(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)Weekday;void main()(/* Season */printf(%d n, spring); / 0printf(%d, %c n, summer, summer); / 100. dprintf(%d n, fall+winter); / 193Season mySeason=winter;if(winter=mySeason)printf(mySeason is winter n)
23、; / mySeason is winterini x=100;if(x=summcr)printf(x is equal to summern); / x is equal to summerprintf(%d bytesn, sizeof(spring); / 4 bytes/* Weekday */printf(sizeof Weekday is: %d n, sizeof(Weekday); /sizeof Weekday is: 4Weekday today = Saturday;Weekday tomorrow;if( today = Monday)tomorrow = Tuesd
24、ay;elsetomorrow = (Weekday) (today + 1); /remember to convert from int to Weekday本文来自CSDN-xiaobal32966博客下列图所示2 . 89C52芯片引脚43333333333222222222P1. 0 :P1. 1 C P1. 2 C P1. 3 C Pl.4 EM0SI/P1. 5 C MI S0/P1.6 CSCK/P1. 7 匚 RST匚RXD/P3. 0 CTXD/P3. 1 CINT0/P3. 2 CINT1/P3. 3 ET0/P3.4 C X1/P3. 5 C WP3.6 C 而,P3.
25、 T CXTAL2 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产品指令和引
26、脚完全兼容。片 上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯 片上,拥有灵巧的8位CPU和在线系统可编程Flash使得STC89c52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。STC89C52具有以下标准功:8k字节Flash256字节RAM, 32位I/O 口 线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个 6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另夕卜, STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。 空闲模式下,CPU停止工作允许RAM、定时器/计数器、串口、中断继 续工作。三.材料详单.系统组件89
27、c51芯片,晶振(12MHZ, 1个),30pf电容(2个),20pf电容 (2个),电阻(10K, 1个),单排插针;.跑马灯电阻(10K, 10个),发光二极管(10个);.焊接工具烙铁,烙铁架,焊锡。四.软件局部.依次循环亮#i ncIude 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
28、;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;仿真效果图11 .两边往中间跑#i ncIude void delay (int t) (i nt i ;for (i=0;it;i+);)i nt Ied4 = 0x7e, Oxbd, Oxdb, 0xe7; void ma in(void)(i nt i ;P2=0xff;whi le(1)fo
29、r (i=0;i4;i+)(P2=ledi;de I ay (20000);)for (i=3;i;i-)(P2=ledi;delay (20000);仿真效果图2仿真效果图2a壹 ”丁 丁 丁TT,3依次累加#incIude void delay (int t)(i nt i ;for (i=0;it;i+);)uns i gnedi ntIed18 = 0x7f,0x3f,0x1f,OxOf, 0x07,0x03,0x01,0x00);i nt Ied24 = 0x7e, Oxbd, Oxdb, 0xe7);char LED3;void ma in(void)(int i,j,q;P2=0xff;whi le(1)for (q=0;q1;q+)for (i=1;i9;i+)P2=led1 j;delay (10000);)for (q=0;q2;q+)(for (i=0;i4;i+)(P2=led2i;de I ay (15000);for(i-3;i;i-)(P2=led2i;de I ay (15000);1)for (q=0;q2;q+)