编译时在290行处显示(290): error C141: syntax error near 'void',求帮忙改正
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define datasend P0
- sbit lcden=P1^2; //LCD 使能端
- sbit lcdrs=P1^0; //LCD 数据/指令(H/L)选择端
- sbit lcdrw=P1^1;
- uchar mytable0[ ]=" Welcometo ";
- uchar mytable1[ ]=" Yangzhou Univ.";
- uchar code line0[ ]=" 2021-6-24 "; //初始化显示
- uchar code line1[ ]=" 00:00:00 ";
- uchar code month0[ ]={31,28,31,30,31,30,31,31,30,31,30,31}; //平年月
- uchar code month1[ ]={31,29,31,30,31,30,31,31,30,31,30,31}; //闰年月
- uchar count,hour,minute,second,year=1,month=1,date=1;
- uchar slnum; //slnum :定义功能键按下次数变量
- void delay (unsigned int z)//延时子函数 z*lms
- {
- unsigned int x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void write_(unsigned char c) //写命令子函数
- {
- lcdrs=0; //低电平选择为写指令
- lcden=0;
- datasend=c; //把指令写入P0 口
- delay(5);
- lcden=1; //开使能
- delay(5); //读取指令
- lcden=0; //关闭使能
- }
- void write_data(unsigned char d) //写数据子函数
- {
- lcdrs=1;//高电平选择为写数据
- datasend=d;//把数据写入P0 口
- delay(5);
- lcden=1;//开使能
- delay(5);//读取数据
- lcden=0;//关闭使能
- }
- void write_hms(uchar add,uchar dat) //时分秒写函数 add :输入位置设置变量 dat :输入时分秒数据
- {
- uchar sw,gw;//定义十位,个位变量
- sw=dat/10;
- gw=dat%10;
- write_(0x80+0x40+add);//从第一行(add)位开始写数据
- write_data(0x30+sw);//写入十位
- write_data(0x30+gw);//写入个位
- }
- void write_ymd(uchar add,uchar dat)//年月日写函数 add :输入位置设置变量 dat :输入时分秒数据
- {
- uchar sw,gw;
- sw=dat/10;
- gw=dat%10;
- write_(0x80+add);//从第一行(add)位开始写数据
- write_data(0x30+sw);//写入十位
- write_data(0x30+gw);//写入个位
- }
- void t0() interrupt 1//定时器0中断子程序
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- count++;
- }
- void gethms()//时分秒处理子程序
- {
- second++;
- if(second==60)
- {
- second=0;
- minute++;
- if(minute==60)
- {
- minute=0;
- hour++;
- if(hour==24)
- {
- hour=0;
- date++;
- }
- write_hms(2,hour);//时输出显示
- }
- write_hms(5,minute);//分输出显示
- }
- write_hms(8,second);//秒输出显示
- }
- void getymd( )//年月日处理子程序
- {
- if(year%4==0)
- {
- if(date==month1[month-1]+1)
- {
- date=1;
- month++;
- if(month==13)
- {
- month=1;
- year++;
- if(year==100)
- {
- year=1;
- }
- write_ymd(4,year);
- }
- write_ymd(7,month);
- }
- write_ymd(10,date);
- }
- else
- {
- if(date==month0[month-1]+1)
- {
- date=1;
- month++;
- if(month==13)
- {
- month=1;
- year++;
- if(year==100)
- {
- year=1;
- }
- write_ymd(4,year);
- }
- write_ymd(7,month);
- }
- write_ymd(10,date);
- }
- }
- void key_process()//按键扫描子程序
- {
- if(P2==0xf6)//功能键
- delay(25);
- if(P2==0xf6)//功能键按下
- {
- while(P2==0xf6);//松手检测
- slnum++;//功能键按下计数
- TR0=0;//T0定时停止,进入时间调整
- switch(slnum)
- {
- case 1: write_(0x80+0x40+0x09);break;//光标闪烁位定为秒个位
- case 2: write_(0x80+0x40+0x06);break;//光标闪烁位定为分个位
- case 3: write_(0x80+0x40+0x03);break;//光标闪烁位定为时个位
- case 4: write_(0x80+0x0b);//光标闪烁位定为日个位
- case 5: write_(0x80+0x08);//光标闪烁位定为月个位
- case 6: write_(0x80+0x05);//光标闪烁位定为年个位
- }
- write_(0x0f);//光标闪烁
- if(slnum==7)
- {
- slnum=0;//按键计数复位
- write_(0x0c);//光标停止闪烁
- TR0=1;//重新启动定时器
- }
- }
- if(P2==0xee)//时分秒+1模块
- {
- delay(25);
- if(P2==0xee)
- {
- while(P2==0xee);
- switch(slnum)
- {
- case 1: second++;//秒+
- if(second==60) second=0;//复位
- write_hms(8,second); //秒输出显示
- write_(0x80+0x40+0x09);//光标闪烁位定为秒个位
- break;
- case 2: minute++;
- if(minute==60) minute=0;//复位
- write_hms(5,minute); //分输出显示
- write_(0x80+0x40+0x06);//光标闪烁位定为分个位
- break;
- case 3: hour++;
- if(hour==24) hour=0; //复位
- write_hms(2,hour); //时输出显示
- write_(0x80+0x40+0x03);//光标闪烁位定为时个位
- break;
- case 4: date++;//日+
- if(year%4==0)//平闰年判断
- break;
- {
- if(date==month1[month-1]+1)
- {
- date=1;
- }
- else
- {
- if(date==month0[month-1]+1)
- {
- date=1;
- }
- }
- }
- write_ymd(10,date); //日输出显示
- write_(0x80+0x0b);//光标闪烁位定为日个位
- break;
- case 5:month++;//月+
- if(month==13) month=1;
- if(year%4==0)//判断日和月的配对关系
- {
- if(date>month1[month-1])
- date=month1[month-1];
- }
- else
- {
- if(date>month0[month-1])
- date=month0[month-1];
- }
- write_ymd(10,date); //日输出显示
- write_ymd(7,month);//月输出显示
- write_(0x80+0x08);//光标闪烁位定为月个位
- break;
- case 6: year++;//年+
- if(year==100) year=1;//复位
- write_ymd(4,year);//年输出显示
- write_(0x80+0x05);//光标闪烁位定为年个位
- break;
- }
- }
- }
- if(P2==0xde)//时分秒-1模块
- {
- delay(5);
- if(P2==0xde)
- {
- while(P2==0xde);
- switch(slnum)
- {
- while(P2==0xde);
- switch(slnum)
- {
- case 1:second--;//秒-
- if(second==255) second=59; //复位
- write_hms(8,second);//秒输出显示
- write_(0x80+0x40+0x09);//光标闪烁位定为秒个位
- break;
- case 2: minute--;
- if(minute==255) minute=59;//复位
- write_hms(5,minute); //分输出显示
- write_(0x80+0x40+0x06);//光标闪烁位定为分个位
- break;
- case 3: hour--;
- if(hour==255) hour=23; //复位
- write_hms(2,hour); //时输出显示
- write_(0x80+0x40+0x03);//光标闪烁位定为时个位
- break;
- case 4: date--;//日-
- if(year%4==0)//平闰年判断
- {
- if(date==0)
- {
- date=month1[month-1];
- }
- }
- else
- {
- if(date==0)
- {
- date=month0[month-1];
- }
- }
- write_ymd(10,date); //日输出显示
- write_(0x80+0x0b);//光标闪烁位定为日个位
- break;
- case 5:month--; //月-
- if(month==0) month=12;
- if(year%4==0) //判断日和月的配对关系
- {
- if(date>month1[month-1])
- date=month1[month-1];
- }
- {
- if(date>month0[month-1])
- date=month0[month-1];
- }
- write_ymd(10,date); //日输出显示
- write_ymd(7,month);//月输出显示
- write_(0x80+0x08);//光标闪烁位定为月个位
- break;
- case 6: year--;//年-
- if(year==1) year=99;//复位
- write_ymd(4,year);//年输出显示
- write_(0x80+0x05);//光标闪烁位定为年个位
- break;
- }
- }
- }
- }
- void initialize()//LCD初始化函数
- {
- uchar num;
- lcden=0;
- write_(0x38);//设置16x2显示,5x7点阵显示,8位数据接口
- write_(0x0c);//00001DCB,D(开关显示),C(是否显示光标),B(光标闪烁,光标不显示)
- write_(0x06);//000001N0,N(地址指针+-1)
- write_(0x01);//清屏指令 每次显示下一屏容时,必须清屏
- write_(0x80+0x10);//第一行显示
- for(num=0;num<16;num++)//显示16个字符
- {
- write_data(mytable0[num]);
- delay(10);
- }
- write_(0x80+0x50);//第二行,从第一格开始显示
- for(num=0;num<16;num++)//显示16个字符
- {
- write_data(mytable1[num]);
- delay(10);
- }
- for(num=0;num<16;num++)
- {
- write_(0x1c);//0001(S/C)(R/L)**;S/C:高电平移动字符,低电平移动光标;R/L:高电平左移,低电平右移
- delay(300);
- }
- delay(1000);
- write_(0x01);//清屏指令 每次显示下一屏内容时,必须清屏
- write_(0x80);
- for(num=0;num<13;num++)//初始化第一行显示
- {
- write_data(line0[num]);
- delay(50);
- }
- write_(0x80+0x40);//第二行,顶格显示
- for(num=0;num<10;num++)//初始化第二行显示
- {
- write_date(line1[num]);
- delay(50);
- }
- TMOD=0x01;//定时器0中断初值设置
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1:
- ET0=1;
- TR0=1;
- }
- void main()
- {
- lcdrw=0;
- P2=0xfe;
- initialize();//初始化
- while(1)
- {
- key_process();//按键扫描
- if(count==20)//定时1s运行模块
- {
- count=0;
- gethms();//时分秒数据处理
- getymd();//年月日数据处理
- }
- }
- }
复制代码
|