郭天祥51单片机笔记.docx
- 文档编号:26087209
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:15
- 大小:161.12KB
郭天祥51单片机笔记.docx
《郭天祥51单片机笔记.docx》由会员分享,可在线阅读,更多相关《郭天祥51单片机笔记.docx(15页珍藏版)》请在冰豆网上搜索。
郭天祥51单片机笔记
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),一般接P1^0-P1^7)。
输出端:
Q(1Q-8Q)。
Z:
高阻状态,非高非低电瓶。
LE:
为高时,Q端与D同变换;为低电平时,Q端保持上次状态。
sbitLED00=0x80;//位指针;指针大小占一个字节;指针控制一个位的值;
sfrLED0=0x80;//字节指针;指针大小占一个字节;指针控制一个字节的值;
4)51库函数
头文件:
#include
函数:
unsignedchar_crol_(unsignedcharc,
unsignedcharb);
描述:
The_crol_routinerotatesthebitpatternforthecharactercleftbbits.This
routineisimplementedasanintrinsicfunction.The_crol_routinereturnsthe
rotatedvalueofc.
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
#defineucharunsignedchar
#defineuintunsignedint
uchari,j,temp_num,num=16;
ucharcodescan[]={0xfe,0xfd,0xfb,0xf7};//11111110-11110111
ucharcodecoding[][4]={//扫描码
0xee,0xde,0xbe,0x7e,
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,
0xe7,0xd7,0xb7,0x77};
ucharcodenum_code[]={
0xc0,0xf9,0xa4,0xb0,//数码管0-16编码
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e,
0xfe};
voiddelay(uintk)//延迟函数
{
uintdatai,j;
for(i=0;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 #defineucharunsignedchar #defineuintunsignedint sbitP37=P3^7;//继电器接口 ucharcodecoding[]={ 0xee,0xde,0xbe,0x7e, 0xed,0xdd,0xbd,0x7d, 0xeb,0xdb,0xbb,0x7b, 0xe7,0xd7,0xb7,0x77}; ucharcodenum_code[]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e, 0xfe}; ucharKey=16;//表示按键编号 voiddelay(uintm) { uintk; while(--m) { for(k=0;k<180;k++); } } uchardetection()//检测按键 { ucharscan1,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)按下放开之后才显示. } else P1=0xff; return16; } voiddispalyI(uchari)//数码管显示函数 { 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.定时器控制寄存器TCON TF0/TF1(TimerFlag): 定时器0/定时器1溢出中断申请标志位,=0未溢出,=1溢出申请中断,进入中断后自动清零。 TR0/TR1(TimerRunning): 定时器运行启动控制位,=0定时器停止运行,=1定时器启动运行。 IT0/IT1(InterruptTrigger触发): 外部中断请求触发方式选择位,=0外部中断低电平触发,=1外部中断负跳变触发。 IE0/IE1: 外部中断申请标志位,=0没有外部中断,=1有外部中断。 3.定时器允许寄存器IE(InterruptEnabled) EX0/EX1(EnabledeXternal): 分别是外部中断INT0/INT1中断允许控制位,=0禁止中断,=1允许中断。 ET0/ET1(EnabledTimer): 分别是片内计时器T0/T1中断允许控制位,=0,禁止中断,=1允许中断。 ET2: T2中断允许控制位。 EA: 总中断控制位,=0禁止全部中断,=1允许中断。 4.中断优先级控制寄存器IP(InterruptPriority) PX0/PX1(PriorityeXternal): INT0/INT1优先级控制位,=0低优先级,=1高优先级。 PT0/PT1/PT2(PriorityTimer): T0/T1/T2中断优先级控制。 PS1(Priorityserialport): 串口中断优先级控制位。 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.interruptm修饰符 m: 0—外部中断INT0 1—定时/计数中断T0 2—外部中断INT1 3—定时/计数中断T1 4—串口中断 5—定时/计数中断T2 外部中断过程: 1)开启中断总开关 EA=1;//EnabledAll 2)开启外部中断INT0开关 EX0=1; 3)选择外部中断的中断触发方式 IT0=1;//0低电平触发,1负跳变触发 4)设定优先级 PX0=1;//0低优先级,1高优先级 5)声明外部中断函数 voidEexternInterrupt()interrupt0//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)声明中断函数 voidTimerInterrupt()interrupt1 { TH0=0x01;//重装计数内存 TL0=0x01; … } 定时/计数软件检测程序过程: 1)选择启动方式、计数/定时、计数方式 TMOD=0x01;//TR0启动,定时(片内计数),16计数方式 2)计数内存高低位置初值 TH0=0x01; TL0=0x01; 3)启动计数/定时器 TR0=1; 4)软件检测TFx标志位 While (1) { if(TF0==1) { TF0=0;//必须手动清零 TH0=0x01;//重装计数内存 TL0=0x01; … } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 郭天祥 51 单片机 笔记