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端保持上次状态。
sbit LED00 = 0x80; //位指针;指针大小占一个字节;指针控制一个位的值;sfr LED0 = 0x80; //字节指针;指针大小占一个字节;指针控制一个字节的值;4)51库函数头文件:#include <intrins.h>函数: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 therotated 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 <reg52.h>void main(){while(1){if(K1 ==0){delay(20);//大约延时10-20msif(K1 ==0){//确独立按键K1按下}}while(!K1);//确认为一次动作}}9)4*4矩阵键盘行线:P1.0-P1.3。
竖线:P1.4-P1.7。
优点:占用端口少,硬件电路简单。
缺点:编程较复杂。
矩阵键盘的检测方法:扫描法和线反转法。
程序实例:1)扫描法#include <reg52.h>#define uchar unsigned char#define uint unsigned intuchar i,j,temp_num,num =16;uchar code scan[]={0xfe,0xfd,0xfb,0xf7};//1111 1110 - 1111 0111uchar code coding[][4]={//扫描码0xee,0xde,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};void delay(uint k)//延迟函数{uint data i,j;for(i=0;i<k;i++){for(j=0;j<180;j++){;}}}void main(){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 <reg52.h>#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;//表示按键编号void delay(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;return i;}}// }// P1 = 0xf0; 去掉上面的return就可以,两种区别是: // while(0xf0 != P1);1)按下就显示;// 2)按下放开之后才显示.}elseP1 =0xff;return16;}void dispalyI(uchar i)//数码管显示函数{P2 =0x7f;P0 = num_code[i];}void main()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()interrupt 1{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;…}}。