完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
运行的时候keil2提示..EX9_1.C(237): error C187: not an lvalue
..EX9_1.C(242): error C187: not an lvalue ..EX9_1.C(264): error C187: not an lvalue ..EX9_1.C(269): error C187: not an lvalue ..EX9_1.C(274): error C187: not an lvalue,请问大家如何解决,详细的程序 //***************************数字钟程序********************************// //程序:ex9_1.c //功能:数字钟程序 //****************************编译预处理语句****************************// #pragma SMALL #include "REG51.H" #include "absacc.h" //******************************函数声明*******************************// void display(unsigned char *p); //6位LED扫描函数,指针p为显示数据区首地址 unsigned char keytest(); //测试键盘有无键按下 unsigned char search(); //键盘扫描程序 void alarm(); //闹钟程序 void ftion0(); //时钟修改程序 void ftion1(); //闹钟修改程序 void cum(); //增1程序 //********************************端口定义******************************// ***it P2_7=P2^7; //定义蜂鸣器控制端口 //*******************************全局变量定义***************************// unsigned char clockbuf[3]={0,0,0}; // 存放时分秒的十进制数 unsigned char bellbuf[3]={0,0,0}; // 存放闹钟时分秒的十进制数 unsigned char msec1; // 10毫秒中断次数 unsigned char msec2; // 1秒循环次数 unsigned char timdata,rtimdata; // 时钟和闹钟修改位置标志 unsigned char count; // 闹钟启动后10秒计时单元 unsigned char *dis_p; // 显示缓冲区指针 bit armbit; //闹钟标志,armbit=0,闹钟没有设定,armbit=1,闹钟已设定 bit rtimbit; //闹钟是否启动标志,rtimbit=1,闹钟已启动 bit rhourbit; //闹钟小时修改标志,rhourbit=1,正在修改闹钟小时 bit rminbit; //闹钟分修改标志,rminbit=1,正在修改闹钟分钟 bit hourbit; //时钟小时修改标志,hourbit=1,正在修改时钟小时 bit minbit; //时钟分修改标志,minbit=1,正在修改时钟分钟 bit secbit; //时钟秒修改标志 //*********************************主函数********************************// void main() { unsigned char a; armbit=0; //清零闹钟标识位 msec1=0; //设置10毫秒中断次数初值 msec2=0; //设置1秒中断次数初值 timdata=0; //时钟内容修改位置记忆单元清零 rtimdata=0; //闹钟内容修改位置记忆单元清零 count=0; //闹钟启动后保持10秒计时单元清零 TMOD=0x02; //初始化定时器,定时器T0方式2 TL0=0x06; //定时250μs初始值 TH0=0x06; EA=1; //中断允许控制断 ET0=1; //定时器1开中断 TR0=1; //启动定时器0 dis_p=clockbuf; //将时钟值所在地址送入显示指针 while(1) { a=keytest(); //调用判别键入测试程序 if(a==0x0f) { display(dis_p); //无键输入调用显示程序 if(armbit==1)alarm(); //判别闹钟设定否,若设定了,则调闹钟程序 } else { display(dis_p); //调用显示程序作为延时去抖动 a=keytest(); if(a!=0x0f) // 没有抖动,则表示有键按下 { a=search(); // 调用键号测试程序 switch (a) { case 0x00:ftion0();break; //是时钟参数修改功能键,调用时钟修改 case 0x01:ftion1();break; //是闹钟参数修改功能键,调用闹钟设定 case 0x02:cum();break; //是加1功能键,则调用加1修改程序 default:break; } } } } } //****************************6位LED扫描函数**************************/ //函数名:display //函数功能:6位LED扫描函数 //形式参数:指向时、分、秒计时单元数据首地址的指针 //返回值:无 void display(unsigned char *p) { unsigned char buffer[]={0,0,0,0,0,0}; unsigned char k,i,j,m,temp; unsigned char led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 0-9的显示码 buffer[0]=p[0]/10; // 将缓冲区中的数的十位和个位分开 buffer[1]=p[0]%10; buffer[2]=p[1]/10; buffer[3]=p[1]%10; buffer[4]=p[2]/10; buffer[5]=p[2]%10; for(k=0;k<3;k++) { temp=0x01; for(i=0;i<6;i++) { P1=0xff; //关显示 j=buffer[i]; P1=led[j]; //P1送段码 P0&=~temp; //P0对应端口低电平选位 temp<<=1; for(m=0;m<100;m++); //每一位显示延时 } } } //*****************************键盘测试函数*************************// //函数名:keytest //函数功能:6位LED扫描函数 //形式参数:读出行输入按键状态码,用于测试是否有按键按下 //返回值:键盘行输入按键状态码,unsigned char类型 unsigned char keytest() { unsigned char c; P0=0xf0; c=P2; c=c&0x07; //按键行输入为P2.0~P2.2,屏蔽无关位 return(c); } //****************************扫描键盘得到键值函数*********************// //函数名:search //函数功能:键盘扫描函数 //形式参数:无 //返回值:行列式按键的键码,unsigned char类型 unsigned char search() { unsigned char a,b,c,d,e; c=0xfe; //首列扫描字送变量c a=0; //首列号送a while(1) { P0=c; //列扫描字送P0口 d=P2; //读入P2口的行状态 if(d&0x01==0){ b=0;break;} //第0行有键按下,第0行行首号送b else if(d&0x02==0){ b=4;break;} //第1行有键按下,第1行行首号送b else if(d&0x04==0){ b=8;break;} //第2行有键按下,第1行行首号送b a++; //扫描列号加1 c<<=1; c++; //修改列扫描字,扫描下一列 } c=a+b; //将行首号与列号相加,求键号 do { display(dis_p); } while((d=keytest())!=0x07); //等待释放按键 return(c); } //*******************************闹钟函数******************************// //函数名:alarm //函数功能:启动闹钟10秒 //形式参数:无 //返回值:无 void alarm() { if((clockbuf[0]==bellbuf[0])&&(clockbuf[1]==bellbuf[1])) { P2_7=0; rtimbit=1; //设置闹钟计时标志,时钟将进行10秒计时志 } else { if(count==10) //判断闹钟保持10秒时间到否 { count=0; //清除闹钟保持10秒计时 P2_7=1; //清除闹钟 armbit=0; //清闹钟标识,否则闹钟设置将继续保持有效 rtimbit=0; } } } //*******************时钟修改函数*****************// //函数名:ftion0 //函数功能:时钟修改,根据按键次数,修改时、分、秒修改标志全局变量 //形式参数:无 //返回值:无 void ftion0() { TR0=0; // 关定时器 rhourbit=0; // 禁止闹钟时间参数修改,清闹钟修改标识 rminbit=0; dis_p=clockbuf; // 将时钟缓冲区首地址送显示指针 rtimdata=0; // 清闹钟修改位置标识记录 timdata++; // 将时钟修改记录值加1 switch (timdata) { case 0x01:secbit=1;break; //记录值为1,则将时钟秒修改标识置1 case 0x02:secbit=0;minbit=1;break; //记录值为2,则将时钟分修改标识置1 case 0x03:minbit=0;hourbit=1;break; //记录值为3,则将时钟时修改标识置1 case 0x04:timdata=0;hourbit=0;TR0=1;break; //按4次则清时钟单元修改位置记录,定时器重新启动 default:break; } } //*******************************闹钟修改函数*************************// //函数名:ftion1 //函数功能:闹钟修改,根据按键次数,修改时、分修改标志全局变量 //形式参数:无 //返回值:无 void ftion1() { secbit=0; //禁止时钟时间修改 minbit=0; hourbit=0; dis_p=bellbuf; //设置闹钟显示标志 timdata=0; //清时钟修改位置标识记录 rtimdata++; //将闹钟修改记录值加1 switch (rtimdata) { case 0x01:rminbit=1;break; //若记录值为1,则将闹钟分修改标识置1 case 0x02:rminbit=0;rhourbit=1;break; //记录值为2,则将时钟分修改标识置1 case 0x03:rtimdata=0;rhourbit=0; // 若按3次则清闹钟单元修改位置记录 armbit=1; // 设置闹钟已设定标志位 dis_p=clockbuf; // 恢复时钟显示标志 break; default:break; } } //************************************增1函数***************************// //函数名:cum //函数功能:根据标志位对相应时、分、秒单元增1 //形式参数:无 //返回值:无 void cum() { if(secbit==1) // 若时钟秒修改标识为1则秒单元内容加1 { if(clockbuf[2]==59) clockbuf[2]=0; else clock buf[2]++; } else if(minbit==1) // 若时钟分修改标识为1则分单元内容加1 { if(clockbuf[1]==59)clockbuf[1]=0; else clockbuf[1]++; } else if(hourbit==1) // 若时钟小时修改标识为1则小时单元内容加1 { if(clockbuf[0]==23)clockbuf[0]=0; else clockbuf[0]++; } else if(rminbit==1) // 若闹钟分修改标识为1则分单元内容加1 { if(bellbuf[1]==59)bellbuf[1]=0; else bellbuf[1]++; } else if(rhourbit==1) { // 闹钟小时修改标识为1则小时单元内容加1 if(bellbuf[0]==23)bellbuf[0]=0; else bellbuf[0]++; } } //***************************定时器0中断函数****************************/ //函数名:clock //函数功能:定时器T0定时中断,interrupt 1 //形式参数:无 //返回值:无 void clock() interrupt 1 { EA=0; //关中断 if(msec1!=0x28) msec1++; //到10毫秒否,不到则msec1加1 else { msec1=0; if(msec2!=100)msec2++; //到1秒否,不到则msec2加1 else { if(rtimbit==1)count++; msec2=0; if(clockbuf[2]!=59) clockbuf[2]++; //到1分否,不到则clockbuf[2]加1 else { clockbuf[2]=0; if(clockbuf[1]!=59) clockbuf[1]++; // 到1小时否,不到则clockbuf[1]加1 else { clockbuf[1]=0; if(clockbuf[0]!=23) clockbuf[0]++; // 到24时否,不到则clockbuf[0]加1 else clockbuf[0]=0; } } } } EA=1; //开中断 }
|
|
相关推荐
1个回答
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
787 浏览 0 评论
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
1476 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1216 浏览 0 评论
900 浏览 0 评论
963 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11866 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 06:04 , Processed in 0.641113 second(s), Total 84, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号