- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
16-1-应用实例
* * 应用实例 例1:用51单片机的P1口驱动一位7段LED显示器。在7段LED显示器轮流显示字符0~F。假设LED为共阳极。 a h 当P1=0xC0时,a、b、c、d、e、f亮,g、h灭,显示“0” ORG 0100 MAIN:MOV R0,#00H MOV DPTR,#TABLE ;表地址送数据指针 DISP:MOV A,R0 ;偏移量送累加器A MOVC A,@A+DPTR ;查表 MOV P1,A ;数据送LED ACALL DELAY INC R0 ;指向下一字符 CJNE R0,#10H,DISP ;未显示完继续 AJMP MAIN ;下一个循环 DELAY:MOV R1,#0FFH LOOP0:MOV R2,#0FFH LOOP1:DJNZ R2,LOOP1 DJNZ R1,LOOP0 RET TABLE: ;字型码表 DB 0C0H ;显示“0”P1口输出 DB 0F9H,0A4H,0B0H,99H,92H,82H,0F8H ; P1口显示“1~7” DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH ;P1口显示“8~F” END 汇编语言程序: #includereg52.h //包括P1口在内的特殊功能寄存器定义 #includeintrins.h //C51内部函数库 unsigned char code table[16]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92, 0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //字型码常数表,在ROM区,只读不可写 void delay(); /*声明延时函数,晶振不同,延时时间长短不等 main() { unsigned char i; while(1) //测试条件永远为真 {for(i=0;i=15;i++) //显示字符0~F {P1=table[i]; //编码送P1口 delay(); //延时 } } } C51源程序 void _dl5us(void) //延时5个NOP,晶振不同,延时时间长短不等 { _nop_();//相当于汇编指令中的空操作指令NOP } void delay( ) { unsigned int n; for(n=0;n=1999;n++) { _dl5us( ); } } 用按键K13到K16去控制发光二极管D1到D4的点亮与熄灭,当某键压下时,与该键对应的发光二极管点亮,再按该键,发光二极管熄灭。 例2 P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0 #include reg51.h #include intrins.h #define uchar unsigned char sbit K13=P2^4; //按键定义 sbit K14=P2^5; sbit K15=P2^6; sbit K16=P2^7; sbit LED1=P0^0; //发光二极管定义 sbit LED2=P0^1; sbit LED3=P0^2; sbit LED4=P0^3; /*延时程序,n:入口参数,单位:2毫秒左右*/ void delay(uchar n) { uchar i; while(n--) for(i=0;i200;i++); } main( ) { while(1) { while ((P20xf0)==0xf0); //等待按键 delay(10); //延时去抖动 if((P20xf0)!=0xf0) { if (K13==0) LED1=~LED1; if (K14==0) LED2=~LED2; if (K15==0) LED3=~LED3; if (K16==0) L
文档评论(0)