课件分析教案_第1页
课件分析教案_第2页
课件分析教案_第3页
课件分析教案_第4页
课件分析教案_第5页
已阅读5页,还剩290页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功 实例6:使用P3口流水点亮8位 实例7:通过对P3口地址的操作流水点亮8位 实例9:用P0口、P1口分别显示加法和减法运算结 实例10:用P0、P1口显示乘法运算结 实例11:用P1、P0口显示除法运算结 实例12:用自增运算控制P0口8位LED流水花 实例13:用P0口显示逻辑"与"运算结 实例14:用P0口显示条件运算结 实例15:用P0口显示按位"异或"运算结 实例16:用P0显示左移运算结 w c 实例19:用if语句控制P0口8位LED的流水方 实例20:用swtich语句的控制P0口8位LED的点亮状 实例21:用for语句控制蜂鸣器鸣笛次 实例22:用while语句控制 实例23:用do-while语句控制P0口8位LED流水点 实例24:用字符型数组控制P0口8位LED流水点 实例25:用P0口显示字符串常 实例26:用P0口显示指针运算结 实例27:用指针数组控制P0口8位LED流水点 实例28:用数组的指针控制P0口8位LED流水点 实例29:用P0、P1口显示整型函数返回 实例30:用有参函数控制P0口8位LED流水速 实例32:用指针作函数参数控制P0口8位LED流水点 实例33:用函数型指针控制P1口灯花 实例35:字符函数ctype.h应用举 实例36:内部函数intrins.h应用举 实例37:标准函数stdlib.h应用举 实例38:字符串函数string.h应用举 *****************************************************************中断、定时器********中断、定时器*********************中断、定时器*********中断、定时器******** 实例42:用定时器T0查询方式P2口8位控制LED闪 实例43:用定时器T1查询方式控制单片机发出1KHz音 实例44:将计数器T0计数的结果送P1口8位LED显 实例45:用定时器T0的中断控制1位LED闪 实例46:用定时器T0的中断实现长时间定 实例47:用定时器T1中断控制两个LED以不同周期闪 实例48:用计数器T1的中断控制蜂鸣器发出1KHz音 实例49:用定时器T0的中断实现"渴望"曲的实例50-1:输出50个矩形脉 实例50-2:计数器T0统计外部脉冲 实例51-2:定时器T0的模式2测量正脉冲宽 实例52:用定时器T0控制输出高低宽度不同的矩形 实例53:用外中断0的中断方式进行实例54-1:输出负脉宽为200微秒的方 实例55:方式0控制流水灯循环点 w 实例58:单片机向PC发送数 实例59:单片机接收PC发出的数 实例60:用LED数码显示数字 实例61:用LED数码显示器循环显示数字 实例63:用LED数码显示器伪静态显示数字 实例67:用LED数码管显示计数器T0的计数 *********键盘控制**** 实例71:CPU控制的独立式键盘扫描实 实例73:独立式键盘控制的4级变速流水 实例81:用LCD显示字符 实例82:用LCD循环右移显示 eto 实例83:用LCD显示适时检测结 ww ******************************w*Cwrd********************些的使用 红外 实例85:将数据"0x0f"写入AT24C02再读出送P1口显 实例86:将按键次数写入AT24C02,再读出并用1602LCD显 实例87:对I2C总线上挂接多个AT24C02的读写操 实例88:基于AT24C02的多机通信程 实例88:基于AT24C02的多机通信写入程 实例90:DS18B20温度检测及其液晶显 实例91:将数据"0xaa"写入X5045再读出送P1口显 实例92:将流水灯控制码写入X5045并读出送P1口显 实例93:对SPI总线上挂接多个X5045的读写操 实例94:基于ADC0832的数字电压 实例95:用DAC0832产生锯齿波电 实例96:用P1口显示红外的按键 实例98:基于DS1302的日历时 模拟霍尔脉 void{}实例w void {unsignedinti; //做20000次空循环 }(C1个主函数voidmain(void){ { //P1=11111110BP1.0 //P1=11111111BP1.0 }} (C1个主函数void{ { //将P1口状态送入P0口 //将P1口状态送入P2口 //将P1口状态送入P3口}}w wwwPLCworld void{unsignedchari,j;;}voidmain(void){

}}w wwwPLCworld sfrx=0xb0; //8位特殊功能寄存器,对地址xP1voiddelay(void){unsignedchari,j; }voidmain(void){{ }w wwwPLCworld} voidint_delay(void)//延时一段较长的时间{unsignedintm; }//{unsignedchari,j; }voidmain(void){unsignedchari;{{ //P1.0口的灯点亮int_delay();//延时一段较长的时间 }w {

wwwPLCworld //P1.4口的灯点亮 ();//}}}voidmain(void){unsignedchar //P1=103=01100111B,P1.3、P1.4、P1.7 }voidmain(void){unsignedcharm,n;unsignedints; 8P0w 256

wwwPLCworld //8P1P1=17=11H=00010001BP1.0P1.4 //8P0P3=192=c0H=11000000B,P3.1,P3.6,P3.7} voidmain(void){ P0=((36%5)*10)/5;//求小数 } voiddelay(void){unsignedinti;;}函数功能w {

wwwPLCworldunsignedchar { }} voidmain(void){ } voidmain(void){ } voidmain(void){w wwwPLCworld } voidmain(void){ } sbitF=P1^4; //将F位定义为P1.4sbit //XsbitY=P1^6; //将Y位定义为P1.6sbitZ=P1^7; //将Z位定义为P1.7voidmain(void){{;}} voiddelay(void){ww unsignedintn;;

wwwPLCworld}voidmain(void){unsignedchari;{{ //每次循环P1的各二进位右移1位,补0 }}} sbitS1=P1^4; //将S1位定义为P1.4sbit voidmain(void){{ }}w wwwPLCworld sbitS1=P1^4; //将S1位定义为P1.4voiddelay(void){unsignedintn;;}voidmain(void){unsignedchar { { } {case1 case2 case case w case case case }}} sbitsound=P3^7; //将sound位定义为P3.7voiddelay1600(void){unsignedcharn;;}voiddelay800(void){unsignedcharn;;}voidmain(void){ww {

wwwPLCworld{ //P3.7 //P3.7}{ //P3.7 //P3.7}}} voiddelay60ms(void){unsignedcharm,n;;}voidmain(void){unsignedcharw {

wwwPLCworld { //iP0delay60ms();//延时 }}} voiddelay60ms(void){unsignedcharm,n;;}voidmain(void){{ w //第六个LEDwwwPLCworld } voiddelay60ms(void){unsignedcharm,n;;}voidmain(void){unsignedcharunsignedcharcodeTab0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f定义无符{{}}}w wwwPLCworld voiddelay150ms(void){unsignedcharm,n;;}voidmain(void){unsignedcharstr[]={"Now,Temperatureis:"}; unsignedchar{ while(str[i]!='\0')//只要没有显示到结束标志'\0'{ }}}voidmain(void){unsignedchar*p1,*p2; unsignedchari,j; w wwwPLCworld }voiddelay150ms(void){unsignedchar;}voidmain(void){unsignedcharcodeTab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedchar*p[]={&Tab[0],&Tab[1],&Tab[2],&Tab[3],&Tab[4],&Tab[5],unsignedchari; {{}}}w

wwwPLCworldvoiddelay150ms(void){unsignedcharm,n;;}voidmain(void){unsignedcharunsignedcharTab[unsignedchar*p; {{ //*(p+i)的值等于a[i] }}}w unsignedintsum(inta,intb){unsignedints;return}voidmain(void){unsignedz; //取得z的高8位P0=z%256;//z8位;}voiddelay(unsignedcharx){unsignedcharm,n;;}voidmain(void){w unsignedchar wwwPLCworld charcodeTab[{{ }{ }}}voiddelay(void){unsignedcharm,n;;}P08voidled_flow(unsignedchara[8]){unsignedchari;{w }}

wwwPLCworldvoidmain(void){ charcodeTab[}voiddelay(void){unsignedcharm,n;;}P08voidled_flow(unsignedchar*p形参为无符号字符型指针{unsignedchari;{ //将i置为0,指向数组第一个元素{P0=*(p+i);//取的指针所指变量(数组元素)P0w //调用延时wwwPLCworld }}}voidmain(void){ charcodeTab[ unsignedchar} unsignedcharcodevoiddelay(void){w

unsignedcharm,n;;

wwwPLCworldvoidled_flow(void){unsignedchari; {}}voidmain(void){void(*p)(void);//定义函数型指针,所指函数无参数,无返回值 //将函数的地址赋给函数型指针p } unsignedcharcodestr1TemperatureistestedbyDS18B20";//C语言中,字符串unsignedcharcodestr2[]="Nowtemperatureis:"; unsignedcharcodestr3[]="TheSystermisdesignedbyZhangSan";unsignedcharcodestr4[]="Thedateis2008-9-30";voiddelay(void){ww unsignedcharm,n;;}

wwwPLCworldP08voidled_display(unsignedchar*x[]) {unsignedchar{ { }}voidmain(void){unsignedchari;{;//}} voidmain(void){w wwwPLCworld}} voiddelay(void){unsignedcharm,n;;voidmain(void){ {P3=_crol_(P3,1);//将P3的二进制位循环左移1位后再赋给P3 }} ww ******************************w*Cwrdvoiddelay(void){unsignedcharm,n;;}voidmain(void){unsignedchari;{{}}#include<reg51.h>//51单片机寄存器定义的头文件#include<string.h>//包含函数isalpha()的头文件voidmain(void){unsignedcharstr1[]="Now,Thetemperatureisunsignedcharstr2[]="Now,Thetemperatureis36Centgrade:";unsignedchari;if(i==0)//str1=str2 w }

wwwPLCworld defineF(a,b //带参数的宏定义,abvoid{unsignedchari,j,k; //ij+k参;voidmain(void){P3_0=0;//P3.0引脚置低电平,LED点亮P3_1=0;//P3.0引脚置低电平,LED点亮P3_2=0;//P3.0引脚置低电平,LED点亮P3_3=0;//P3.0引脚置低电平,LED点亮P3_4=1;//P3.4引脚置高电平,LED熄灭P3_5=1;//P3.5引脚置高电平,LED熄灭P3_6=1;//P3.7引脚置高电平,LED熄灭P3_7=1;//P3.7引脚置高电平,LED熄灭;}w wwwPLCworld #defineMAX100 voidmain(void){#ifMAX>80 //如果字符串100大于80 //P3口低四位LED点亮 } **中断、定时器********中断、定时器*********中断、定时器*********中断、定时器 voidmain(void){ //T0 //使用定时器T0的模式1 //定时器T0的高8位赋初值w wwwPLCworld { }} sbit voidmain(void){ //定时器T0中断允许 //使用定时器T1的模式1 //定时器T1的高8位赋初值 //定时器T1的高8位赋初值 //启动定时器T1{ //将P3.7引脚输出电平取反 //定时器T0的高8位赋初值 //定时器T0的高8位赋初值}}w wwwPLCworld sbit voidmain(void){ //定时器T0中断允许 //定时器T0的高8位赋初值 //定时器T0的高8位赋初值 //启动定时器T0{ { //按键S按下接地,电平为0} }} sbit voidmain(void){ ww LCo //使用定时器T0的模式2TH0=(65536-46083)/256;//定时器T0的高8位赋初 //T0;}voidTime0(void)interrupt1using0//“interrupt”函数为中断服务函数{ //按位取反操作,将P2.0引脚输出电平取反TH0=(65536-46083)/256T08位重新赋初值} sbit voidmain(void){ //使用定时器T0的模式2TH0=(65536-46083)/256;//定时器T0的高8位赋初值TL0=(65536-46083)%256;//定时器T0的高8位赋初值 //启动定时器T0 //0;}w wwwPLCworldvoidTime0(void)interrupt1using0//“interrupt”函数为中断服务函数{ { }} sbitsbit sbitsbit 定时器T1中断次 定时器T1中断次voidmain(void){ //使用定时器T1的模式1TH1=(65536-46083)/256;//定时器T1的高8位赋初值TL1=(65536-46083)%256;//定时器T1的高8位赋初值 //启动定时器T1 //0 //0;}w voidTime1(voidinterrupt3using0 函数为中断服务{ //Countor1自加1 //Countor2自加 { } { }} sbit voidmain(void){ //定时器T1的高8位赋初值 //定时器T1的高8位赋初值 //启动定时器T1;} voidTime1(void)interrupt3using0//“interrupt” w wwwPLCworld{ } sbitsound=P3^7; //将sound位定义为P3.7unsignedintC; #definel_dao262 #definel_re286 //将“l_re”宏定义为低音“2”的频率286Hz#definel_mi311 //将“l_mi”宏定义为低音“3”的频率311Hz#definel_fa349 //将“l_fa”宏定义为低音“4”的频率349Hz#definel_sao392 //将“l_sao”宏定义为低音“5”的频率392Hz#definel_la440 //将“l_a”宏定义为低音“6”的频率440Hz#definel_xi #definedao523 #definere587 //将“re”宏定义为中音“2”的频率587Hz#definemi659 //将“mi”宏定义为中音“3”的频率659Hz#definefa698 //将“fa”宏定义为中音“4”的频率698Hz#definesao784 //将“sao”宏定义为中音“5”的频率784Hz#definela880 //将“la”宏定义为中音“6”的频率880Hz#definexi987 //将“xi”宏定义为中音“7”的频率523H#defineh_dao1046 #defineh_re1174 //将“h_re”宏定义为高音“2”的频率1174Hz#defineh_mi1318 //将“h_mi”宏定义为高音“3”的频率1318Hz#defineh_fa1396 //将“h_fa”宏定义为高音“4”的频率1396Hz#defineh_sao1567 //将“h_sao”宏定义为高音“5”的频率1567Hz#defineh_la1760 //将“h_la”宏定义为高音“6”的频率1760Hz#defineh_xi1975 //将“h_xi”宏定义为高音“7”的频率1975Hzvoiddelay(){unsignedcharww ;}

wwwPLCworldvoidmain(void){unsignedchar intcode 0xff0xffunsignedcharcodeJP[w wwwPLCworld //T01(13位计数器 {

{ //可证明这是13位计数器TL05 //延时1个节拍单位 }}}voidTime0(void)interrupt1using1{ //P3.7 }w wwworlc sbit voiddelay30ms(void){unsignedcharm,n;;}voidmain(void){unsignedchar {};//} voidmain(void){ w } sbit voidmain(void){ TMOD=00001010B,T02,GATE { //INT0为低电平,T0; while(ui==1)//在INT0高电平期间,等待,计时; }} sbit w unsignedchar Cwo=voiddelay30ms(void){unsignedcharm,n;;}voidmain(void){unsignedchar {}}voidint0(void)interrupt0using0//0的中断编号为0{}w wwwPLCworld sbit voidmain(void){ }voidint0(void)interrupt0using0//0的中断编号为0{ } sbit voidmain(void){ //定时器T0的高8位赋初值 //定时器T0的高8位赋初值 //启动定时器T0w Cwo ;}voidTime0(void)interrupt1using0//"interrupt"函数为中断服务函{ //P1.4} sbit void{ //允许定时器T0中断 //定时器T0赋初值0 //定时器T0赋初值0 //先关闭T0}voidint0(void)interrupt0using0//0的中断编号为0{ //0 w wwwPLCworld } //unsignedcharcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水灯控sbitvoiddelay(void){unsignedchar;}voidSend(unsignedchardat){ ; }voidmain(void){w unsignedchar wwwPLCworld {{ }}} unsignedcharcodeTab[voidSend(unsignedchardat){}voiddelay(void){unsignedcharm,n;;}w {

wwwPLCworldunsignedchar //SCON=01000000B,串口工作方式1 //PCON=00000000B,波特率9600TH1=0xfd;//根据规定给定时器T1赋初值TL1=0xfd;//根据规定给定时器T1赋初值 //启动定时器T1{ { //发送数据i }}} unsignedcharReceive(void){unsignedchar //为了接收下一帧数据,需将RI清0 //将接收缓冲器中的数据存于datreturndat;}voidmain(void){TMOD=0x20;//T1SCON=0x50;//SCON=01010000B1,允许接收w wwwPLCworldPCON=0x00;PCON=00000000BTH1=0xfd;//根据规定给定时器T1赋初值TL1=0xfd;//根据规定给定时器T1赋初值TR1=1;//启动定时器T1 {}} sbitp=PSW^0;unsignedcharcodeTab[voidSend(unsignedchardat){}voiddelay(void){unsignedcharm,n;;}w wwwPLCworldvoidmain(void){unsignedcharTMOD=0x20;//TMOD=00100000BT12SCON=0xc0;//SCON=11000000B,串口工作方式3,PCON=0x00;//PCON=00000000B,波特率9600TH1=0xfd;//根据规定给定时器T1赋初值TL1=0xfd;//根据规定给定时器T1赋初值 //启动定时器T1{ { //发送数据i }}} sbitp=PSW^0;unsignedcharReceive(void){unsignedchar //为了接收下一帧数据,需将RI清0 //将接收缓冲器中的数据存于dat{w

}

wwwPLCworldvoidmain(void){TMOD=0x20;//T1SCON=0xd0;//SCON=11010000B,串口工作方式1,允许接收(REN=1)PCON=0x00;//PCON=00000000B,波特率9600TH1=0xfd;//根据规定给定时器T1赋初值TL1=0xfd;//根据规定给定时器T1赋初值 //启动定时器T1 {}} unsignedcharcodeTab[voidSend(unsignedchardat){}voiddelay(void){unsignedcharww ;}

wwwPLCworldvoidmain(void){unsignedchar //SCON=01000000B,串口工作方式1 //PCON=00000000B,波特率9600TH1=0xfd;//根据规定给定时器T1赋初值TL1=0xfd;//根据规定给定时器T1赋初值 //启动定时器T1{ { //发送数据i }}} unsignedcharReceive(void){unsignedchar //为了接收下一帧数据,需将RI清0 //将接收缓冲器中的数据存于datreturndat;}w wwwPLCworldvoidmain(void){TMOD=0x20;//T1SCON=0x50;//SCON=01010000B,串口工作方式1,允许接收(REN=1)PCON=0x00;//PCON=00000000B,波特率9600TH1=0xfd;//根据规定给定时器T1赋初值TL1=0xfd;//根据规定给定时器T1赋初值TR1=1;//启动定时器T1 {}}*********数码管显示*****数码管显示数码管显示****************数码管显 void{ }w wwwPLCworld voiddelay(void){unsignedchari,j;;}voidmain(void){unsignedcharunsignedcharcode {{ //让P0口输出数字的段码92H }}} w void //延时函w 段时{unsignedchari,j;;}void{ { //P2.0引脚输出低电平,DS0 P2=0xfd //P2.1引脚输出低电平,DS1 //P2.2引脚输出低电平,DS2 //P2.3引脚输出低电平,DS3 }} void {unsignedchari;;}void{ {w Cworld P2=0xfd //P2.1引脚输出低电平,DS1 //P2.2引脚输出低电平,DS2 //P2.3引脚输出低电平,DS3 }} unsignedchari; unsignedint unsignedcharcodevoid{unsignedinti;;}函数功能:4位数的数码显示器显示w ******************************w*wrdc***********************voiddisplay(unsignedint{ P2=0xfd; //P2=11110111B,P2.3DS3接 }void { 1.085微秒=50000微秒=50 { }}w voidTime0(void)interrupt1using{

wwwPLCworld { //随机产生一个从0到32767的整再将其除以10,获得一个随机4位数,模拟检测结果 } } unsignedcharcodeunsignedcharint_time; unsignedcharsecond; void{unsignedchari;;}w voidDisplaySecond(unsignedchark)wwwPLCworld{ //P2.6DS6 //P2.7DS7 }void { 秒//=50000微秒=50 { }}voidinterserve(void)interrupt1using1{ int_time++; //每来一次中断,中断次数int_time自加1 //够20次中断,即1秒钟进行一次检测结果采样{ w second0秒等于60wwwPLCworld} } unsignedcharTab[ unsignedcharport[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharint_time;//中断次数计数变量unsignedcharsecond; unsignedcharminute; unsignedcharhour; void {unsignedcharj;;}voidDisplaySecond(unsignedchars){ //P2.6DS6 //P2.7DS7 w wwwPLCworld}voidDisplayMinute(unsignedcharm){ P2.3DS3 P2.4DS4 //P2.5DS5 }voidDisplayHour(unsignedcharh){ //P2.0DS0 //P2.1DS1 //P2.2DS2 }w wwwPLCworldvoidmain(void){ //允许T0中断 { }}voidinterserve(void)interrupt1using1 //usingTime0{{ }{ //分钟计数变量加1}w if(minute==60)wwwPLCworld{ }{ } } sbitS=P3^2 unsignedcharTab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsignedcharvoiddelay(void){unsignedcharj;;}voidDisplay(unsignedcharx)w wwwPLCworld{ //P2.6引脚输出低电平,DS6 //P2.7引脚输出低电平,DS7 }voidmain(void){ }voidint0(void)interrupt0using0//0的中断编号为0{} w {

wwwPLCworld //将数字5的段码送P0口 //将数字9的段码送P1口 ;} **键盘控制*********键盘控制***************键盘控制 *****键盘控制 sbitS1=P1^4; //将S1位定义为P1.4引脚sbitLED0=P3^0; //将LED0位定义为P3.0引脚voidmain(void) { //P3.0{ //P3.0}} w wwwPLCworldsbit sbit voiddelay(void){unsignedchari,j;;}voidmain(void) { //P3.0{ {delay();//延时一段时间再次检测 //按键S1的确被按下 //P3.0}}}#include<reg51.h>//51sbitS1=P1^4; sbitS2=P1^5; sbitS3=P1^6; sbitS4=P1^7; unsignedcharkeyval;//按键值voidled_delay(void)w }

unsignedchari,j;;

wwwPLCworldvoiddelay30ms(void){unsignedchari,j;;}voidforward(void){ }ww ******************************w*Cwrdvoidbackward(void){ }voidstop(void){}voidflash(void){}voidkey_scan(void){ ww wwwPLCworldcn //按键S1被按下 }}voidmain(void) { {{casecase3:stop();case4:flash();}}} sbitS1=P1^4; //将S1位定义为P1.4引脚ww sbitS2=P1^5; LCwsbitS3=P1^6; //将S3位定义为P1.6引脚sbit unsignedcharkeyval;//按键voidled_delay(void){unsignedchari,j;;}voiddelay20ms(void){unsignedchari,j;;}voidforward(void){ w }voidbackward(void){ }voidstop(void){ }voidflash(void){ w wwwPLCworld}voidmain(void) { //使用定时器T0的模式1 {{casecase3:stop();case4:flash();}}}voidTime0_serve(void)interrupt1using1{ { //按键S1被按下w

}} unsignedchar sbit //S1sbit sbit sbit voiddelay20ms(void) {unsignedchari,j;;}voiddelay(unsignedcharx){unsignedchark;}ww ******************************w*Cwrdcvoidmain(void){ //使用定时器T0的模式2 { }}voidintersev(void)interrupt1using1{ { { w //如果是按键S3按下 //如果是按键S4按下 }} } unsignedchar sbit //S1voiddelay(void) {unsignedchari,j;;}voidmain(void){ //使用定时器T0的模式2 w{

wwwPLCworld{case0:case1:P3=0xfd;case2:P3=0xfb;case3:P3=0xf7;}}}voidintersev(void)interrupt1using1{ { //延时20ms,软件消抖 //如果是按键S1按} } unsignedcharcodeTab[w wwwPLCworldunsignedcharint_time;//中断次数计数变量unsignedcharsecond; unsignedcharminute; unsignedcharhour; sbit sbit sbit sbit voiddelay(void){unsignedcharj;;}voiddelay60ms(void){unsignedchari,j;;}voidDisplaySecond(unsignedchars){ //P2.6DS6 //P2.7DS7 w //关闭所有数wwwPLCworld}voidDisplayMinute(unsignedcharm){ P2.3DS3 P2.4DS4 //P2.5DS5 }voidDisplayHour(unsignedcharh){ //P2.0DS0 //P2.1DS1 //P2.2DS2 }w {

wwwPLCworld //P14 { { { }}}}void{ //允许T0中断 //启动定时器T0 {w ol; }}voidinterserve(void)interrupt1using1 //usingTime0{ //中断次数加1 { } { } { //小时计数变量加1} { } //定时器T0高四位赋值 //定时器T0低四位赋 }w sbit sbit sbit unsignedchar unsignedchar 函数功能:软件消抖延时(voiddelay(void){unsignedchari,j;;}voidunsignedinti;;}voidforward(){ }voidbackward()w

wwwPLCworld}voidstop(void){P0=0xff }void { {case case //S2case }}}w *******************wwPolc*********voidTime0_serve(void)interrupt1using1{ { { }} //定时器T0的高8位赋初值 //启动定时器T0}#include<reg51.h>//51sbitP14=P1^4; sbitP15=P1^5; sbitP16=P1^6; sbit //将P17位定义为P1.7引unsignedcharcodeTab[unsignedchar voidled_delay(void){unsignedcharj;w }

wwwPLCworldvoiddisplay(unsignedchark){ }voiddelay20ms(void){unsignedchari,j;;}voidmain(void){ //使用定时器T0的模式1TH0=(65536-500)/256;//定时器T0的高8位赋初值TL0=(65536-500)%256;//定时器T0的高8位赋初值 //启动定时器T0 { }}w 0的中断服务子wwPLCworldnvoidtime0_interserve(void)interrupt1using1 //定时T0的中断编1,{ {

//第一行置为低电平“0”(P1.0

w

w/w/wPLCworldn到接P1.5引脚的列线为低电

} } sbit voiddelay_sound(void){unsignedchari;;}voiddelay20ms(void)w }

unsignedchari,j;;

wwwPLCworldvoidmain(void){ //使用定时器T0的模式1TH0=(65536-500)/256;//定时器T0的高8位赋初值TL0=(65536-500)%256;//定时器T0的高8位赋初值 //启动定时器T0 ;}voidtime0_interserve(void)interrupt1using1 {unsignedchar { //P3.7{}} w 08位赋初 } sbitP14=P1^4; sbitP15=P1^5; sbitP16=P1^6; sbitP17=P1^7; unsignedcharkeyval;//定义变量按键值sbit unsignedint unsignedint #definel_dao #definel_re286 //将“l_re”宏定义为低音“2”的频率286Hz#definel_mi311 //将“l_mi”宏定义为低音“3”的频率311Hz#definel_fa349 //将“l_fa”宏定义为低音“4”的频率349Hz#definel_sao392 #definel_la440 //将“l_a”宏定义为低音“6”的频率440Hz#definel_xi494 //将“l_xi”宏定义为低音“7”的频率494Hz#definedao523 #definere587 //将“re”宏定义为中音“2”的频率587Hz#definemi659 //将“mi”宏定义为中音“3”的频率659Hz#definefa698 //将“fa”宏定义为中音“4”的频率698Hz#definesao784 //将“sao”宏定义为中音“5”的频率784Hz#definela880 //将“la”宏定义为中音“6”的频率880Hz#definexi987 //将“xi”宏定义为中音“7”的频率53#defineh_dao1046 #defineh_re1174 //将“h_re”宏定义为高音“2”的频率1174Hz#defineh_mi1318 //将“h_mi”宏定义为高音“3”的频率1318Hz#defineh_fa1396 //将“h_fa”宏定义为高音“4”的频率1396Hz#defineh_sao1567 //将“h_sao”宏定义为高音“5”的频率1567Hzw #defineh_la //将“h_la”wwwPLCworldcn高音“6”的频率#defineh_xi voiddelay20ms(void){unsignedchari,j;;}voiddelay(){unsignedchari,j;;}voidOutput_Sound(void){ //可证明这是13位计数器TH0高8位的赋初值方法 //可证明这是13位计数器TL0低5位的赋初值方法 //开定时T0 }voidmain(void){w //开总中断wwwPLCworld //定时器T1启动,开始键盘扫描 //分别使用定时器T1的模式1,T0的模式0 //定时器T1的高8位赋初值 //定时器T1的高8位赋初值 {{

case case w

case case case case case case OwtPtor case case

case case case }

case case case }}voidTime0_serve(void)interrupt1using{ww //wwwPLCworldcn13位计数TH08位的赋初值 //可证明这是13位计数器TL0低5法 //P3.7}voidtime1_serve(void)interrupt3using2 第2组寄存器{ { {w

//如果检测到接P1.4 检测到接P1.6引脚的列 断是S7键被按下 测到接P1.7引脚的列 断是S8键被按下 (P1.2if(P14==0) 接P1.4引脚的列线 是S9键被按下 测到接P1.5引脚的列线 是S10键被按下 到接P1.6引脚的列线 S11键被按下 到接P1.7引脚的列线 S12键被按下

//如果检测到接P1.4引脚的列线为低} }w wwwPLCworld sbitP14=P1^4; //将P14位定义为P1.4引脚sbitP15=P1^5; //将P15位定义为P1.5引脚sbitP16=P1^6; //将P16位定义为P1.6引脚sbitP17=P1^7; //将P17位定义为P1.7引脚sbitsound=P3^7; //将sound位定义为P3.7unsignedcharkeyval; voiddelay(void){unsignedchari;;}voiddelay20ms(void){unsignedchari,j;;}voidmain(void){unsignedcharD[]={0,8,0,8,7,4,11}; //设定 //使用定时器T0的模式1TH0=(65536-500)/256;//T08位赋初值TL0=(65536-500)%256;//T08w //第一位输入不正确,等; //第二位输入不正确,等; //第三位输入不正确,等; //第四位输入不正确,等; //第五位输入不正确,等; //第六位输入不正确,等; ; }voidtime0_interserve(void)interrupt1using1 //定时T0的中断编1,{unsignedchar{//第一行置为低电平“0”(P1.0wwLC

//如果检测到接P1.4引脚的列线为低w }}

wwwPLCworld }******************液晶显示LCD*********液晶显示*****LCD******************** sbitRS=P2^0; sbitRW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbitE=P2^2; //使能信号位,将E位定义为P2.2引脚sbitBF=P0^7; voiddelay1ms(){unsignedcharw ;}

wwwPLCworldvoiddelay(unsignedcharn){unsignedchari;}unsignedcharBusyTest(void){bit //根据规定,RS为低电平,RW //将忙碌标志电平赋给result}voidWriteInstruction(unsignedchardictate){);// //E01w

wwwPLCworld //E //E由高电平跳变成低电平时,液晶模块开始}voidWriteAddress(unsignedcharx){}voidWriteData(unsignedchary){ //RS为高电平,RW //E01发生正跳变,所以应先置 //E置高电平w //wwwLCworldcn }voidLcdInitiate(void){ //显示模式设置:16×2显示,5×7点阵,8位数据 }void { //调用LCD初始化函数 } sbitRS=P2^0; sbitRW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbitE=P2^2; //使能信号位,将E位定义为P2.2引脚sbitBF=P0^7; w ]={"Welcow voiddelay1ms(){unsignedchari,j;;}voiddelay(unsignedcharn){unsignedchari;}unsignedcharBusyTest(void){bit //根据规定,RS为低电平,RW //将忙碌标志电平赋给result}w {);// //E01

//E //E由高电平跳变成低电平时,液晶模块开始}voidWriteAddress(unsignedcharx){}voidWriteData(unsignedchary){ //RS为高电平,RW //E01发生正跳变,所以应先置w orldcn //E置高电平 }voidLcdInitiate(void){ //显示模式设置:16×2显示,5×7点阵,8位数据 }void {unsignedchar { //设置显示位置为第一行的第5个字i=while(string[i]!=w }}} sbit sbitRW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbitE=P2^2; //使能信号位,将E位定义为P2.2引脚sbitBF=P0^7; unsignedcharcodedigit[]={" "};//定义字符数组显示数字unsignedcharcodestringTestResult定义字符数组显示提示信息voiddelay1ms(){unsignedchari,j;;}voiddelay(unsignedcharn){ww unsignedchari;

wwwPLCworld}unsignedcharBusyTest(void){bit //根据规定,RS为低电平,RW //将忙碌标志电平赋给result //E}voidWriteInstruction(unsignedchardictate){);// //E01 //Ew

wwwPLCworld //E由高电平跳变成低电平时,液晶模块开始}voidWriteAddress(unsignedcharx){}voidWriteData(unsignedchary){ //RS为高电平,RW //E01发生正跳变,所以应先置 //E置高电平 }voidLcdInitiate(void){ w //显示wwwPLCworldcn16×2显示,5×7点阵,8位数 ,给硬件一点反应时 }voidmain(void){unsignedchar unsignedint unsignedcharD1,D2,D3,D4,D5; //从第1行第3列开始显示i while(string[i]!={ } { //从第2行第6列开始显示 w 的字符常量写入 //将小数点的字符常量写入LCD //延时1s(每1s一次数据) //延时250ms}} sbitRS=P2^0; sbitRW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbitE=P2^2; //使能信号位,将E位定义为P2.2引脚sbitBF=P0^7; unsignedcharcodedigit unsignedcharcodestring[]={"BeiJingTime"};//定义字符数组显示提示信息unsignedcharcount; unsignedchar voiddelay1ms(){unsignedchari,j;;}voiddelay(unsignedcharn){unsignedchari;w wwwPLCworld}unsignedcharBusyTest(void){bit //根据规定,RS为低电平,RW //将忙碌标志电平赋给result //E}voidWriteInstruction(unsignedchardictate){);// //E01发生正跳变,所以应先置 //E w //wwEwPLCworldcn平跳变成低电平时,液晶模块}voidWriteAddress(unsignedcharx){}voidWriteData(unsignedchary){ //RS为高电平,RW //E01发生正跳变,所以应先置 //E置高电平 }voidLcdInitiate(void){ //显示模式设置:16×2显示,5×7点阵,8位数据 ,给硬件一点反应时ww

wwwPLCworld }void{unsignedchar //写显示地址,将十位数字显示在第2行第5列 //将十位数字的字符常量写入LCD //将个位数字的字符常量写入LCD}void{unsignedchar //写显示地址,将十位数字显示在第2行第8列 //将十位数字的字符常量写入LCD //将个位数字的字符常量写入LCD}w wwwPLCworldvoid{unsignedchar //写显示地址,将十位数字显示在第2行第11列 //将十位数字的字符常量写入LCD //将个位数字的字符常量写入LCD}*mainvoid{unsignedchar //使用定时器T0的模式1 //定时器T0的高8位设置初值 //定时器T0的低8位设置初值 {w //ww } //写地址,将第二个分号显示在第2行第7列 //将分号的字符常量写入LCD //将分号的字符常量写入LCD { }}{ //如果中断次数计满20次{ } { } { } { }w

wwwPLCworld 红外#include #include #defineOP_READ //器件地址以及操作,0xa1即为10100001B#defineOP_WRITE0xa0 //器件地址以及写入操作,0xa1即为10100000BsbitSDA=P3^4; //将串行数据总线SDA位定义在为P3.4引脚sbit voiddelay1ms(){unsignedchari,j;;}voiddelaynms(unsignedcharn){w

unsignedchari;wwwPLCworldvoidstart()//{SDA //SDASCL SDA //SDA SCL=0; //SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传}voidstop()//{SDA //SDA初始化为低电平“0”SCL SDA //SDA }w ******************************w*wrdc************/unsignedchar//AT24Cxx{unsignedcharunsignedchar for(i=0;i<8;{SCL //SCL //xx|=(unsigned 中SCL } }参数:y(待写入的数据)bitWriteCurrent(unsignedchary){unsignedcharbit for(i0i8 //8{SDA= 数据送到 后 SCL SCL=0; y //y}SDA=1; 发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线, w SCL= //根据上述规定 高电 ack_bitSDA;接受设备(AT24Cxx)SDA送低电平,表示已经接收到一个SCL=0; //AT24Cxx}参数:add(指定的地址);dat(待写入的数据voidWriteSet(unsignedcharadd,unsignedchardat)//addr{ //11ms,1ms}出口参数:x(读出的数据)unsignedcharReadCurrent(){unsignedchar 据 }w wwwPLCworldunsignedcharReadSet(unsignedcharset_addr)//在指定地址{ }{SDA=1; SCL=1; //从指定地址“0x36中数据并送P1口显示} sbitRS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚sbitRW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbitE=P2^2; //使能信号位,将E位定义为P2.2引脚sbitBF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚sbitS=P1^4; //将S位定义为P1.4引脚#defineOP_READ //器件地址以及操作,0xa1即为10100001B#defineOP_WRITE0xa0//器件地址以及写入操作,0xa110100000BsbitSDA=P3^4; sbitSCL=P3^3; //将串行时钟总线SDA位定义在为P3.3引脚unsignedcharcodedigit[]={" "};//定义字符数组显示数字w (3j+2)*i=(3×33+2)×10=1010(微秒 是1毫voiddelay1ms(){unsignedchari,j;;}voiddelaynms(unsignedcharn){unsignedchari;}unsignedcharBusyTest(void){bit //根据规定,RS为低电平,RW //将忙碌标志电平赋给result //E}w wwwPLCworldvoidWriteInstruction(unsignedchardictate){ //E01 //E //E由高电平跳变成低电平时,液晶模块开始}voidWriteAddress(unsignedcharx){}voidWriteData(unsignedchary){ //RS为高电平,RW w // 1发生正跳变,所以应先置 //E置高电平 }voidLcdInitiate(void){ //显示模式设置:16×2显示,5×7点阵,8 ,给硬件一点反应时 }voidDisplay(unsignedcharx){unsignedchar //写显示地址,将十位数字显示在第2行第5列w //将十ww }voidstart()//{SDA //SDASCL SDA //SDA SCL=0; //SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传}voidstop()//{SDA //SDA SCL SDA //SDA}ww

wwwPLCworldunsignedcharReadData()//AT24Cxx{unsignedcharunsignedchar for(i=0;i<8;{SCL //SCL //xx|=(unsigned 中SCL } }参数:y(待写入的数据)bitWriteCurrent(unsignedchary){unsignedcharbit for(i0i8 //8{SDA= 数据送到 后 SCL SCL=0; y //y}SDA=1; 发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线,w //等待一个wwwPLCworld SCL //根据上述规定,SCL ack_bitSDA;接受设备(AT24Cxx)SDA送低电平,表示已经接收到一个SCL=0; //AT24Cxx}参数:add(指定的地址);dat(待写入的数据voidWriteSet(unsignedcharadd,unsignedchardat)//addr{ //11ms,1ms}出口参数:x(读出的数据)unsignedcharReadCurrent(){unsignedchar 据 }w 函数功能:从AT24Cxx中的指定地wwwPLCworldunsignedcharReadSet(unsignedcharset_add)//在指定地址{ }*void{unsignedchar unsignedchar //调用LCD初始化函数 { { //确实该键被按下 } //从AT24C02中读出计件值 }}w #include #include #defineOP_READ10xa1 //器件1地址以及操作,0xa1即为1010#defineOP_WRITE10xa0//器件1地址以及写入操作,0xa1即为10100000B#defineOP_READ20xaf//器件2地址以及操作,0xa1即为10101111B#defineOP_WRITE20xae//器件2地址以及写入操作,0xa1即为10101110BsbitSDA=P3^4; //将串行数据总线SDA位定义在为P3.4引脚sbit voiddelay1ms(){unsignedchari,j;;}voiddelaynms(unsignedcharn){unsignedchari;}voidstart()//{SDA //SDASCL SDA //SDA w //等待一个机器wwwPLCworld SCL=0; //SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传 }voidstop()//{SDA //SDA SCL SDA //SDA}unsignedcharReadData()//AT24Cxx{unsignedcharunsignedchar //从AT24Cxx中读出

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论