51单片机的基本外围电路设计以与相关C语言程序文件.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 基本 外围 电路设计 相关 语言 程序 文件
- 资源描述:
-
. . 主要学习51单片机的外部引脚和内部结构等,叙述一下。本书任务驱动教学,引入案例有浅变深,循序渐进,给读者留下思考和发挥空间。 3.1 利用单片机的I/O口驱动LED 3.1.1利用单片机的P0.0 端口驱动1只LED闪烁 编程的目的是利用C语言控制单片机I/O端口按要求输出矩形波脉冲信号,信号的周期由延时函数决定。 一、电路原理 STC-89C51单片机的P0口采用为OD门输出,不存在拉出电流,因此利用P0驱动负载时有两种接法:一种是加上拉电阻R2,见图3-1-1,既用1K电阻接电源正极,此时P0口输出高电平时LED亮;另一种电路为P0.7低电平驱动有效,在P0.7输出低电平时,STC-89C51端口灌入电流达20mA,可直接驱动小负载。图3-3-1中的R3为限流电阻,限制LED2的工作电流。 图3-1-1 驱动LED电路原理 单片机的最小系统包括晶体振荡电路,加电复位电路,同时要求单片机的31引脚接高电平。时钟频率主要由晶体CY决定,C1、C2为独石电容,用于微小调整单片机时钟的振荡频率;R1和C3组成加电复位电路,C3为电解电容器;整个电路由+5V电压供电。电路使用的元件参数见表3.1.1。 表3.1.13-1-1电路元件表 元件名称 序号 标称 规格(封装,功率电压等参数) 作用 单片机 IC STC89C51 DIP40 核心芯片 电容器 C1 30PF 独石 振荡 电容器 C2 30PF 独石 振荡 电容器 C3 10F 点解电容器 复位 晶振 CY 12MHz S型 振荡 电阻 R1 1K 1/4W,金属膜 电容器C3放电电阻 电阻 R2 1K 1/4W,金属膜 端口电位上拉电阻 电阻 R3 1K 1/4W,金属膜 限流电阻 发光二极管 LED1 5 红色高亮 显示 发光二极管 LED2 5 红色高亮 显示 二、程序设计 1.程序设计平台 程序设计采用keil C 软件,为了养成一个良好的文件管理习惯,建议:编程前,在计算机的某个硬盘分区下建立一个目录,目录的名字为你编写程序的主题,然后把keil C产生的所有文件都放在该目录下。程序设计步骤如下: (1)运行keil C,创建一个项目。利用keil C菜单栏中project-new project创建,项目的名字为你编程的主题,如本案例可以用“LED_1.uv2”或“一个LED闪烁实验.uv2”,存放目录为你的主题目录下; (2)创建建一个文件,然后以“.c”后缀名,文件存放在你的主题目录下; (3) 把c文件添加在你的项目中,在project workspace窗口利用add file to group…实现。如果软件界面不显示这个窗口,运行keil C菜单栏中的view-project window。 (4)设置编译器,是编译过程中能生成“.hex”文件。默认文件名与主题名字一样。运行project-option for‘target 1’-output窗口下点击create HEX file。 (5)在编程区域写你的程序,结束后存储文件并编译,要做检查,尽量避免警告出现,直到程序编译无误为止。 (6)程序烧写并试运行。这个过程称为软件和硬件联合调试,如果实验板无误,程序编译通过,但在硬件上运行不成功是常用的事情,需要对程序进行多次调试。在没有实验板的情况下,可以利用proteus软件仿真调试,也可以检验你的程序设计结果。 2.程序设计 (1)利用P0.0口驱动LED闪烁,高电平有效 /*****************************************************************************/ #include<reg51.h> //包含头文件 sbit LED = P0^0; // LED接P0.0。在kell C51软件中,定义P0.0为P0^0, void delay(unsigned char x) //延时函数 { unsigned char i,j; for(i = 0;i < x;i++) for(j = 0;j < 200;j++); } void main(void) //主函数 { While(1) //程序死循环 { LED = 0; //P0.0输出低电平,LED灭 void delay(100); //调用延时函数,延时一段时间,约0.3秒,不精确 LED = 1; //P0.0输出高电平,LED亮 void delay(100); } } /*****************************************************************************/ (2)利用P0.7端口驱动LED闪烁,低电平有效 /*****************************************************************************/ #include<reg51.h> //包含头文件,程序为小5号字 sbit LED = P0^7; void delay(unsigned char x) //延时函数 { unsigned char i,j; for(i = 0;i<x;i++) for(j = 0;j < 1000;j++); } void main(void) //主函数 { while(1) { LED = ~LED; //LED初始状态为灭,执行一次,LED改变一次状态 void delay(100); //延时一段时间 } } /*****************************************************************************/ 三、程序说明 1.应为使用的单片机芯片为STC89C51,因此程序开始处加入#include<reg51.h>,文件reg51.h中包含了51芯片所有特殊功能寄存器的名称定义和相对应的地址值; 2. 单片机程序单步顺序执行,先执行主函数,在主函数可以调用分函数,分函数可以调用分函数,但分函数不能调用主函数,程序执行一条命令再执行下一条,单片机等待的过程是执行了一个循环命令或一个浪费时间的程序,实际执行过程永远不会结束。delay()为函数延,单片机在执行此函数相关指令时占用的时间过长,在执行过程中,如果没有中断,单片机只能忙这一件事情。利用delay()不能得到精确的延时。延时函数还可以利用下面的函数实现。 /**************************/ void delay(unsigned int x) { while(x) x--; } /**************************/ 3. 利用位定义命令让LED等价于P0.0或P0.7,等于先sbit P0_0 = P0^0,然后#defined LED P0_0,也在程序前面不做此类定义,在程序里面直接写成P0^0 = 1或P0^0 = 0,先定义是为了增加程序的可读性。程序执行P0^0 = 1后,P0.0对以的单片机内部位寄存器就设置为高电平,同时P0.0端口也输出高电平,单片机的所有I/O口都可位未定义,也可以字节定义。 4. 单片机C语言程序设计需要的C语言关键字不多,并且在keil C 中用到的关键字是独有的,因此对于没有学习过C语言的人学习单片机C语言程序设计困难并不是很大,主要掌握单片机C语言书写格式,怎样用C语言控制单片机的硬件资源,另外在编程时,还要有清晰的逻辑思维头脑和认真实践,由浅逐步深入学习,当你坚持到最后时,单片机C语言程序设计实际上很简单。 5. 每个人在编写程序时都有自己的风格。一般情况下,函数的字符左行距为0,其下每条语句前留一个“tab”键空。算数逻辑符号的左右留一个空格,关键语句要有中文或英文说明,每一个函数有时也可以用“/**.....**/”上下隔开这样有助于提高程序的层次感和可读性。 3.1.2利用P0口驱动8个LED,产生跑马灯或流水灯效果 一、参考电路 实验电路见图3-3-2所示,在单片机的最小系统的基础上,P0口依次接入8个LED,P0口的上拉电阻可以使用8个1K电阻。 图3-1-2流水灯电路 在利用Proteus软件仿真时,可以用电阻排代替。单片机最小系统在单片机元件放置后已经默认,即C1、C2、C3、CY、R1可以省略。其它元件选取见表3.1.2所示。 表3.1.1 3-1-2电路Proteus软件元件表 元件名称component 总类Category 分类Sub- Category 结果Results 模型Model type 单片机 Micoroprocessor IC 8051 Family 80C51 电阻排 Resistor Resistor Pack RESPACK-8 ANALOG 发光二极管 Optoelectronics LEDs led-red DIGITAL 二、参考程序 /*****************************************************************************/ #include<reg51.h> void delay(void) { unsigned char i,j; for(i = 0;i < 255;i++) for(j = 0;j < 255;j++); } void main(void) { unsigned char j = 0x01; while(1) { j = j << 1; if(j == 0x00) j = 0x01; P0 = j; delay(); } } /*****************************************************************************/ 三、程序说明 1.语句j = j << 1,执行的目的是控制P0整个字节的数据在循环时左移变化,程序循环第一次, P0 = 0x02,P0.1连接的LED亮,其它灭;循环第七次,P0.7连接的LED亮,其它灭;循环第八次,j = 0x00,if语句条件满足,j = 0x01,P0.0连接的LED亮,其它灭,然后依次变化下去。如果P0口驱动8个LED低电平有效,如下修该: /**********************/ void main(void) { unsigned char j = 0xfe; while(1) { j =( j << 1) | 0x01 ; if(j = 0xff) j = 0xfe; P0 = j; delay(); } } 2. delay()函数无形参,延时时间不能设置。 3.1.3利用P0口驱动一个数码管,显示0 – 9,并循环 一、参考电路 实验电路在单片机的最小系统基础上,P0口接一只共阳数码管,见图3-1-3。带小数点的数码管是由8个LED组成,七个LED组成数字,另一只LED用来显示小数点。如果数码管内部的8只LED的正极接在一起,负极分别引出,引脚依次命名为a、b、c、d、e、f、g和dot,称为带小数点的7段共阳极性数码管。 图3-1-3单片机驱动共阳数码管电路 单片机的P0.0-P0.7口分别接数码管的a-dot引脚,如果让数码管显示1,数码管b、c段亮,程序控制P0输出0xbe十六进制编码即可,因此共阳数码管显示0-9十进制数字,需要利用10个显示码组成的数组。对于共阴数码管,也有相应的编码要求。小数点在不用时一般不让显示,高位端口P0.7输出高电平即可。 由于P0每个端口的灌电流达20mA,数码管每段LED正常显示5mA即可,因此需要R2~9用来限制数码管每一段电流,以防止驱动电流过大而烧毁器件。利用Proteus软件仿真时,数码管采用Optoelectronics元件库中7-Segment Displays下的7-SEG-COM-ANODE。 二、参考程序 /*****************************************************************************/ #include<reg51.h> code unsigned char seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay (void) /* 时间延迟函数 */ { unsigned char i,j; for (i = 0;i < 255;i++) for (j = 0;j = 255;j++); } void main (void) { unsigned char i; /* 变量 i 用来储存 0~9 */ /*无穷循环 */ while (1) { for (i = 0; i<10; i++) { P0 = seven_seg[i]; /*输出0~9到共阳七段显示器*/ delay(); /*调用时间延迟函数delay*/ } } } /*****************************************************************************/ 三、程序说明 1. 当程序中使用常量数据时,可以把数据存储在单片机的程序存储器中,对此类数据声明时,前面需要加上关键字code或const,如本实验中的共阳数码管数字显示需要的编码,表3-1-3是共阳数码管编码,表3-1-4是共阴数码管编码。单片机驱动液晶显示器显示的汉字也是一种常量数据。 表3-1-3共阳数码管显示编码 显示数字 dot g f e d c b a 16进制 0 1 1 0 0 0 0 0 0 0xc0 1 1 1 1 1 1 0 0 1 0xf9 2 1 0 1 0 0 1 0 0 0xa4 3 1 0 1 1 0 0 0 0 0xb0 4 1 0 0 1 1 0 0 1 0x99 5 1 0 0 1 0 0 1 0 0x92 6 1 0 0 0 0 0 1 0 0x82 7 1 1 1 1 1 0 0 0 0xf8 8 1 0 0 0 0 0 0 0 0x80 9 1 0 0 1 0 0 0 0 0x90 表3-1-4共阴数码管显示编码 显示数字 dot g f e d c b a 16进制 0 0 0 1 1 1 1 1 1 0x3f 1 0 0 0 0 0 1 1 0 0x06 2 0 1 0 1 1 0 1 1 0x5b 3 0 1 0 0 1 1 1 1 0x4f 4 0 1 1 0 0 1 1 0 0x66 5 0 1 1 0 1 1 0 1 0x6d 6 0 1 1 1 1 1 0 1 0x7d 7 0 0 0 0 0 1 1 1 0x07 8 0 1 1 1 1 1 1 1 0x7f 9 0 1 1 0 1 1 1 1 0x6f 2.本程序数码管显示使用了一个for循环,让变量i依次由0递增到9,并将数字显示码送到P0,需要注意,seven_seg[10] 有10各数据,seven_seg[0] 为第一个数据,seven_seg[9] 为第10个数据。数码管显示的数据变化时间由延时函数决定。for循环体嵌套在while循环体中,数码管回循环显示0~9,永不结束,除非电路断电。利用数码管也可以显示日期和时间,在以后的程序设计案例中就可以学到。 3.2单片机定时器/计数器应用 3.2.1利用Timer0中断产生1秒延时,让数1个码管显示秒计数 本案例主要目的是熟练掌握单片机内部Timer0或Timer1的编程控制方法,会利用Timer0或Timer1中断精确定时。同时掌握数码管动态显示原理,学会6位数字显示的程序设计。本案例使用的电路为图3-1-3。 一、程序设计 /*****************************************************************************/ #include<reg51.h> code unsigned char seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char cp,i; //声明全局变量 void timer0_isr(void) interrupt 1 // timer0中断服务函数 { TR0 = 0; //停止计数 TL0 = 0x11; // TL0重新预置 TH0 = 0xee; // TH0重新预置 TR0 = 0; //开始计数 cp++; // timer0中断1次,变量cp加1 if(cp == 200) //中断200次,时间刚好为1秒 {cp = 0;i ++;} if(i == 10) i = 0; P0 = seven_seg[i] // P0输出显示数据 } void timer0_initialize(void) // timer0中断初始化函数 { EA = 0; //设置中断允许寄存器IE中的 EA位,关闭中断总开关 TMOD = 0x01; //设置计时器模式控制寄存器,Time0工作在定时方式1 TR0 = 0; //设置计时器控制寄存器TCON寄存器的TR0位为0,Timer0 //停止计数 TL0 = 0x11; TH0 = 0xee; // Timer0的16位计数器初始值为0xee11,12MHz晶体振 //频率,单片机的机器周期为1微妙,Timer0每1微秒加1 //计数,加满溢出变产生中断,从计数到中断刚好为5毫秒 PT0 = 1; //设置中断优先次序寄存器IP中的PT0位,Timer0中断优先 ET0 = 1; //设置中断允许寄存器IE中ET0的位,开启中断小开关 EA = 1; //打开中断总开关 TR0 = 1; //开始计数 } void main (void) { timer0_initialize() // timer0初始化,为中断做好准备 while (1); //等待中断 } /*****************************************************************************/ 二、程序说明 1.中断服务函数名中,interruput为关键字,1为timer0中断号。在reg51.h头文件中已经定义,表3.2.1为单片机常用中断的中断号。在使用中断服务函数时,直接在名后加interruput和中断号即可。 表3.2.1 reg51.h中单片机常用中断号定义 中断源 中断触发原因 中断号 INT0 外部INT0引脚有低电平或下降沿信号输入 0 Timer0 Timer0计数溢出 1 INT1 外部INT0引脚有低电平或下降沿信号输入 2 Timer1 Timer1计数溢出 3 串行中断 串口缓存SBUF写入数据或读出数据 4 2.timer0可以用作计数,也可以用来定时,由由TMOD寄存器中为决定,作为计数器使用时,接受单片机外部引脚P3.4输入的脉冲加计数;作为定时器使用时,接受单片机内部的机器周期脉冲。如果单片机的振荡频率为,振荡周期为,则机器周期为。本案例中MHz,则微秒,timer0工作在模式1为16为加计数器,当计数器初始值为0xee11时,则从开始计数到产生中断需要的时间为0xffff —0xee11个微秒,刚好为5000微秒,也即5毫秒。本案例timer0的初装也可以利用下面语句完成: /**********************************/ #defined TEMOR0_COUNT 0xee11 TL0 = TEMOR0_COUNT & 0x00ff; //取TEMOR0_COUNT的低字节并装入TL0 TH0 = TEMOR0_COUNT >> 8; // TEMOR0_COUNT左移8位,并将低字节装入TEMOR0_COUNT /**********************************/ 利用定时器/计数器定时时,需要现设置工作模式,并计算它的初装值,计算初装值不好计算,常利用计算机中的计算器工具辅助。timer0工作在模式1可以最大65535微秒中断1次,如工作模式2,最大256微秒中断1次。 3.当程序中只涉与一个中断时,可以不对中断的优先级进行设置,因此在本案例中语句PT0 = 1 可以省略。程序中有多个中断但没有进行优先级设定的情况下,单片机中断优先级默认按终端号递增而依次降低。 4.数码管显示语句放在了timer0中断服务函数里面,由于5毫秒中断1次,因此数码管显示的数据会每5毫秒更新1次。1秒内更新200次,更新过程是把原来的数据覆盖,但显示数据1秒内变化1次。 3.2.2利用4个数码管,实现秒信号加计数 一、电路原理 图3-2-1所示的电路中,4位七段数码管采用4只单个数码管组成,可以显示0000~9999,数据输入端并联后接P0口,位选即每个数码管的阳极分别接P2口,中间加非门驱动。因为P2口反相驱动,因此,如果千位数码管显示,P2.7输出低电平,P2的其它端口输出高电平,并且此时P0输出千位数据。在利用Proteuse软件仿真时,数码管SEVEN_SEG使用7SEG-MPX4-CA,非门NOT选用74 HC series类型中Gates & Inverters分类下的74HC04。电阻R2~9是限流电阻。 图3-2-1 4位七段数码管显示 二、程序设计 /*****************************************************************************/ #include<reg51.h> #defined unsigned char uchar #defined unsigned int uint code uchar seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; code uchar seg_scan[4] = {0xef,0xdf,0xbf,0x7f}; //各个数码管对应的位选数据 uchar counter[4] = {0,0,0,0}; //个位、十位、百位和千位数 uint cp,i; void timer0_isr(void) interrupt 1 // timer0中断服务函数 { uchar j; TR0 = 0; //停止计数 TL0 = 0x11; // TL0重新预置 TH0 = 0xee; // TH0重新预置 TR0 = 0; //开始计数 cp++; // timer0中断1次,变量cp加1 if(cp = 200) //中断200次,时间刚好为1秒 { cp = 0; counter[0]++; //个位数,1秒加1 } if(counter[0] == 10) {counter[0]= 0; counter[1]++;} if(counter[1] == 10) {counter[1]= 0; counter[2]++;} if(counter[2] == 10) {counter[2]= 0; counter[3]++;} if(counter[3] == 10) counter[3]= 0; P0 = seven_seg[counter[j]]; // P0输出数据编码 P2 = seg_scan[j]; //P2输出位选信号 j++; if(j == 4) j = 0; } void timer0_initialize(void) // timer0中断初始化函数 { EA = 0; TMOD = 0x01; TR0 = 0; TL0 = 0x11; TH0 = 0xee; PT0 = 1; ET0 = 1; EA = 1; TR0 = 1; } void main (void) { timer0_initialize() while (1); } /*****************************************************************************/ 三、程序说明 1.imer0第1次中断,j = 0,显示个位,显示5毫秒后,timer0第2次中断,j = 1,显示十位,以后随着中断依次显示百位和千位,最后重新显示个位。每位显示停留的时间为5毫秒。中断4次才能让4为依次扫描显示完,占用的时间为20毫秒,1秒钟内,4位数码管扫描显示50遍,根据人眼视觉暂留特点,你看到的结果是4位数据同时显示,这种显示方法为动态扫描显示。 2.变量j = 0时,counter[0]是个位十进制数,执行P0 = seven_seg[counter[0]],P0口输出个位显示数据编码;数码管的位选信号只利用了P2的高4位,执行P2 = seg_scan[0],P2 = 0xef,经过非门反相,加在数码管上的位选信号只有个位是高电平,此时只显示个位。 3.数组counter[j]也可以用1个变量代替,在显示时需做下面处理 /********************/ uint x; … P0 = seven_seg[x/1000]; // P0输出千位数据编码 P2 = seg_scan[3]; //千位数码管共阳极设置为高电平 P0 = seven_seg[x%1000/100]; // P0输出百位数据编码 P2 = seg_scan[2]; //千位数码管共阳极设置为高电平 P0 = seven_seg[x%1000%100/10]; // P0输出十位数据编码 P2 = seg_scan[1]; //千位数码管共阳极设置为高电平 P0 = seven_seg[x%1000%100%10]; // P0输出千位数据编码 P2 = seg_scan[0]; //千位数码管共阳极设置为高电平 … /********************/ 4.思考题 (1)要让数码管在电路加电开始就显示1230,怎样更改有关数据? (2)为什么不用P2口直接驱动数码管? (3)本案例如果200微秒中断1次,也可以实现1定时,显示结果会怎样? 3.2.3设计一个6位数码管时间显示程序 本案例使用6位数码管显示时间,能显示时/分/秒,显示格式是00.00.00到23.59.59。其中小时和分钟之间的小数点常亮,分钟和秒之间的小数点进行秒闪烁。 一、 参考电路 二、 参考程序 /*****************************************************************************/ #include<reg51.h> #defined unsigned char uchar code uchar seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; code uchar seg_scan[6] = {0xfb,0xf7,0xef,0xdf,0bf,0x7f}; //各个数码管对应的位选数据 uchar counter[3] = {0,0,0}; //时位、分位和秒位 uchar tick,cp,i,j; //tick:秒信号,cp:中断次数累计 void dispaly(void) { uchar d; d = d * tick; //d 的值1秒内改变1次,要么0x00,要么0xff d = d | 0x7f; //d 的值1秒内改变1次,要么0x7f,要么0xff swich(i) { case 0 : P0 = seven_seg[counter[0]%10]; break; //显示秒个位 case 1 : P0 = seven_seg[counter[0]/10]; break; //显示秒十位 case 2 : P0 = d & seven_seg[counter[0]%10]; break; //数据高8位1秒改变1次,实现小 //数点秒闪烁 case 3 : P0 = seven_seg[counter[0]/10]; break; //显示分十位 case 4 : P0 = 0x7f & seven_seg[counter[0]%10]; break; //显示数据高8位为低电平,小数点常亮 case 5 : P0 = seven_seg[counter[0]/10]; break; //显示时十位 } break; P2 = seg_scan[i]; i++; if(i == 6) i = 0; } void timer0_isr(void) interrupt 1 // timer0中断服务函数 { TR0 = 0; //停止计数 TL0 = 0x11; // TL0重新预置 TH0 = 0xee; // TH0重新预置 TR0 = 0; //开始计数 cp++; // timer0中断1次,变量cp加1 if(cp == 100) //中断100次,时间刚好为0.5秒 { cp = 0; tick = ~tick; //秒脉冲信号 j++; } if(j == 2) //刚好1秒 { j = 0; counter[0]++; //个位数,1秒加1 } if(counter[0] == 60) {counter[0]= 0; counter[1]++;} if(counter[1] == 60) {counter[1]= 0; counter[2]++;} if(counter[2] == 24) counter[2]= 0; display(); } void timer0_initialize(void) // timer0中断初始化函数 { EA = 0; TMOD = 0x01; TR0 = 0; TL0 = 0x11; TH0 = 0xee; PT0 = 1; ET0 = 1; EA = 1; TR0 = 1; } void main (void) { timer0_initialize() // timer0初始化,为中断做好展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




51单片机的基本外围电路设计以与相关C语言程序文件.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/4708745.html