郭天祥51单片机笔记_第1页
郭天祥51单片机笔记_第2页
郭天祥51单片机笔记_第3页
免费预览已结束,剩余7页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.1) 二极管导通电流i: 3ma-10ma ; 导通压降v: 1.7v。( 排阻计算公式:r = vcc(5v)-v(1.7v)/i(3ma) ) 。2) 电源指示灯开关电源: 内部有开关控制电流大小,不稳定。去耦电容: 稳压,去波。3)锁存器( 74hc573)oe:outenable,低电平有效(必须为低电平)。输入端: oe(1), le(11 锁存端 diola) , d(d0(2)-d7(9) ,一般接p10-p17)。输出端: q( 1q-8q)。z:高阻状态,非高非低电瓶。le: 为高时, q 端与 d 同变换;为低电平时,q 端保持上次状态。sbit led00 = 0x80;/ 位指针;指针大小占一个字节;指针控制一个位的值;sfr led0 = 0x80;/ 字节指针;指针大小占一个字节;指针控制一个字节的值;4)51 库函数头文件:#include 函数:unsigned char _crol_(unsigned char c,unsigned char b);描 述 : the _crol_ routine rotates the bit pattern for the character c left b bits. this routine is implemented as an intrinsic function. the _crol_ routine returns the rotated value of c.5) 蜂鸣器名称: b:基极; c:集电极; e:发射集; 原理: e 极发射电子; 当 b 极接低电平时, ce 导通,并且放大电流; 当 b 接高电平时, ce 截止。jpfmq接 p3.6 管脚。分类:有源蜂鸣器;无缘蜂鸣器。(源:震荡源)proteus: buzzer-有源; sounder 、speaker-;.无源。端口电压: 0.02v。6) 数码管p0 管脚: 没有上拉电阻,所有有三态。p1、 p2、 p3 管脚: 有上拉电阻,没有三态。分类: 共阴极;共阳极。显示方法: 静态,动态。段选: p0.0-p0.7。位选: p2.0-p2.7。7) 继电器接口: p3.7。d4:引流二极管,防止断电烧坏电炉原件。;.8)独立键盘k1-k4: p3.2-p3.5。k5-k8: p1.4-p1.7。独立键盘检测程序:#include voidmain()while( 1 )if( k1=0)delay( 20 );/大约延时10-20ms if( k1=0)/确独立按键k1 按下while(!k1 );/确认为一次动作9)4*4矩阵键盘行线: p1.0-p1.3。竖线: p1.4-p1.7。优点: 占用端口少,硬件电路简单。缺点: 编程较复杂。矩阵键盘的检测方法:扫描法和线反转法。程序实例:1) 扫描法#include #define uchar unsigned char #define uint unsigned intuchar i, j , temp_num, num=16 ;uchar code scan= 0xfe, 0xfd, 0xfb, 0xf7;/1111 1110 - 1111 0111;.uchar code coding0xee, 0xde4 ,=0xbe,0x7e,/扫描码0xed, 0xdd,0xbd,0x7d,0xeb, 0xdb,0xbb,0x7b,0xe7, 0xd7,0xb7,0x77;uchar code num_code=0xc0, 0xf9,0xa4,0xb0, /数码管 0-16编码0x99, 0x92,0x82,0xf8,0x80, 0x90,0x88,0x83,0xc6, 0xa1,0x86,0x8e,0xfe;voiddelay( uint k)/延迟函数uint data i, j ; for( i =0 ; i k ; i +) for( j = 0 ; j 180 ; j +);voidmain()p1=0xff; while( 1 )p1=0xf0;if( 0xf0!=p1 ) /第一次检测/ delay(20);/消抖/ p1 = 0xf0;/第二次检测/ if(0xf0 != p1)/实践证明不必消抖也是可以的/ temp_num= num ; for( i = 0 ; i 4; i +)p1= scan i ;for( j =0 ; j 4; j +)if( coding i j = p1 )num=4 * i+ j; break;if( num!=temp_num) break;/p1=0xf0;while( 0xf0!=p1 );/防止多次检测p0= num_code num ;p2=0x7f ;2) 线反转法#include #define uchar unsigned char #define uint unsigned intsbit p37= p3 7;/继电器接口uchar code coding=0xee , 0xde , 0xbe , 0x7e , 0xed , 0xdd , 0xbd , 0x7d , 0xeb , 0xdb , 0xbb , 0x7b , 0xe7 , 0xd7 , 0xb7 , 0x77;uchar code num_code= 0xc0 , 0xf9, 0xa4 , 0xb0 ,0x99 , 0x92 , 0x82 , 0xf8,0x80 , 0x90 , 0x88 , 0x83 ,0xc6 , 0xa1 , 0x86 , 0x8e , 0xfe;uchar key=16 ;/表示按键编号voiddelay( uint m)uint k;while(-m)for( k = 0; k 180 ; k +);uchar detection() /检测按键uchar scan1, scan2, key_code, i ;p1=0xf0;scan1= p1 ;if( 0xf0!=scan1)/ delay(30);/ scan1 = p1;/ if(0xf0 != scan1)/ p1=0x0f;scan2= p1 ;key_code= scan1|scan2;/组合编码for( i = 0; i 16 ; i +)if( key_code= coding i )key= i;p37=! p37 ;returni;/ / p1 = 0xf0;去掉上面的return就可以,两种区别是:/ while(0xf0 != p1);1)按下就显示;/2)按下放开之后才显示.elsep1=0xff;return16 ;voiddispalyi( uchar i)/数码管显示函数p2=0x7f;p0= num_code i ;voidmain()p1=0xff; while( 1 )detection();dispalyi( key );10)中断、计时、计数1. 中断源:1) 两个外部中断源: int0(p3.2),int1(p3.3)。(int: interrupt)2) 三个片内定时器: t0(外部计数 p3.4 ),t1( 外部计数 p3.5) ,t2。(timer )3) 一个串口中断请 : ti/ri 。2. 定时器控制寄存器tcontf0/tf1(timer flag): 定时器 0/ 定时器 1 溢出中断申请标志位, =0 未溢出,=1 溢出申请中断,进入中断后自动清零。tr0/tr1( timer running ): 定时器运行启动控制位,=0 定时器停止运行, =1定时器启动运行。it0/it1(interrupt trigger触发) : 外部中断请求触发方式选择位,=0 外部中断低电平触发, =1 外部中断负跳变触发。ie0/ie1:外部中断申请标志位, =0 没有外部中断, =1 有外部中断。3定时器允许寄存器ie(interrupt enabled)ex0/ex1(enabled external): 分别是外部中断int0/int1 中断允许控制位, =0禁止中断, =1 允许中断。et0/et1(enabled timer) :分别是片内计时器t0/t1 中断允许控制位, =0,禁止中断, =1 允许中断。et2:t2 中断允许控制位。ea:总中断控制位, =0 禁止全部中断, =1 允许中断。4. 中断优先级控制寄存器ip( interrupt priority)px0/px1(priority先级。external):int0/int1 优先级控制位, =0 低优先级, =1 高优pt0/pt1/pt2(priority timer):t0/t1/t2 中断优先级控制。ps1( priority serial port): 串口中断优先级控制位。5.定时器方式寄存器tmod常用工作方式:(m1,m0) = (0,1):16 位定时器。(m1,m0) = (1,0):8 位自动重装定时器。c/t: 计数器/ 定时器选择位, =0 定时,片内计数; =1 片外计数( t0,t1)。 gate门控制位: =0 由 trx启动计数器 / 定时器( trx=1启动);=1 由 trx和 intx 共同启动 (trx=1,intx=1 启动) 计数器/ 定时器。6. interrupt m修饰符m:0外部中断 int01定时/ 计数中断 t02外部中断 int13定时/ 计数中断 t14串口中断5定时/ 计数中断 t2外部中断过程:1) 开启中断总开关ea = 1;/enabled all2) 开启外部中断 int0 开关ex0 = 1;3) 选择外部中断的中断触发方式it0= 1;/0低电平触发, 1 负跳变触发4) 设定优先级px0 = 1;/0低优先级, 1 高优先级5) 声明外部中断函数void eexterninterrupt()interrupt 0/0外部中断 0.定时器/ 计数器发生过程:1. 定时器/ 计数器选择: 定时器和计数器都是片内16 位计数内存工作,当作为计数器时, 片内 16 位计数内存是对外部t0/t1 引脚的矩形波进行计数;当做为定时器时,片内16 位计数内存是对晶振产生的方波进行12 分频后所得的方波进行计数;定时和计数是由定时器方式寄存器tmod的 c/t 位进行选择的。2. 定时/ 计数溢出事件方法当片内 16 位计数内存溢出时则触发溢出事件,溢出事件的发生可以有定时/ 计数中断产生,也可由软件检测溢出标志位tfx位的值产生。定时/ 计数中断程序过程:1) 打开总中断开关ea = 1;2) 打开计时器中断开关et0 = 1;3) 选择启动方式、计数 / 定时、计数方式tmod = 0x01;/tr0启动,定时(片内计数) ,16 计数方式4) 计数内存高低位置初值th0 = 0x01; tl0 = 0x01;5) 启动计数 / 定时器tr0 = 1;6) 声明中断函数void timerinterrupt()interr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论