0436、AT89S52多功能板DXP资料及其相关资料
收藏
资源目录
压缩包内文档预览:
编号:551023
类型:共享资源
大小:3.23MB
格式:RAR
上传时间:2015-12-06
上传人:QQ28****1120
认证信息
个人认证
孙**(实名认证)
辽宁
IP属地:辽宁
6
积分
- 关 键 词:
-
毕业设计论文
- 资源描述:
-
0436、AT89S52多功能板DXP资料及其相关资料,毕业设计论文
- 内容简介:
-
*LED 显示输出 * 很明显,要点亮使发光二极管,必须使单片机的 I/O 口 P1.0 输出低电平。于是我们的任务就是编程序使 P1.0 输出地电平。 #include /*LED 显示输出 具体口输出 */ sbit P1_0=P10; /*定义 p1.0 为 p1_0 */ sbit P1_1=P21; /*定义 p2.1 为 p1_1 */ sbit P1_2=P32;/*定义 p3.2 为 p1_2 */ sbit P1_3=P03;/*定义 p0.3 为 p1_3 */ main() P1_0=0;/*输出高电平 即:灯亮 */ P1_1=0; P1_2=0; P1_3=0; #include /* LED 显示输出 整体输出 */ main() P1=0;/*输出高电平 */ P2=0; P3=0; P0=0; nts一 . 闪烁灯 实验任务 在 P1.0 端口上接一个发光二极管 L1,使 L1 在不停地一亮一灭,一亮一灭 的时间间隔为 0.2秒。 硬件电路 与上面点亮小灯的连接完全相同。 #include /*闪烁灯 */ del() /*延时 0.2 秒 */ unsigned char i,j,k; for(i=20;i0;i-) for(j=20;j0;j-) for(k=248;k0;k-); sbit P1_0=P10; main() while(1)/*永远为真 ,一直执行下去 */ P1_0=0; del(); P1_0=1; del(); #include reg52.h /#define uchar unsigned char /#define uint unsigned int sbit P10=P10; void mDelay(unsigned int Delay) unsigned int i; for(;Delay0;Delay-) for(i=0;i124;i+) ; void main() for(;) P10=!P10; /取反 P1.0 nts mDelay(1000); /延时 1 秒。如果是 2000 那么是 2 秒 nts五 .4 4 矩阵式键盘识别 实验任务 用 AT89S51的并行口 P3接 4 4矩阵键盘,以 P3.0 P3.3作输入线,以 P3.4 P3.7作输出线;在每一个数码管上显示每个按键的“ 0 F”序号。 硬件电路 实验原理 每个按键有它的行值和列值 ,行值和列值的组合就是识别这个按键的编码。 矩阵的行线和列线分别通过两并行接口和 CPU通信。键盘处理程序的任务是:确 定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断 开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动 态接地,另一个并 行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软 件查表,查出该键的功能。 C语言源程序 #include Unsigned char code seg7code=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e ; unsigned char k; void delay10ms(void) /延时程序 unsigned char i,j; for(i=20;i0;i-) for(j=248;j0;j-); void Getch ( ) unsigned char X,Y,Z; P3=0xff; P3=0x0f; /先对 P3 置数 行扫描 if(P3!=0x0f) /判断是否有键按下 delay10ms(); /延时 ,软件去干扰 if(P3!=0x0f) /确认按键按下 X = P3; ntsX=P3; /保存行扫描时有键按下时状态 P3=0xf0; /列扫描 Y=P3; /保存列扫描时有键按下时状态 Z=X|Y; /取出键值 switch ( Z ) /判断键值(那一个键按下) case 0xee: k=0; break; /对键值赋值 case 0xde: k=1; break; case 0xbe: k=2; break; case 0x7e: k=3; break; case 0xed: k=4; break; case 0xdd: k=5; break; case 0xbd: k=6; break; case 0x7d: k=7; break; case 0xeb: k=8; break; case 0xdb: k=9; break; case 0xbb: k=10;break; case 0x7b: k=11;break; case 0xe7: k=12;break; case 0xd7: k=13;break; case 0xb7: k=14;break; case 0x77: k=15;break; /请注意写程序时的格式规范,此处是为了节省纸张 void main(void) while(1) P3=0xff; Getch(); P0=seg7codek; /查表 LED 输出 P2=0x0f; /输出相同的四位数据。 nts9 一键多功能按键识别技术 1 实验任务 如图 4.9.1 所示,开关 SP1 接在 P3.7/RD 管脚上,在 AT89S51 单片机的 P1端口接有四个发光二极管,上电的时候, L1 接在 P1.0 管脚上的发光二极管在闪烁,当每一次按下开关 SP1 的时候, L2 接在 P1.1 管脚上的发光二极管在闪烁,再按下开关 SP1 的时候, L3 接在 P1.2 管脚上的发光二极管在闪烁,再按下开关 SP1的时候, L4 接在 P1.3 管脚上的发光二极管在闪烁,再按下开关 SP1 的时候,又轮到 L1 在闪烁了,如此轮流下去。 2 电路原理图 图 4.9.1 3 系统板上硬件连线 ( 1 把“单片机系统”区域中的 P3.7/RD 端口连接到“独立式键盘”区域中的 SP1 端口上; nts( 2 把“单片机系统”区域中的 P1.0 P1.4 端口用 8 芯排线连接到“八路发光二极管指示模块”区域中的“ L1 L8”端口上;要求, P1.0 连接到 L1, P1.1 连接到 L2, P1.2 连接到 L3, P1.3 连接到 L4 上。 4 程序设计方法 ( 1 设计思想由来 在我们生活中,我们很容易通过这个叫张三,那个叫李四,另外一个是王五;那是因为每个人有不同的名子,我们就很快认出,同样,对于要通过一个按键来识别每种不同的功能,我们给每个不同的功能模块用不同的 ID 号标识,这样,每按下一次按键, ID 的值是不相同的,所以单片机就很容易识别不同功能的身份了。 ( 2 设计方法 从上面的要求我们可以看出, L1 到 L4 发光二极管在每个时刻的闪烁的时间是受开关 SP1 来控制, 我们给 L1 到 L4 闪烁的时段定义出不同的 ID 号,当 L1 在闪烁时, ID 0;当 L2 在闪烁时, ID 1;当 L3 在闪烁时, ID 2;当 L4 在闪烁时,ID 3;很显然,只要每次按下开关 K1 时,分别给出不同的 ID号我们就能够完成上面的任务了。下面给出有关程序设计的框图。 5 程序框图 nts图 4.9.2 7 C 语言源程序 #include unsigned char ID; void delay10ms(void) unsigned char i,j; for(i=20;i0;i-) for(j=248;j0;j-); void delay02s(void) unsigned char i; for(i=20;i0;i-) delay10ms(); void main(void) while(1) if(P3_7=0) delay10ms(); if(P3_7=0) ID+; if(ID=4) nts ID=0; while(P3_7=0); switch(ID) case 0: P1_0=P1_0; delay02s(); break; case 1: P1_1=P1_1; delay02s(); break; case 2: P1_2=P1_2; delay02s(); break; case 3: P1_3=P1_3; delay02s(); break; nts七 .定时器 T0 的应用 -9.9 秒计时设计 实验任务 开始时,显示“ 00”,第 1 次按下 BY1 后就开始计时。第 2 次按 BY1 后,计时 停止。 第 3次按 BY1后,计时归零。 硬件电路 C语言源程序 #include /必须用这个子函数库 unsigned char code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90; unsigned char sec; /定义计数值,每 过 1/10 秒, sec 加一 unsigned char keycnt=0; unsigned int tcnt; /键值判断 sbit gewei=P20; /个位选通定义 sbit shiwei=P21; /十位选通定义 void Delay(unsigned int tc) /延时程序 while( tc != 0 ) unsigned int i; for(i=0; i0;i-) /延时去干扰 for(j=248;j0;j-); if(P3_0=0) keycnt+; switch(keycnt) /按下次数判断 case 1: /第一次按下 TH0=0x06; /对 TH0 TL0 赋值 TL0=0x06; TR0=1; /开始定时 break; case 2: /第二次按下 TR0=0; /定时结束 break; case 3: /第三次按下 keycnt=0; /重新开始判断键值 sec=0; /计数重新从零开始 break; while(P3_0=0); /请注意写程序时的格式规范,此处是为了节省纸张 void t0(void) interrupt 1 using 0 /定时中断服务函数 tcnt+; /每过 250ust tcnt 加一 if(tcnt=400) /计满 400 次( 1/10 秒)时 tcnt=0; /重新再计 sec+; if(sec=100) /定时 10 秒,在从零开始计时 ntssec=0; void main(void) TMOD=0x02; /定时器工作在方式 2 ET0=1; EA=1; sec=0; while(1) KEY(); LED(); nts三 . 按键识别 实验任务 通过按下一次按键,使广告灯向左移动一位,直到最后一位,在向右移动。 硬件电路 (大家注意到这一个电路图与上一个实验的电路图只多了一个按键和一个 5.1K的电阻。) 实验原理 从图中可以看出 P2.1 在按键没有按下时接的是高电平,按键按下时接的就是低电平了。所以我们只要判断 P2.1 的电平就可以知道按键是否被按下了。而在按键按下的过程中,由于抖动,将产生干扰,在按下的过程中,一旦有干扰过来,可能造成误触发过程,这并不是我们所想要的。因此在按键按下的时候,要把我们手上的干扰信 号以及按键的机械接触等干扰信号给滤除掉,一般情况下,我们可以采用软件滤波的方法去除这些干扰信号,一般情况下,一个按键按下的时候,总是在按下的时刻存在着一定的干扰信号,按下之后就基本上进入了稳定的状态。我们在程序设计时,从按键被识别按下之后,延时 5ms 以上,从而避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下,若真得已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才是由于干扰信号引起的误触发, CPU就认为是误触发信号而舍弃这次的按键识别过程。 C 语言源程序 #include ntssbit BY1=P21; /定义按键的输入端 unsigned char count; /按键计数 ,每按一下 ,count 加 1 unsigned char temp; unsigned char a,b; void delay10ms(void) /延时程序 unsigned char i,j; for(i=20;i0;i-) for(j=248;j0;j-); key() /按键判断程序 if(BY1=0) /判断是否按下键盘 delay10ms(); /延时 ,软件去干扰 if(BY1=0) /确认按键按下 count+; /按键计数加 1 if(count=8) /计 8 次重新计数 count=0; /将 count 清零 while(BY1=0);/按键锁定 ,每按一次 count 只加 1. nts八 .利用定时器产生乐曲 实验任务 利用单片机的 I/O 口演奏乐曲。 硬件电路图 实验原理 乐曲是按照一定的高低,长短和强弱关系组成的关系,在一首乐曲中,每一个音符与频率有关。所以我们只要把有关频率的占空比数据做成表格,在通过查表,在 I/O 口输出相关乐曲的方波,便产生了乐曲。 C 语言源程序 #include reg52.h/这样用双引号也可以。 unsigned char Count; sbit _Speak =P00 ; /讯响器控制脚 unsigned char code SONG = /祝你平安 0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20, 0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20, 0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20, 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20, 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10, 0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20, nts0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20, 0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20, 0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10, 0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80, 0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20, 0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20, 0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10, 0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00, /路边的野华不要采 0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C, 0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20, 0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20, 0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30, 0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30, 0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26, 0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20, 0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F, 0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20, 0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B, 0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20, 0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00,; void Time0_Init() TMOD = 0x01; IE = 0x82; TH0 = 0xD8; TL0 = 0xEF; /12MZ晶振, 10ms nts void Time0_Int() interrupt 1 TH0 = 0xD8; TL0 = 0xEF; Count+; /长度加 1 void Delay_xMs(unsigned int x) /1MS 延时子程序 unsigned int i,j; for( i =0;i x;i+ ) for( j =0;j3;j+ ); void Play_Song(unsigned char i) /:歌曲播放子程序 i 为播放哪一段曲目 unsigned char Temp1,Temp2; unsigned int Addr; Count = 0; /中断计数器清 0 Addr = i * 217; while(1) Temp1 = SONGAddr+; if ( Temp1 = 0xFF ) /休止符 TR0 = 0; Delay_xMs(100); else if ( Temp1 = 0x00 ) /歌曲结束符 return; else Temp2 = SONGAddr+; TR0 = 1; while(1) _Speak = _Speak; Delay_xMs(Temp1); if ( Temp2 = Count ) Count = 0; break; /请注意写程序时的格式规范,此处是为了节省空间 void main() /主程序 Time0_Init(); /定时器 0 中断初始化 while(1) Play_Song(0); /播放 nts14 4 4 矩阵式键盘识别技术 1 实验任务 如图 4.14.2 所示,用 AT89S51 的并行口 P1 接 4 4 矩阵键盘,以 P1.0 P1.3 作输入线,以 P1.4 P1.7 作输出线;在数码管上显示每个按键的“ 0 F”序号。对应的按键的序号排列如图 4.14.1 所示 2 硬件电路原理图 图 4.14.2 3 系统板上硬 件连线 ( 1 把“单片机系统“区域中的 P3.0 P3.7 端口用 8 芯排线连接到“ 4X4 行列式键盘”区域中的 C1 C4 R1 R4 端口上; ( 2 把“单片机系统”区域中的 P0.0/AD0 P0.7/AD7 端口用 8芯排线连接到“四路静态数码显示模块”区域中的任一个 a h 端口上;要求: P0.0/AD0 对应着 a, P0.1/AD1 对应着 b, , P0.7/AD7对应着 h。 nts4 程序设计内容 ( 1 4 4矩阵键盘识别处理 ( 2 每个按键有它的行值和列值 ,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU 通信。每个按键的状态同样需变成数字量“ 0”和“ 1”,开关的一端(列线)通过电阻接 VCC,而接地是通过程序输出数字“ 0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。 5 程序框图 图 4.14.3 7 C 语言源程序 #include unsigned char code table=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71; unsigned char temp; unsigned char key; unsigned char i,j; void main(void) while(1) nts P3=0xff; P3_4=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i0;i-) for(j=200;j0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=7; break; case 0x0d: key=8; break; case 0x0b: key=9; break; case 0x07: key=10; break; nts temp=P3; P1_0=P1_0; P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; P3=0xff; P3_5=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i0;i-) for(j=200;j0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) nts case 0x0e: key=4; break; case 0x0d: key=5; break; case 0x0b: key=6; break; case 0x07: key=11; break; temp=P3; P1_0=P1_0; P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; P3=0xff; P3_6=0; nts temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i0;i-) for(j=200;j0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=1; break; case 0x0d: key=2; break; case 0x0b: key=3; break; case 0x07: key=12; break; temp=P3; nts P1_0=P1_0; P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; P3=0xff; P3_7=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=50;i0;i-) for(j=200;j0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: nts key=0; break; case 0x0d: key=13; break; case 0x0b: key=14; break; case 0x07: key=15; break; temp=P3; P1_0=P1_0; P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; nts nts九数摸转换 ADC0804 的应用 实验任务 从 ADC0804 的通道 IN+输入 0 5V 之间的模拟量,通过 ADC0804 转换成数字 量在数码管上以十进制形成显示出来。 硬件电路图 注意:上图未显示全的是四个共阴极数码管。 实验原理 ADC0804 是 8 位全 MOS 中速 A/D 转换器、它是逐次逼近式 A/D 转换器,片内有三态数据输出锁存器,可以和单片机直接接口。单通道输入,转换时间大约为 100us。 ADC0804 转换时序是:当 CS 0 许可进行 A/D 转换。 WR 由低到高时, A/D开始转换,一次转换一共需要 66 73个时钟周期。 CS与 WR同时有效时启动 A/D转换,转换结束产生 INTR 信号(低电平有效),可供查询或者中断信号。在 CS和 RD的控制下可以读取数据结果。 C 语言源程序 #include code unsigned char seg7code10=0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90 ; /显示段码 sbit int1=P33; /定义管脚功能 sbit cs=P32; sbit wr=P36; sbit rd=P37; void Delay(unsigned int tc) /显示延时程序 while( tc != 0 ) unsigned int i; for(i=0; i4; /右移四位 取出高四位 dianyal=dianya&0x0f; /屏蔽高四位 取出低四位 dianya=dianyal*20+dianyah*320; /最后的结果是一个四位数,便于显示 return(dianya);/返回最后处理结果 void Led() unsigned int date; date=datpro(); /调用数据处理最后结果 P2=P2&0xef; P0=seg7codedate/1000|0x80; /输出个位数和小数点 Delay(8); P2=P2|0xf0; P2=P2&0xdf; P0=seg7codedate%1000/100; /输出小数点后第一位 Delay(8); P2=P2|0xf0; P2=P2&0xbf; P0=seg7codedate%100/10; /输出小数点后第二位 Delay(8); P2=P2|0xf0; P2=P2&0x7f; P0=seg7codedate%10; /输出小数点后第三位 Delay(8); P2=P2|0xf0; main() while(1) Led( ); /只需调用显示函数 nts ADC0809是带有 8位 A/D转换器、 8路多路开关以及微处理机兼容的控制逻辑的 CMOS组件。它是逐次逼近式 A/D转换器,可以和单片机直接接口。 ( 1) ADC0809的内部逻辑结构 由上图可知, ADC0809由一个 8路模拟开关、一个地址锁存与译码器、一个 A/D转换器和一个三态输出锁存器组成。多路开 关可选通 8个模拟通道,允许 8路模拟量分时输入,共用 A/D转换器进行转换。三态输出锁器用于锁存 A/D转换完的数字量,当 OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。 ( 2) 引脚结构 nts IN0 IN7: 8条模拟量输入通道 ADC0809对输入模拟量要求:信号单极性,电压范围是 0 5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。 地址输入和控制线: 4条 ALE为地址锁存允许输入线,高电平有效。当 ALE线为高电平时,地址锁存与译码器将 A, B, C 三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。 A, B和 C 为地址输入线,用于选通 IN0 IN7上的一路模拟量输入。通道选择表如下表所示。 ntsC B A 选择的通道 0 0 0 IN0 0 0 1 IN1 0 1 0 IN2 0 1 1 IN3 1 0 0 IN4 1 0 1 IN5 1 1 0 IN6 1 1 1 IN7 数字量输出及控制线: 11条 ST 为转换启动信号。当 ST 上跳沿时,所有内部寄存器清零;下跳沿时,开始进行 A/D转换;在转换期间, ST 应保持低电平。 EOC 为转换结束信号。当 EOC 为高电平时,表明转换结束;否则,表明正在进行 A/D转换。 OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。 OE 1,输出转换得到的数据; OE 0,输出数据线呈高阻状态。 D7 D0为数字量输出线。 CLK为时钟输入信号线。因 ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为 500KHZ, ntsVREF(), VREF()为参考电压输入。 2 ADC0809应用说明 ( 1) ADC0809内部带有输出锁存器,可以与 AT89S51单片机直接相连。 ( 2) 初始化时,使 ST 和 OE信号全为低电平。 ( 3) 送要转换的哪一通道的地址到 A, B, C 端口上。 ( 4) 在 ST 端给出一 个至少有 100ns宽的正脉冲信号。 ( 5) 是否转换完毕,我们根据 EOC 信号来判断。 ( 6) 当 EOC 变为高电平时,这时给 OE为高电平,转换的数据就输出给单片机了。 电路原理图: adc0809 内部结构图: nts nts二 .广告灯的左移右移 实验任务 做广告灯的左移右移,八个发光二极管分别接在单片机的 P3.0 P3.7接口 上,输出“ 0”时,发光二极管亮,开始时 P3.0 P3.1 P3.2 P3.3 P3.7 P3.6 P3.0亮,重复循环。 (当然,四个输出口可以同时实现广告灯) 硬件电路 #include /*广告灯的左移右移 */ unsigned char i; unsigned char temp; unsigned char a,b; delay()/延时程序 unsigned char m,n,s; for(m=20;m0;m-) for(n=20;n0;n-) for(s=248;s0;s-); main() while(1) temp=0xfe; P3=P2=P0=P1=temp;/直接对 1/0 口 p3赋值,使批 p3.0 输出低电平。 ntsdelay();/延时 for(i=1;i(8-i); P3=P2=P0=P1=a|b; delay(); for(i=1;ii; b=temp0;Delay-) for(i=0;i124;i+) ; void main() unsigned char OutData=0xfe; for(;) P1=OutData; OutData=_crol_(OutData,1); / 循环左移 mDelay(1000); / 1000 延时 1s nts#include #include #include unsigned char code table= 0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0x40; unsigned char sec; /定义计数值,每过 1 秒, sec 加 1 unsigned int tcnt; /定时中断次数 bit write=0; /写 24C08 的标志; sbit gewei=P25; /个位选通定义 sbit shiwei=P24; /十位选通定义 /24C08 读写驱动程序 / sbit scl=P34; / 24c08 SCL sbit sda=P35; / 24c08 SDA void delay1(unsigned char x) unsigned int i; for(i=0;ix;i+); ; void flash() ; ; void x24c08_init() /24c08 初始化子程序 scl=1; flash(); sda=1; flash(); void start() /启动( I 方 C)总线 sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash(); void stop() /停止( I 方 C)总线 sda=0; flash(); scl=1; flash(); sda=1; flash(); void writex(unsigned char j) /写一个字节 unsigned char i,temp; temp=j; for (i=0;i8
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。