学习C51过程中常见的错误

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

学习C51过程中常见的错误——C语言编程--记录1-15.关键词main-----错写mian警告提示:Buildtarget'Target1'assemblingSTARTUP.A51...compilingK1-K4控制数码管加减演示.c...linking...***WARNINGL16:UNCALLEDSEGMENT,IGNOREDFOROVERLAYPROCESSSEGMENT:?PR?MIAN?K1_K4_控_剖详细齙牍_加减演示***WARNINGL1:UNRESOLVEDEXTERNALSYMBOLSYMBOL:MAINMODULE:D:\PROGRAMFILES(X86)\C51\LIB\C51S.LIB(?C_INIT)***WARNINGL2:REFERENCEMADETOUNRESOLVEDEXTERNALSYMBOL:MAINMODULE:D:\PROGRAMFILES(X86)\C51\LIB\C51S.LIB(?C_INIT)ADDRESS:0010HProgramSize:data=14.0xdata=0code=347creatinghexfilefromK1-K4控制数码管加减演示...K1-K4控制数码管加减演示-0Error(s),3Warning(s).1-14.全局变量和局部变量,以及变量赋值位置---在循环体中差异#includereg52.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintucharkey_count;//循环子程序,累计变量赋值为0,应设为全局变量。sbitk1=P1^0;sbitk2=P1^1;sbitk3=P1^2;ucharcodetable_duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};ucharduan[]={0,10,10,10,10,10,10,10};//控制数码管显示数值voiddelay(uinti){uchara;while(i--)for(a=0;a120;a++);}voidinit(){P0=0xff;P2=0x00;P1=0xff;}voidshow_steady(){ucharb,wei=0x80;for(b=0;b8;b++){P0=0xff;//速度快时留影wei=_crol_(wei,1);P0=~table_duan[duan[b]];P2=wei;delay(2);}}voidkey_select(){uchari,key_count=0;if(k1==0){++key_count;if(key_count8)key_count=0;duan[key_count]=key_count;}if(k2==0){//key_count--;if(key_count1)key_count=0;duan[key_count]=10;key_count--;}if(k3==0){duan[0]=0;for(i=0;i8;i++)duan[i]=10;key_count=0;}}voidmain(){init();key_count=0;while(1){show_steady();P1=0xff;key_select();while(P1!=0xff)show_steady();}}1-16voidkey_scan无返回值ucharkey_scan有返回值return(i)错误提示:X1.C(28):errorC174:return-expressiononvoid-functionucharKeys_Scan()//有返回值的函数,不可用void{ucharsCode,kCode,i,k;//低4位置0,放入4行P1=0xf0;//若高4位出现0,则有键按下if((P1&0xf0)!=0xf0){DelayMS(2);if((P1&0xf0)!=0xf0){sCode=0xfe;//行扫描码初值for(k=0;k4;k++)//对4行分别进行扫描{P1=sCode;if((P1&0xf0)!=0xf0){kCode=~P1;for(i=0;i16;i++)//查表得到按键序号并返回if(kCode==KeyCodeTable[i])return(i);}elsesCode=_crol_(sCode,1);}}}return(-1);}1-20m=0x80;//共阳极,应该只有一个高电平扫描,m=0xfe是共阴极/*名称:数码管显示拨码开关编码说明:系统显示拨码开关所设置的编码000~255*///74LS245同相三态双向总线收发器#includereg51.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedint//各数字的数码管段码(共阴)ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示缓冲ucharDSY_Buffer[3]={0,0,0};//延时voidDelayMS(uintms){uchart;while(ms--)for(t=0;t120;t++);}//主程序voidmain(){uchari,m,Num;P0=0xff;P2=0xff;while(1){m=0x80;//共阳极,应该只有一个高电平扫描,m=0xfe是共阴极Num=P1;//读取拨码开关的值DSY_Buffer[0]=Num/100;DSY_Buffer[1]=Num/10%10;DSY_Buffer[2]=Num%10;for(i=0;i3;i++)//刷新显示在所有数码管上{m=_crol_(m,1);P2=m;P0=DSY_CODE[DSY_Buffer[i]];DelayMS(10);}}}1-24P0口作为输出口使用时,由于输出电路是漏极开路电路,必须外接上拉电阻才能有高电平输出。1-25while(1);//死循环,程序一直在执行,没有while(1),程序就结束了#includereg52.h#defineuintunsignedint#defineucharunsignedcharsbitLED1=P0^0;voidinit(){LED1=1;EA=1;EX0=1;IT0=1;//跳沿触发,引脚INT0电平由高到低负跳变有效}voidenter0()interrupt0using0{LED1=~LED1;}voidmain(){init();while(1);//死循环,程序一直在执行,没有while(1),程序就结束了}1-26中断优先级P1=0x00;//快速扫描时,留影,不然会产生丢失PX0=1;//外部中断0优先外部中断0voidenter0()interrupt0using0T0中断溢出voidenter0()interrupt1using0外部中断1voidenter0()interrupt2using0T1中断溢出voidenter0()interrupt3using0串行口中断voidenter0()interrupt4using0for(i=0;i6;i++){P1=0x00;//快速扫描时,留影,不然会产生丢失m=_cror_(m,1);P1=DSY_code[DSY_Buffer[i]];P2=m;delay(5);}1-27return计时器方式3(TMOD=0x02),定时时间算法1-32switch(k1_count){case1:EA=1;ET0=1;TR0=1;break;case2:EA=0;ET0=0;TR0=0;break;//中断停止,定时器停止case0:Count_A=0;P0=0x3f;P2=0x3f;}

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功