man1234567 发表于 2021-3-11 17:26 哇,我太傻了,谢谢大佬,解决了,我注意力一直在延时程序上,没看到这两个定义后面也加了分号,但是我如果把延时去掉,带不带分号都可以运行,而且在板子上运行也是没问题的,这是什么原理? |
|
#define uint unsigned int; #define uchar unsigned char; 这两句的最后都不可以有分号,去掉后编译正常,其他都是忽悠 ![]() |
lovezjf234 发表于 2021-3-11 16:54 不行改了还是出错,我给你上图片 |
| void delayms(uint); 里面少了一个x |
| 哪行,提示的错误内容是什么,提问要有针对性,你这个太难让人回答了 |
村标露娜 发表于 2021-3-11 16:08 #include<reg52.h> #define uint unsigned int; #define uchar unsigned char; sbit led1=P1^0; sbit wei=P2^7; sbit duan=P2^6; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uint num,n; void delayms(uint); void openZD(); void main() { openZD();//开定时器1中断 while(1) { wei=1; P0=0xfe; wei=0; P0=0x00; duan=1; P0=table[n/10];//让第一个数码管显示十位 duan=0; P0=0xff; delayms(1); wei=1; P0=0xfd; wei=0; P0=0x00; duan=1; P0=table[n%10];//让第二个数码管显示个位 duan=0; P0=0xff; delayms(1); } } void T1_time() interrupt 3//定时器1中断 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; num++; if(num==20) { num=0; n++; if(n==59) n=0; } } void openZD()//打开中断子程序 { TMOD=0x10; EA=1; ET1=1; TH1=(65536-50000)/256; TL1=(65536-50000)%256; TR1=1; } void delayms(uint x) { uint i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } |
|
本帖最后由 小周单片机 于 2021-3-11 17:13 编辑 改了一下,这个程序的具体功能是让单片机数码管做59s循环计时 |
|
#include<reg52.h> #define uint unsigned int; #define uchar unsigned char; sbit led1=P1^0; sbit wei=P2^7; sbit duan=P2^6; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uint num,n; void delayms(uint); void openZD(); void main() { openZD();//开定时器1中断 while(1) { wei=1; P0=0xfe; wei=0; P0=0x00; duan=1; P0=table[n/10];//让第一个数码管显示十位 duan=0; P0=0xff; delayms(1); wei=1; P0=0xfd; wei=0; P0=0x00; duan=1; P0=table[n%10];//让第二个数码管显示个位 duan=0; P0=0xff; delayms(1); } } void T1_time() interrupt 3//定时器1中断 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; num++; if(num==20) { num=0; n++; if(n==59) n=0; } } void openZD()//打开中断子程序 { TMOD=0x10; EA=1; ET1=1; TH1=(65536-50000)/256; TL1=(65536-50000)%256; TR1=1; } void delayms(uint x) { uint i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } 这是简化后的程序,我把led闪烁删除了,改成了定时器1中断,加了注释,加了中断子程序,但还是提示语法错误。 |
村标露娜 发表于 2021-3-11 16:08 好的,大佬,我等会改下再上传,但是延时函数最后还是会出错,说我语法错误,但是我也看不出来哪里出错了。 |