《单片机子程序.ppt》由会员分享,可在线阅读,更多相关《单片机子程序.ppt(20页珍藏版)》请在三一办公上搜索。
1、电路设计说明:,要说明各部分电路由哪些元器件组成、被控对象由哪些信号通过了什么转换或器件来驱动的,并简要说明电路中各元件的作用、各部分电路的工作原理。还要对电路使用功能做简要说明。要掌握输入、输出通道接口中常用器件及相关驱动器件或集成电路芯片,例如:开关、按键、继电器、LED及数码管、蜂鸣器、光耦器件、驱动器(注意有普通的和高压输出的)、晶体管、移位寄存器等的原理、控制方法和应用。三款课堂实验接触过的单片机要掌握。其中AT89C2051见课件,三极管极性,9011 NPN(低频小功率晶体管)9012 PNP 9013 NPN 9014 NPN(低频、低噪声小功率晶体管)9015 PNP9018
2、 NPN(高频小功率晶体管),走马灯,DISPLAY_LED:MOV P2,#10H MOV A,#11111110BMOV R4,#8DISPLAY_LED1:MOV P0,ALCALL DELAY30MSLCALL DELAY30MSRL ADJNZ R4,DISPLAY_LED1MOV P2,#00HRET,数码管显示部分(静态),DISPLAY:MOV P2,#0FH MOV R4,#10MOV DPTR,#TABLE1DISPLAY1:MOV A,#0MOVC A,A+DPTRMOV P0,ALCALL DELAY1SINC DPTRDJNZ R4,DISPLAY1MOV P2,#0
3、0HRETTABLE1:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,动态显示数码管(显示5秒)显示数存于30H33H,MOV A,33HMOVC A,A+DPTRSETBP2.3;选通第四位MOV P0,ALCALL DELAY5MSCLR P2.3;关闭选通位DJNZ R7,DISPLAYRETTABLE:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HDB 86H,0AFH,0FFH;0,1,2,3,4,5,6,7,8,9,E,r,全灭,DISPLAY:MOV R7,#250DISPLAY1:M
4、OV A,30H MOVC A,A+DPTRSETB P2.0;选通第一位MOV P0,ALCALL DELAY5MSCLR P2.0;关闭选通位MOV A,31HMOVC A,A+DPTRSETB P2.1;选通第二位MOV P0,ALCALL DELAY5MSCLR P2.1;关闭选通位MOV A,32HMOVC A,A+DPTRSETB P2.2;选通第三位MOV P0,ALCALL DELAY5MSCLR P2.2;关闭选通位,延时子程序(11.0592MHZ),DELAY1S:MOV 55H,#20;延时1秒DELAY1S1:MOV 54H,#100DELAY1S2:MOV 48H,
5、#250DJNZ 48H,$DJNZ 54H,DELAY1S2DJNZ 55H,DELAY1S1RETDELAY500MS:MOV 51H,#10;延时500毫秒DELAY500MS1:MOV 52H,#100DELAY500MS2:MOV 49H,#250DJNZ 49H,$DJNZ 52H,DELAY500MS2DJNZ 51H,DELAY500MS1RET,延时子程序(11.0592MHZ),DELAY30MS:MOV 56H,#55;延时30MS子程序DELAY30MS1:MOV 57H,#250DJNZ 57H,$DJNZ 56H,DELAY30MS1RETDELAY5MS:MOV
6、58H,#10;延时5MS子程序DELAY10MS1:MOV 59H,#249DJNZ 59H,$DJNZ 58H,DELAY10MS1RET,存键值单元清0行线置1,键盘流程图,键盘程序(通用版),KEY_TEST:MOV P3,#01111111BJNB P3.3,S4;K4按下JNB P3.2,S8;K8按下MOV P3,#10111111BJNB P3.3,S3;K3按下JNB P3.2,S7;K7按下MOV P3,#11011111BJNB P3.3,S2;K2按下JNB P3.2,S6;K6按下MOV P3,#11101111BJNB P3.3,S1;K1按下JNB P3.2,S5
7、;K5按下,MOV 20H,#0;无键按下则送0到20HLJMP KEY_TEST_STOPS8:MOV 20H,#8;键值8送20HLJMP KEY_TEST_STOPS7:MOV 20H,#7;键值7送20HLJMP KEY_TEST_STOPS6:MOV 20H,#6;键值6送20HLJMP KEY_TEST_STOPS5:MOV 20H,#5;键值5送20HLJMP KEY_TEST_STOPS4:MOV 20H,#4;键值4送20HLJMP KEY_TEST_STOPS3:MOV 20H,#3;键值3送20HLJMP KEY_TEST_STOPS2:MOV 20H,#2;键值2送20
8、HLJMP KEY_TEST_STOPS1:MOV 20H,#1;键值1送20HKEY_TEST_STOP:LJMP KEY_DEAL,KEY_DEAL:MOV A,P3;等键释放(去抖)ANL A,#0FHCJNE A,#0FH,KEY_DEALMOV A,20H;送键值到A,处理部分(注意等键释放),键盘程序(电子琴版),BEGIN:MOV R7,#0;存放当前扫描列列号MOV R0,#11101111B;扫描0列的扫描码KEY2:MOV P3,R0MOV R4,#1;第一行行首键值JNB P3.3,KEY1MOV R4,#5;第2行行首键值送R3JNB P3.2,KEY1MOV A,R0
9、;列扫描码送ARL A;修改列扫描码MOV R0,AINC R7;得到下次待扫描列列号CJNE R7,#4,KEY2(CLR TR0 CLR P2.5);无键按下关T0和声音LJMP BEGINKEY1:MOV A,R7;当前扫描列列号送AADD A,R4;求键值(当前扫描列列号加当前扫描行首键键值)MOV 20H,A;键值暂存20HKEY_WAIT:MOV A,P3;等键释放ANL A,#0FHCJNE A,#0FH,KEY_DEALMOV A,20H;送键值到A,BCD转换送数码管动态显示(R6存要转换的16进制数),BCD_DISPLAY:MOV A,R6;动态显示当前频率值MOV B,
10、#10;将A值转换为10进制,R6=99DIV AB;除后,十位在A,个位在BMOV DPTR,#TAB_DIS;查数码管显示表(共阳)MOVC A,A+DPTR;十位要显示的数MOV R4,A;十位暂存R4MOV A,BMOVC A,A+DPTR;个位要显示的数MOV R3,A;各位暂存R3DIS:MOV P2,#00000100B;动态显示数码管MOV P0,R4;显示十位1SLCALL DELAY1MSMOV P2,#00001000B MOV P0,R3;显示个位1SLCALL DELAY1MSTAB_DIS:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8
11、H,80H,90H;显示码,AT24CX的接口电路及编程(设晶振为6MHZ,P1.6为SCL,P1.7为SDA),SDA VCCSCL A0TEST A1VSS A2,5674,8123,P1.7P1.6,8051,VCC,R=5.1K,AT24C02,(1)启动I2C子程序:要求在时钟为高电平期间数据线由高变低。STA:SETBP1.7;SDA=1 SETBP1.6;SCL=1 NOP NOP CLRP1.7;SDA=0 NOP NOP CLRP1.6;SCL=0 RET,(2)停止I2C子程序:要求在时钟为高电平期间数据线由低变高。STOP:CLRP1.7;SDA=0 SETBP1.6;S
12、CL=1 NOP NOP SETBP1.7;SDA=1 NOP NOP CLRP1.6;SCL=0RET,SDA,SCL,SDA,SCL,(3)发送应答位”0”子程序:要求在SCL高电平期间主控器件向被控器件发送”0”应答信号。,SACK:CLR P1.7SETBP1.6NOPNOPCLRP1.6SETBP1.7RET,SDA,SCL,(4)发送非应答位”1”子程序:要求在SCL高电平期间主控器件向被控器件发送”1”应答信号。,SDA,SCL,SNACK:SETB P1.7 SETB P1.6 NOP NOP CLRP1.6 CLRP1.7 RET,(5)应答位检查子程序:用于检查一字节数据传
13、送后,被控器件在第9位是否发回”0”的应答,若是,程序置F0标志为0,否则置F0标志为1。,ACK_CHK:SETB P1.7;将P1.7拉高,以便让 接收端发应答信号 SETBP1.6;输出时钟 CLRF0;预先设为会发应答 MOV A,P1;读P1口 JNB ACC.7,EXIT;查接收端是否 发回了低电平?SETBF0;不是,则置F0=1EXIT:CLRP1.6;结束时钟 NOP NOP RET,SDA,SCL 9,正常应答信号,出口参数:F0(反映是否收到应答的标识位),(6)向SDA线上发送一个字节数据的子程序(待发数据在A中)入口参数:A(存待发送数)WRBYT:MOV R0,#0
14、8H;长度WLP:RLCA;待发送数据左移 JCWR1 AJMP WR0WLP1:DJNZR0,WLP RETWR1:SETB P1.7;发送“1”(SCL=1时,SDA保持“1”)SETBP1.6NOPNOP,CLR P1.6 CLR P1.7 AJMPWLP1,WR0:CLR P1.7;发送“0”(SCL=1时,SDA保持“1”)SETB P1.6 NOP NOP,CLRP1.6AJMPWLP1,(7)从SDA线上读取一个字节数据的子程序 出口参数:R2(读取的数据移放入R2)RDBYT:MOV R0,#08H;8位RLP:SETBP1.7;P1.7为输入状态SETBP1.6;使SDA有效
15、MOVA,P1JNBACC.7,RD0;读入的是”0”则转RD0 AJMP RD1;否则跳转到 RD1RLP1:DJNZ R0,RLP;8位未读完则转RLPRETRD0:CLRC;读入“0”,拼装 MOVA,R2RLCAMOVR2,A CLR P1.6AJMP RLP1,RLCA MOV R2,A CLR P1.6;使SCL为0,可以继续接收AJMPRLP1,RD1:SETB C;读入“1”,拼装 MOVA,R2,WRNBYT:PUSHPSWWRNBYT1:MOV PSW,#18H;换工作寄存器区WRNBYT2:LCALL STA;启动I2C总线MOVA,SLA;寻址字节SLA W/RLCAL
16、L WRBYT;调发1个字节子程序发寻址字节LCALL ACK_CHK;检查应答位 JBF0,WRNBYT2;非应答位,重发 MOV A,#MTS;数据存入起始地址(EEROM片内寻址)LCALL WBYTE LCALL ACK_CHK;检查应答位,(8)模拟I2C总线发送几个字节数据(以字节写的形式),;入口参数:NUMBYT(存发送字节数单元)MTD(待发数据所在缓冲区首地址)MTS(写入EEROM中单元地址),JB F0,WRNBYT2;非应答则重发INCR1 DJNZNUMBYT,WRDA;判发送完?LCALL STOP;停止POPPSWRET,WRDA:MOV A,R1;取一数 LC
17、ALLWRBYT;发送 LCALL ACK_CHK;检查应答位,JBF0,WRNBYT2;非应答位,重发MOVR1,#MTD;待发数据缓冲区首址送R1,交通灯实验 程序,ORG0000HSTA:MOV P0,#11011011B;干线亮绿灯,支线亮红灯MOVP2,#00010000B;选通LEDMOVP3,#11101111B;K1列线置0MOVR7,#3STA1:JB P3.3,$;无按键等待LCALL DELAY30MS;去抖动JBP3.3,STA1JNBP3.3,$;等键释放DJNZ R7,STA1MOVR6,#200STA2:LCALL DELAY30MS;延时30MSDJNZ R6,
18、STA2;延时6秒MOVP0,#10111011B;干线亮黄灯,支线亮红灯MoVR6,#100,STA3:LCALLDELAY30MSDJNZ R6,STA3;延时3秒MOVP0,#01111110B;干线亮红灯,支线亮绿灯MOVR5,#4STA4:MOV R6,#200STA5:LCALLDELAY30MSDJNZ R6,STA5DJNZ R5,STA4;延时24秒MOVP0,#01111101B;干线亮绿灯,支线亮黄灯MOVR6,#100STA6:LCALLDELAY30MSDJNZ R6,STA6;延时3秒LJMP STADELAY30MS:MOV R4,#55DELAY:MOVR3,#250DJNZ R3,$DJNZR4,DELAYRET,