求单片机大神
这个单片机程序老是无法编译,求大神帮助!特别if(s3==0)老提示有错,小弟先谢过了! 编程语言 #include #define gled P0 void bianhuan3(); void delay10ms(); sbit k1=P2^2; sbit k2=P2^3; sbit k3=P2^4; sbit s1=P3^1; sbit s2=P3^0; sbit s3=P3^2; sbit s4=P3^3; unsigned int a,j; unsigned char code shuzu[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07...全部
这个单片机程序老是无法编译,求大神帮助!特别if(s3==0)老提示有错,小弟先谢过了! 编程语言 #include #define gled P0 void bianhuan3(); void delay10ms(); sbit k1=P2^2; sbit k2=P2^3; sbit k3=P2^4; sbit s1=P3^1; sbit s2=P3^0; sbit s3=P3^2; sbit s4=P3^3; unsigned int a,j; unsigned char code shuzu[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char suzu; void main() { k1=k2=k3=0; a=0; while(1) { bianhuan3(); switch(j) { case(0): suzu=shuzu[0];a=0;break; case(1): suzu=shuzu[9];a=9;break; case(2): a--;suzu=shuzu[a];break; case(3): a ;suzu=shuzu[a];break; } ? gled=suzu; }} void bianhuan3() {unsigned int i; if(s3==0) { delay10ms(); ?if(s3==0) ?{ ?j=3;} while((i0;c--) ? ? ? ?for(b=38;b>0;b--) ? ? ? ? ? ?for(a=130;a>0;a--); 有2处错误:1。
c语言区分大小写的,你的函数声明void delay10ms();中delay10ms是小写,而函数定义却是void Delay10ms() ,Delay10ms第一个字母变大写了。而你在if(s3==0) { ? ? delay10ms();调用又用了第一个字母小写的delay10ms(); 其它地方用的是大写的Delay10ms。
2。你的函数void bianhuan3()在第一个if(s1==0)前多了一个大反括号 } ,而最后的Delay10ms()又少了大反括号 } 。 ? ? 以后源代码最好发文件上来,贴出来的代码复制后格式完全丧失,所有文件变成一行代码。
我这里上传整理后的文件给你,文件是test。C。TEST。C大小:1。31K 已经过百度安全检测,放心下载点击下载下载量:1 追问:为什么我的这个程序不能达到使用k3k4分别控制数字加一减一的操作呢,我用是52单片机开发板,shuzu这个数组是0123456789的显示码 哦,是s1s2s3s4这几个按键 就是用s3s4控制数字加一减一操作 追答:我没有你的开发板,无法上机实验,所以找原因要靠你自己了。
如果你的s1 s2按键能正常工作,那说明程序是基本正常运行的。但你命名了两个同名的变量a,一个是全局的unsigned int a,另外一个是在延时程序Delay10ms()里的unsigned char a,是否有可能被C编译器优化掉了? ? ? ? 其实这样的命名习惯不好,虽然现在你只是做实验。
但最好不要养成这样的习惯,否则你真正做项目时,变量很多,到时你自己都记不过来。 追问:大师,我的这个程序case(2):case(3):想实现数码管数字加一减一的程序有错的,可以请您再看看吗,我有我的单片机图纸,要的话给你发。
s3s4正常 追答:问题不是出在case(2):case(3)中,你在void bianhuan3()函数里,j的取值有问题。s3==0时,j=3;而s4 == 0时,j=4。但你在switch(j)的语句里,只有case(0)~case(3),很显然,j=4时,在switch(j)里没有任何执行。
我想你的原意,本应是s3==0时,j=2;s4 == 0时,j=3才对,不过因为你的编程习惯加上没有仔细检查程序造成了上述现象。 ? ? ? ?另外,你在switch(j)执行完后,没有清除j的值,造成switch(j)在程序主循环里反复执行,比如在j=3时,a不停地 ,suzu也不停的被赋值,gled也不停被更新。
因为程序执行很快,人眼根本无法看到数码管的变化。这显然也不是你程序的本意。 ? ? ? 我在你程序基础上作了些修改,上传附件给你,请你看看是否能得到想要的效果。TEST1。C大小:1。35K 已经过百度安全检测,放心下载点击下载下载量:1 追问:您改的程序我试了可以运行,可是当执行break回到大循环,是要先执行bianhuan3()对j重新赋值阿,为什么还要把j清0才能运行呢! 总算算想通了,这是一个逻辑错误,当按下s3又没其他键按下时将陷入循环 你真的是高手,可以交个朋友不! 追答:关键在于你的bianhuan3()在没有任何按键按下时,不对 j 进行任何操作(赋值),这样导致j的值会长期保持,于是主循环就反复不停的执行j最后被bianhuan3()赋值时代表的那个功能,在这里,不受控的重复执行显然不是你的本意。
追问:想问下大神语言基础不好该怎么学起,有没有网校之内的,感觉看书太书本化了,自己做实验又老是爱错,关键是没人指导,上网不知怎么样,大神方便留个电话不! 我写了一个单片机的程序,但有一段总是报错,求大神指点一下,看是哪里出了问题 编程语言嵌入式嵌入式硬件开发 你看你贴的这个图片,刚好把关键地方掐掉了,这也不是限制片。
需要帮忙就把程序贴上来,帮你看看。 追答:这是你227行有隐藏中文字符,你把227行全部删掉,把213行复制过来。收起