51c程序集51单片机基本应用全集.docx
- 文档编号:4684973
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:55
- 大小:24.62KB
51c程序集51单片机基本应用全集.docx
《51c程序集51单片机基本应用全集.docx》由会员分享,可在线阅读,更多相关《51c程序集51单片机基本应用全集.docx(55页珍藏版)》请在冰豆网上搜索。
51c程序集51单片机基本应用全集
51——单片机程序
延时函数
晶振频率12MHZ
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
Voiddelay()
{;;}//15us
voiddelay(uintn)
{
while(n--);
}
voiddelay_nms(uintn)
{
uintx,y;
for(x=0;x for(y=0;y<120;y++); } voidmain() { _nop_();//1us delay (1);//25us delay (2);//34us delay(3);//43us delay(5);//61us delay(10);//106us delay(50);//466us delay(100);//916us Delay(1000);//9019us delay_nms (1);//,991us delay_nms(10);//9,675us delay_nms(100);//97,515us while (1); } 1: /*----------------------------------------------- 名称: 流水灯 内容: 循环点亮P1口对应的8个LED灯,造成循环流水点亮的效果 ------------------------------------------------*/ #include #defineucharunsignedchar #defineuintunsignedint /*------------------------------------------------ 延时子程序 ------------------------------------------------*/ voiddelay(uintcnt) { while(--cnt); } /*------------------------------------------------ 主函数 ------------------------------------------------*/ main() { P1=0xfe;//给初始化值换算成二进制是11111110 while (1) { delay(58000);//延时程序 P1<<=1;//左移一位该语句等效于P1=P1<<1 P1|=0x01;//最后一位补1,该语句等效于P1=P1|0x01符号"|"表示"或" if(P1==0x7f)//检测是否移到最左端? "=="表示检测符号2端的值是否相等 { delay(58000); P1=0xfe;//重新赋值 } } } 2: #include #defineucharunsignedchar #defineuintunsignedint /*------------------------------------------------ 延时子程序 ------------------------------------------------*/ voiddelay(uintcnt) { while(--cnt); } /*------------------------------------------------ 主函数 ------------------------------------------------*/ main() { P1=0xff;//给初始化值换算成二进制是11111110 while (1) { delay(58000); P1=0xaa; delay(58000); P1=0x55; } } 3 /*调用位移函数的流水灯程序*/ #include #include #defineuintunsignedint #defineucharunsignedchar uchartemp,num,num1; voiddelay(uintz) { uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } voidmain() { temp=0xfe; while (1) { P1=temp; delay(100); temp=_crol_(temp,1);//重要的51库函数调用 delay(100); } } 4: /*----------------------------------------------- 名称: 喇叭 内容: 一般现象可以看到P1口LED闪烁,需要将该口通过杜邦线连接到喇叭信号输入端子,可以参考电路图或者说明书 ------------------------------------------------*/ #include sbitSPK=P1^5;//定义喇叭端口 /******************************************************************/ /*延时函数声明*/ /******************************************************************/ voiddelay(unsignedintcnt) { while(--cnt); } /******************************************************************/ /*主函数*/ /******************************************************************/ main() { unsignedinti; while (1) { for(i=0;i<200;i++)//喇叭发声的时间循环,改变大小可以改变发声时间长短 { delay(50);//参数决定发声的频率,估算值,可以自行更改参数并 SPK=! SPK; } SPK=1;//喇叭停止工作,间歇的时间,可更改 delay(20000); } } 5: /*----------------------------------------------- 名称: 音乐播放 修改: 无 内容: ------------------------------------------------*/ #include sbitspeaker=P1^5;//定义音乐输出端口,需要连接到对应的喇叭,请参考电路图 unsignedchartimer0h,timer0l,time; //世上只有妈妈好数据表 codeunsignedcharsszymmh[]={6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,5,2,1, 6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1, 6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,5,2,2, 5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1, 2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0 }; //音阶频率表高八位 codeunsignedcharFREQH[]={ 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,8,i 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF, }; //音阶频率表低八位 codeunsignedcharFREQL[]={ 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6, 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,8,i 0xEE,0x44,0x6B,0xB4,0xF4,0x2D, 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16, }; /******************************************************************/ /*延时函数*/ /******************************************************************/ voiddelay(unsignedchart) { unsignedchart1; unsignedlongt2; for(t1=0;t1 { for(t2=0;t2<8000;t2++) { ; } } TR0=0; } /******************************************************************/ /*定时器中断函数*/ /******************************************************************/ voidt0int()interrupt1 { TR0=0; speaker=! speaker; TH0=timer0h; TL0=timer0l; TR0=1; } /******************************************************************/ /*音乐处理函数*/ /******************************************************************/ voidsong() { TH0=timer0h; TL0=timer0l; TR0=1; delay(time); } /******************************************************************/ /*主函数*/ /******************************************************************/ voidmain(void) { unsignedchark,i; TMOD=1;//置CT0定时工作方式1 EA=1; ET0=1;//IE=0x82//CPU开中断,CT0开中断 while (1) { i=0; while(i<100){//音乐数组长度,唱完从头再来 k=sszymmh[i]+7*sszymmh[i+1]-1; timer0h=FREQH[k]; timer0l=FREQL[k]; time=sszymmh[i+2]; i=i+3; song(); } } } 6: 步进电机的简单应用 #include #defineuintunsignedint #defineucharunsignedchar ucharcodeffw[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; voiddelayus(uintus) { uinti,j; for(j=0;j for(i=0;i<12;i++); } voidmain() { uchari; while (1) { for(i=0;i<8;i++) {P1=ffw[i]; delayus(10); } } } 7: 独立按键控制继电器 #include sbitjdq=P1^0; sbitkey1=P3^0; sbitkey2=P3^1; voiddelay(unsignedinta) { while(a--); } voidmain() { jdq=0; while (1) { if(key1==0) {jdq=1; //delay(5000); } if(key2==0) {jdq=0; //delay(5000); } } } 8: 数码管的静动显示及简单独立按键的使用 #include unsignedcharconstEL[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //显示段码值01234567 unsignedcharcodeseg[]={0,1,2,3,4,5,6,7};//分别对应相应的数码管点亮,即位码 sbitkey1=P3^0; sbitkey2=P3^1; sbitkey3=P3^2; sbitkey4=P3^3; /*------------------------------------------------ 延时子程序 ------------------------------------------------*/ voiddelay(unsignedintcnt) { while(--cnt); } voidmain() { unsignedchari; i=0; P3=0XFF; while (1) { P0=0X06; P2=0; delay(100); P0=0X5b; P2=1; delay(100); P0=0X4f; P2=2; delay(100); P0=0X66; P2=3; delay(100); P0=0X6d; P2=4; delay(100); P0=0X7d; P2=5; delay(100); P0=0X07; P2=6; delay(100); P0=0X7f; P2=7; delay(100); if(key1==0) break; } while (1) { if(key1==0) delay(100); if(key1==0) { P0=EL[0]; P2=0; } if(key2==0) delay(100); if(key2==0) { P0=EL[1]; P2=0; } if(key3==0) delay(100); if(key3==0) { P0=EL[2]; P2=0; } if(key4==0) delay(100); if(key4==0) { P0=EL[3]; P2=0; } } } 9: /*----------------------------------------------- 矩阵键盘实验程序 通过反转法循环扫描矩阵键盘,并通过数码管显示数据 ------------------------------------------------*/ #include #defineucharunsignedchar #defineuintunsignedint unsignedcharconstEL[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F /*------------------------------------------------ 函数声明 ------------------------------------------------*/ ucharkeyscan(void);//键盘扫描 voiddelay(uinti);//演示程序 /*------------------------------------------------ 主函数 ------------------------------------------------*/ voidmain() { ucharkey; P2=0;//1数码管亮按相应的按键,会显示按键上的字符 P0=0X00; while (1) { key=keyscan();//调用键盘扫描, switch(key) { case0xee: P0=EL[0];break;//0按下相应的键显示相对应的码值 case0xde: P0=EL[1];break;//1按下相应的键显示相对应的码值 case0xbe: P0=EL[2];break;//2 case0x7e: P0=EL[3];break;//3 case0xed: P0=EL[4];break;//4 case0xdd: P0=EL[5];break;//5 case0xbd: P0=EL[6];break;//6 case0x7d: P0=EL[7];break;//7 case0xeb: P0=EL[8];break;//8 case0xdb: P0=EL[9];break;//9 case0xbb: P0=EL[10];break;//a case0x7b: P0=EL[11];break;//b case0xe7: P0=EL[12];break;//c case0xd7: P0=EL[13];break;//d case0xb7: P0=EL[14];break;//e case0x77: P0=EL[15];break;//f } } } /*------------------------------------------------ 键盘扫描程序 ------------------------------------------------*/ ucharkeyscan(void)//键盘扫描函数,使用行列反转扫描法 { ucharcord_h,cord_l;//行列值中间变量 P3=0x0f;//行线输出全为0 cord_h=P3&0x0f;//读入列线值 if(cord_h! =0x0f)//先检测有无按键按下 { delay(100);//去抖 if(cord_h! =0x0f) { cord_h=P3&0x0f;//读入列线值 P3=cord_h|0xf0;//输出当前列线值//当时还是按住的实际P3=11101110。 结合实际按键 cord_l=P3&0xf0;//读入行线值 return(cord_h+cord_l);//键盘最后组合码值 } }return(0xff);//返回该值 } /*------------------------------------------------ 延时程序 ------------------------------------------------*/ voiddelay(uinti)//延时函数 { while(i--); } 10: (1)/*外部中断0/1的简单应用*/ #include sbitspeaker=P0^0; #defineucharunsignedchar #defineuintunsignedint /*------------------------------------------------ 延时子程序 ------------------------------------------------*/ voiddelay(uintcnt) { while(--cnt); } /*------------------------------------------------ 主函数 ------------------------------------------------*/ main() { EA=1;//开总中断 //EX0=1;//开外部中断0 //IT0=1; EX0=1; TCON=0x01;//跳变出发设置 //EX1=1;TCON=0x05; P1=0xfe;//给初始化值换算成二进制是11111110 while (1) { delay(58000);//延时程序 P1<<=1;//左移一位该语句等效于P1=P1<<1 P1|=0x01;//最后一位补1,该语句等效于P1=P1|0x01符号"|"表示"或" if(P1==0x7f)//检测是否移到最左端? "=="表示检测符号2端的值是否相等 { delay(58000); P1=0xfe;//重新赋值 } } } voidexter1()interrupt1 { uinti; while (1) { for(i=0;i<2000;i++) { speaker=0; delay(20000); speaker=1; delay(20000); } } } (2) 外部中断0的简单配置应用 #inc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 程序 单片机 基本 应用 全集