keilc51编程程问题

请问:在利用C51编程要注意那些问题?
[问题点数:100分,结帖人xiaoxiaodie]
本版专家分:143
结帖率 100%
CSDN今日推荐
本版专家分:2607
本版专家分:2607
本版专家分:1991
本版专家分:2981
本版专家分:3502
2002年8月 Windows专区大版内专家分月排行榜第一2002年7月 Windows专区大版内专家分月排行榜第一2002年6月 Windows专区大版内专家分月排行榜第一
2002年9月 Windows专区大版内专家分月排行榜第二2002年8月 专题开发/技术/项目大版内专家分月排行榜第二
2002年5月 Windows专区大版内专家分月排行榜第三2003年6月 硬件/嵌入开发大版内专家分月排行榜第三2002年5月 专题开发/技术/项目大版内专家分月排行榜第三
本版专家分:143
本版专家分:3502
2002年8月 Windows专区大版内专家分月排行榜第一2002年7月 Windows专区大版内专家分月排行榜第一2002年6月 Windows专区大版内专家分月排行榜第一
2002年9月 Windows专区大版内专家分月排行榜第二2002年8月 专题开发/技术/项目大版内专家分月排行榜第二
2002年5月 Windows专区大版内专家分月排行榜第三2003年6月 硬件/嵌入开发大版内专家分月排行榜第三2002年5月 专题开发/技术/项目大版内专家分月排行榜第三
本版专家分:2981
本版专家分:2981
本版专家分:2981
本版专家分:143
本版专家分:2981
本版专家分:2981
本版专家分:2981
本版专家分:2607
本版专家分:2981
本版专家分:2981
本版专家分:2981
匿名用户不能发表回复!
其他相关推荐还没有帐号? 赶紧
用户版块帖子
c51控制ds3231程序,读正常,写出现异常,附上源码求原因(已解决,原是10转bcd问题)
UID:811154
在线时间625小时
M币3467专家2
本人移植了网上高人的ds3231程序,昨晚实验了一下,成功了一半:读出数据没有问题,时间很准(很不容易对照网络调对了时间)!&&但是调整的时候乱跑,调小时的时候,有时候出现正常加减,有时候不好用,具体表现:9点加1后变成20,继续增加可以连续到25,再增加又回到20,继续增加能跳到34,继续能到37,再增加到00,分钟也是乱跑,有时候能连续加减,大多时候乱增减,能增加到70多,很是奇怪,本程序是我原来用的ds887的芯片,运行和调整完美,换上3231就出了这样的毛病,哪位大侠给分析一下,对读写3231不是很清楚,是不是有要特别注意的地方?本人用的89c52,12m晶振,12T模式。把uchar HEX2BCD(uchar val)函数体修改如下即可!uchar HEX2BCD(uchar val)&&&&//B码转换为BCD码{ &&&& return&&(((val%100)/10)&&4)|(val%10);} 完整源代码如下:
#include&reg52.h& #define uchar unsigned char #define uint unsigned int sbit we1 = P1^0;&& //小时 十位sbit we2 = P1^1;&&&&//小时 个位 sbit we3 = P1^2;&&&&//分钟 十位sbit we4 = P1^3;&&&&//分钟 个位 sbit we5 = P1^4;&&&&//秒十位sbit we6 = P1^5;&&&&//秒个位
sbit key1 = P0^1;&&&&//选位 sbit key2 = P0^0;&&&&//增大 sbit key3 = P0^2;&&&&//减小 sbit beep = P0^7;&&&&//蜂鸣器 sbit dp = P1^ 6;&&&& //冒号 sbit SDA=P2^0;&&&& //模拟I2C数据传送位SDA&&&&&&&&sbit SCL=P2^1;&&&& //模拟I2C时钟控制位SCL
bit&&&&&&&&&&&&//应答标志位 #define DS3231_WriteAddress 0xD0&&&&//器件写地址 #define DS3231_ReadAddress&&0xD1&&&&//器件读地址#define DS3231_SECOND&&&&&& 0x00&&&&//秒#define DS3231_MINUTE&&&&&& 0x01&&&&//分#define DS3231_HOUR&&&&&&&& 0x02&&&&//时#define DS3231_WEEK&&&&&&&& 0x03&&&&//星期#define DS3231_DAY&&&&&&&&&&0x04&&&&//日#define DS3231_MONTH&&&&&&&&0x05&&&&//月#define DS3231_YEAR&&&&&&&& 0x06&&&&//年//闹铃1&&&&&&&&&&&&#define DS3231_SALARM1ECOND 0x07&&&&//秒#define DS3231_ALARM1MINUTE 0x08&&&&//分#define DS3231_ALARM1HOUR&& 0x09&&&&//时#define DS3231_ALARM1WEEK&& 0x0A&&&&//星期/日//闹铃2#define DS3231_ALARM2MINUTE 0x0b&&&&//分#define DS3231_ALARM2HOUR&& 0x0c&&&&//时#define DS3231_ALARM2WEEK&& 0x0d&&&&//星期/日#define DS3231_CONTROL&&&&&&0x0e&&&&//控制寄存器#define DS3231_STATUS&&&&&& 0x0f&&&&//状态寄存器#define BSY&&&&&&&&&&&&&&&& 2&&&&&& //忙#define OSF&&&&&&&&&&&&&&&& 7&&&&&& //振荡器停止标志#define DS3231_XTAL&&&&&&&& 0x10&&&&//晶体老化寄存器#define DS3231_TEMPERATUREH 0x11&&&&//温度寄存器高字节(8位)#define DS3231_TEMPERATUREL 0x12&&&&//温度寄存器低字节(高2位)
uchar data dis_buf[6];uchar data dis_uchar data dis_ uchar code dis_code[10]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,0x80,0x90};&&&&&& // 0,1,2,3, 4,5,6,7,8,9
uchar BCD2HEX(uchar val)&&&&//BCD转换为Byte{&&&&&&&&temp=val&0x0f;&&&&val&&=4;&&&&val&=0x0f;&&&&val*=10;&&&&temp+= &&&&} uchar HEX2BCD(uchar val)&&&&//B码转换为BCD码{&&&&uchar i,j,k;&&&&i=val/10;&&&&j=&&&&k=j+(i&&4);&&&&} void delayus(uint us) {&&&&while (us--);} void Start_I2C(){&&&&SDA=1;&&&&&&&&&&&&&&&&&&//发送起始条件的数据信号&&&&delayus(1);&&&&SCL=1;&&&&delayus(5);&&&&&&&&&&&& //起始条件建立时间大于4.7us,延时 &&&&SDA=0;&&&&&&&&&&&&&&&&&&//发送起始信号&&&&delayus(5);&&&&&&&&&&&& // 起始条件锁定时间大于4μs &&&&SCL=0;&&&&&&&&&&&&&&&&&&//钳住I2C总线,准备发送或接收数据&&&&delayus(2);} void Stop_I2C(){&&&&SDA=0;&&&&&&&&&&&&&&&&&&//发送结束条件的数据信号&&&&delayus(1);&&&&&&&&&&&& //发送结束条件的时钟信号&&&&SCL=1;&&&&&&&&&&&&&&&&&&//结束条件建立时间大于4us&&&&delayus(5); &&&&SDA=1;&&&&&&&&&&&&&&&&&&//发送I2C总线结束信号&&&&delayus(4);} void SendByte(uchar c){&&&&uchar BitC &&&&for(BitCnt=0;BitCnt&8;BitCnt++)&&&&&&&& //要传送的数据长度为8位&&&&{&&&&&&&&if((c&&BitCnt)&0x80)&&&&&&&&&&&&SDA=1;&&&&&&&&&&&&&&&&&&&&&&&&&&//判断发送位&&&&&&&&else &&&&&&&&&&&&SDA=0;&&&&&&&&&&&&&& &&&&&&&&&&delayus(1);&&&&&&&&&&SCL=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//置时钟线为高,通知被控器开始接收数据位&&&&&&&&&&delayus(5);&&&&&&&&&&&&&&&&&&&&&& //保证时钟高电平周期大于4μs&& &&&&&&&&&&SCL=0;&&&&} &&&&delayus(2);&&&&SDA=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//8位发送完后释放数据线,准备接收应答位&&&&delayus(2);&&&&&&SCL=1;&&&&delayus(3);&&&&if(SDA==1)&&&&&&&&ack=0;&&&&&&&&else&&&&&&&&ack=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//判断是否接收到应答信号&&&&SCL=0;&&&&delayus(2);} uchar RcvByte(){&&&& uchar BitC && retc=0;&& SDA=1;&&&&&&&&&&&&&&&&&&&&&&&&&& //置数据线为输入方式&& for(BitCnt=0;BitCnt&8;BitCnt++)&& {&&&&&&&&delayus(1);&&&&&&&&&&SCL=0;&&&&&&&&&&&&&&&&&&&&&&//置时钟线为低,准备接收数据位 &&&&&&&&delayus(5);&&&&&&&&&&&&&&&& //时钟低电平周期大于4.7μs &&&&&&&&SCL=1;&&&&&&&&&&&&&&&&&&&&&&//置时钟线为高使数据线上数据有效&&&&&&&&delayus(3);&&&&&&&&retc=retc&&1;&&&&&&&&if(SDA==1)&&&&&&&&&&&&retc=retc+1;&&&&&&&&&&&&//读数据位,接收的数据位放入retc中&&&&&&&&delayus(2);&& }&& SCL=0;&& delayus(2);&& return(retc);}
void Ack_I2C(bit a){ &&&&if(a==0)&&&&&&&&SDA=0;&&&&&&&&&&&&&&//在此发出应答或非应答信号&&&&else&&&&&&&&SDA=1;&&&&delayus(3);&&&& &&&&SCL=1; &&&&delayus(5);&&&&&&&&&&&& //时钟低电平周期大于4μs &&&&SCL=0;&&&&&&&&&&&&&&&&&&//清时钟线,钳住I2C总线以便继续接收&&&&delayus(2);&& }
uchar write_byte(uchar addr, uchar write_data){&&&&Start_I2C();&&&&SendByte(DS3231_WriteAddress);&&&&if (ack == 0)&&&&&&&&return 0; &&&&SendByte(addr);&& &&&&if (ack == 0)&&&&&&&&return 0; &&&&SendByte(write_data);&&&&if (ack == 0)&&&&&&&&return 0; &&&&Stop_I2C();&&&&delayus(10);&&&&&&&&&&return 1;}
uchar read_current(){&&&&uchar read_&&&&Start_I2C();&&&&SendByte(DS3231_ReadAddress);&&&&if(ack==0)&&&&&&&&return(0); &&&&read_data = RcvByte();&&&&Ack_I2C(1);&&&&Stop_I2C();&&&&return read_}
uchar read_random(uchar random_addr){&&&&Start_I2C();&&&&SendByte(DS3231_WriteAddress);&&&&if(ack==0)&&&&&&&&return(0); &&&&SendByte(random_addr);&&&&if(ack==0)&&&&&&&&return(0); &&&&return(read_current());}
void ModifyTime(uchar hou,uchar min,uchar sec){&&&&uchar temp=0; &&&&temp=HEX2BCD(hou);&&&&write_byte(DS3231_HOUR,temp);&& //修改时 &&&&temp=HEX2BCD(min);&&&&write_byte(DS3231_MINUTE,temp); //修改分 &&&&temp=HEX2BCD(sec);&&&&write_byte(DS3231_SECOND,temp); //修改秒}
void TimeDisplay(uchar Dhour,uchar Dmin,uchar Dsec){&&&&dis_buf[5]=dis_code[Dhour / 10];&&&&&&&&// 时十位&&&&dis_buf[4]=dis_code[Dhour % 10];&&&&&&&&// 时个位&&&&dis_buf[3]=dis_code[Dmin / 10];&&&&&&&& // 分十位&&&&dis_buf[2]=dis_code[Dmin % 10];&&&&&&&& // 分个位&&&&dis_buf[1]=dis_code[Dsec / 10];&&&&&&&& // 秒十位&&&&dis_buf[0]=dis_code[Dsec % 10];&&&&&&&& // 秒个位} /* void DateDisplay(uchar Dyear,uchar Dmonth,uchar Dday){&&&&dis_buf[7]=dis_code[Dyear / 10];&&&&&&&&// 年十位&&&&dis_buf[6]=dis_code[Dyear % 10];&&&&&&&&// 年个位&&&&dis_buf[4]=dis_code[Dmonth / 10];&&&&&& // 月十位&&&&dis_buf[3]=dis_code[Dmonth % 10];&&&&&& // 月个位&&&&dis_buf[1]=dis_code[Dday / 10];&&&&&&&& // 天十位&&&&dis_buf[0]=dis_code[Dday % 10];&&&&&&&& // 天个位} */ void get_show_time(void){&&&&uchar Htemp1,Htemp2,Mtemp1,Mtemp2,Stemp1,Stemp2;
&&&&Htemp1=read_random(DS3231_HOUR);&&&&//时 24小时制&&&&Htemp1&=0x3f;&&&&&&&&&&&&&&&&&& &&&&Htemp2=BCD2HEX(Htemp1); &&&&Mtemp1=read_random(DS3231_MINUTE);&&//分&&&&Mtemp2=BCD2HEX(Mtemp1); &&&&Stemp1=read_random(DS3231_SECOND);&&//秒&&&&Stemp2=BCD2HEX(Stemp1); &&&&TimeDisplay(Htemp2,Mtemp2,Stemp2);} /***void get_show_date(void){&&&&uchar Ytemp1,Ytemp2,Mtemp1,Mtemp2,Dtemp1,Dtemp2;
&&&&Ytemp1=read_random(DS3231_YEAR);&&&&&&&&//年&&&&Ytemp2=BCD2HEX(Ytemp1); &&&&Mtemp1=read_random(DS3231_MONTH);&&&&&& //月&&&&Mtemp2=BCD2HEX(Mtemp1); &&&&Dtemp1=read_random(DS3231_DAY);&&&&&&&& //日&&&&Dtemp2=BCD2HEX(Dtemp1); &&&&DateDisplay(Ytemp2,Mtemp2,Dtemp2);}
void get_show_Temperature(void){&&&&uchar Ttemp1,Ttemp2,Ttemp3,Ttemp4;
&&&&Ttemp1=read_random(DS3231_TEMPERATUREH);&&&&//温度 高字节&&&&Ttemp2=BCD2HEX(Ttemp1); &&&&Ttemp3=read_random(DS3231_TEMPERATUREL);&&&&//温度低字节&&&&Ttemp4=BCD2HEX(Ttemp3); &&&&DateDisplay(0,Ttemp2,Ttemp4);} */// /*****ds12c887控制脚接法******sbit cs=P0^3;sbit as=P0^4;sbit rw=P0^5;sbit ds=P0^6;**/
uchar Stemp2,Mtemp2,Htemp2,temp, num,k1num,sec,min,hou, //uchar code table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳管 void delay(uint z)&&&&//1ms延时 { &&&&uint x,y; &&&&for(x =x & 0;x -- ) &&&&&&&&for(y = 110;y & 0;y -- ); } void di()&&&&//蜂鸣器 { && uchar bee,bee1; && for(bee=0;bee&50;bee++) &&&&&&&&{&&&&&&&&beep =~ &&&&&&&& for(bee1=0;bee1&100;bee1++) &&&&&&&& {} &&&&&& delayus(1); &&&&&& } &&&&&& beep = 1; }
void init()&&&&//初始化 {
&&&&&&&&TMOD = 0x01; &&&&&&&&TH0 = (65536 - 4000) / 256; &&&&&&&&TL0 = (65536 - 4000) % 256; &&&&&&&&EA = 1; &&&&&&&&ET0 = 1; &&&&&&&&TR0 = 1; }
void display()&&&&//显示 {&&&&we1 = 1;&&&&we2 = 1;&&&&we3 = 1;&&&&we4 = 1;&&&&we5 = 1;&&&&we6 = 1;&& // delay(1);&&&&P3 = 0 &&&&disp ++ ; &&&&switch(disp) &&&&{&&&&&&&&&&&&&&&& /******首位0不显示*******/&&&&&&&&case 1: /* if((k1num == 1) &&(dp== 1))we1=1;&&&&&&&&&&&&&&&&&&&& else {P3 = table1[hour / 10];&&&&&&&&&&&&&&&&&&&&&& if((hour/10)==0) we1=1;&&&&&&&&&&&&&&&&&&&&&&else{&&we1 = 0; }&&&& &&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */ &&&&&&&&&&&&&&&& if(k1num == 1 && dp == 1) we1=1;&&&&&&&&&&&&&&&& else{P3 = dis_buf[5]; we1 = 0; }&&&&&&&&&&&&&&&& &&&&&&&&case 2:&&if(k1num == 1 && dp&&== 1) we2=1;&&&&&&&&&&&&&&&& else{P3 = dis_buf[4]; we2 = 0; } &&&&&&&&&&&&&&&& &&&&&&&&case 3:&&if(k1num == 2 && dp == 1) we3=1;&&&&&&&&&&&&&&&& else { P3 = dis_buf[3];&&we3 = 0; }&&&&&&&&&&&&&&&& &&&&&&&&case 4:&&if(k1num == 2 && dp&&== 1) we4=1;&&&&&&&&&&&&&&&& else{&&P3 = dis_buf[2]; we4 = 0;&&}&&&&&&&&&&&&&&&& &&&&&&&&case 5:&&P3 = dis_buf[1];&&&&&&&&&&&&&&&& we5 = 0;&&&&&&&&&&&&&&&& &&&&&&&&case 6:&&P3 = dis_buf[0];&&&&&&&&&&&&&&&& we6 = 0;&&&&&&&&&&&&&&&& disp = 0;&&&&&&&&&&&&&&&&&&&& } }&& void keyscan()&&&&//键盘扫描 { &&&&if(key1 == 0) &&&&{ &&&&&&&&delay(5); &&&& if(key1 == 0) &&&&&&&&{ &&&&&&&&&&&&k1num ++ ; &&&&&&&&&&&&di();
&&&&&&&&&&&&if(k1num&2) &&&&&&&&&&&&k1num = 0;&&&&&&&&&& while(key1==0) ;&&&& //等待按键释放&&&&&&&&&& delay(300); &&&&&&&&} &&&&} &&&&if(k1num == 1)&&&&//调时 &&&&{ &&&&&&&&if(key2 == 0) &&&&&&&&{ &&&&&&&&&&&&delay(5); &&&&&&&&&&&&if(key2 == 0) &&&&&&&&&&&&{ &&&&&&&&&&&&&&&&hou++ ;&&&&&&&&&&&&&&&&di();&&&&&&&&&&&&&&&&if(hou & 23) hou = 0; &&&&temp=HEX2BCD(hou);&&&&write_byte(DS3231_HOUR,temp);&& //修改时 &&&&&&&&&&&&&&&&while(key2==0) ;&&&& //等待按键释放&&&&&&&&&&&&&&&&delay(300); &&&&&&&&&&&&} &&&&&&&&} &&&&&&&&if(key3 == 0) &&&&&&&&{ &&&&&&&&&&&&delay(5); &&&&&&&&&&&&if(key3 == 0) &&&&&&&&&&&&{ &&&&&&&&&&&&&&&&hou -- ; &&&&&&&&&&&&&&&&di();
&&&&&&&&&&&&&&&&if(hou == 255) hou = 23; &&&&temp=HEX2BCD(hou);&&&&write_byte(DS3231_HOUR,temp);&& //修改时 &&&&&&&&&&&&&& while(key3==0) ;&&&& //等待按键释放&&&&&&&&&&&&&&&&delay(300); &&&&&&&&&&&&} &&&&&&&&} &&&&} &&&&if(k1num == 2)&&&&//调分 &&&&{ &&&&&&&&if(key2 == 0) &&&&&&&&{ &&&&&&&&&&&&delay(5); &&&&&&&&&&&&if(key2 == 0) &&&&&&&&&&&&{ &&&&&&&&&&&&&&&&min++; &&&&&&&&&&&&&&&&di();
&&&&&&&&&&&&&&&&if(min & 59) &&&&&&&&&&&&&&&&min = 0;
&&&&temp=HEX2BCD(min);&&&&write_byte(DS3231_MINUTE,temp); //修改分 &&&&while(key2==0) ;&&&& //等待按键释放&&&&&&&&&&&&&&&&delay(300); &&&&&&&&&&&&} &&&&&&&&} &&&&&&&&if(key3 == 0) &&&&&&&&{ &&&&&&&&&&&&delay(5); &&&&&&&&&&&&if(key3 == 0) &&&&&&&&&&&&{ &&&&&&&&&&&&&&&&min -- ; &&&&&&&&&&&&&&&&di();
&&&&&&&&&&&&&&&&if(min == 255)&&&&&&//min是uchar,从0--得255 &&&&&&&&&&&&&&&&min = 59; &&&&temp=HEX2BCD(min);&&&&write_byte(DS3231_MINUTE,temp); //修改分&&&&&&&&&&&&&&&& while(key3==0) ;&&&& //等待按键释放&&&&&&&&&&&&&&&&delay(300); &&&&&&&&&&&&} &&&&&&&&} &&&&} } void Modifyhou(hou){&&&&temp=HEX2BCD(hou);&&&&write_byte(DS3231_HOUR,temp);&& //修改时} void Modifymin(min){&& &&&&temp=HEX2BCD(min);&&&&write_byte(DS3231_MINUTE,temp); //修改分&& } void Modifysec(sec){&&&&temp=HEX2BCD(sec);&&&&write_byte(DS3231_SECOND,temp); //修改秒} /***void ModifyTime(uchar yea,uchar mon,uchar da,uchar hou,uchar min,uchar sec){&&&&uchar temp=0; &&&&temp=HEX2BCD(yea);&&&&write_byte(DS3231_YEAR,temp);&& //修改年 &&&&temp=HEX2BCD(mon);&&&&write_byte(DS3231_MONTH,temp);&&//修改月 &&&&temp=HEX2BCD(da);&&&&write_byte(DS3231_DAY,temp);&&&&//修改日 &&&&temp=HEX2BCD(hou);&&&&write_byte(DS3231_HOUR,temp);&& //修改时 &&&&temp=HEX2BCD(min);&&&&write_byte(DS3231_MINUTE,temp); //修改分 &&&&temp=HEX2BCD(sec);&&&&write_byte(DS3231_SECOND,temp); //修改秒} */void main()&&&&//主函数 {&&&&&&&&init();&&&&di(); &&&&while(1) &&&&{&&&&&&// if((sec==00)&&(min==00)&&(hour&=06)&&(hour&=22)) di(); //早6点---晚10点整点di()&&&&&&&&get_show_time();&&&&&&&&keyscan();&&&&} }
void timer0() interrupt 1&&&&//中断 {
&&&&TH0 = (6) / 256;&&&&//5 毫秒定时 &&&&TL0 = (65536 - 4000) % 256; &&&&ss ++ ;&&&&display();
&&&&if(ss & 125)&&&&&& &&&& {&&&&&&&&&&&&ss = 0;&&&&&&dp=~&&&&&&&&&&&&/*&&while(ds12c887_read(0x0a)&0x80);&&&&//&&&& 如果UIP位为1,则等待。为0则退出(更新位UIP:用来标志芯片是否即将进行更新) &&&&&&&&hour=ds12c887_read(0x04);//&&&&&&&&min=ds12c887_read(0x02);&&&&&&&&sec=ds12c887_read(0x00);//&&&&&&*/ &&&&&& if(k1num!=0)&&&&&&&& { num++;if (num&20){num=0;k1num=0;}}&&&& //设置键按下一段时间不动,退出设置&&&&&&}}
[ 此帖被ysh711在 08:53重新编辑 ]
UID:912019
在线时间1134小时
M币1352专家2
不懂,帮顶,3231是按要求接的吗&&&&据说无关的脚都要接地
UID:1731462
在线时间317小时
M币1207专家5
加上拉电阻试试
UID:811154
在线时间625小时
M币3467专家2
回 yjfxue 的帖子
:不懂,帮顶,3231是按要求接的吗    据说无关的脚都要接地 ( 10:14) 网上买的模块,接4条线到c51,scl、sda、vcc、gnd,应该没有问题,读数据很正常的。
UID:811154
在线时间625小时
M币3467专家2
回 我是鑫鑫 的帖子
:加上拉电阻试试 ( 11:05) 有上拉电阻的。
UID:853420
在线时间1036小时
M币1957专家7
还是加GPS校时吧。我的都这样做了。非常准
UID:811154
在线时间625小时
M币3467专家2
回 zhlylim 的帖子
:还是加GPS校时吧。我的都这样做了。非常准 ( 20:04) 室内没有gps信号是个大问题,以前在窗前用过,精度当然是很好的了。
UID:1418200
在线时间26小时
M币-6专家0
Re:c51控制ds3231程序,读正常,写出现异常,附上源码求原因(已解决,原是10转bcd ..
不错,在STC12LE上也能用,把DateDisplay函数里的数组下标改好,年月日,温度也正常。[ 此帖被a在 22:22重新编辑 ]
UID:1082014
在线时间7小时
M币-20专家0
Re:c51控制ds3231程序,读正常,写出现异常,附上源码求原因(已解决,原是10转bcd ..
不是用ds3231吗?怎么还有12b887?
访问内容超出本站范围,不能确定是否安全
Code by , Time now is:08-25 12:09, Total 0.282044(s) query 12,
Gzip enabled&关于C51编程中的一个问题(用Keil C51)
问题描述:
关于C51编程中的一个问题(用Keil C51)#includesbit P10=P1^0;void time_initial(){ TF0=0; TR0=0; TH0=0xF8; TL0=0x30; TR0=1;} main(){TMOD=0x01;for(;;) {time_initial(); do{} while(!TF0); P10=!P10; }}一个关于计时器采用查询方式输出方波的简单程序,F7之后,提示ERROR 104:MULTIPLE PUBLIC DEFINITIONS(MAIN声明那一行)SYMBOL: MAINWORING L16:UNCALLED SEGMENT,IGNORED FOROVERLAY PROCESS(P10=!P10;这一行,)怎么会有这样的问题,望高手解答~!
问题解答:
很明显 你这工程里不只就这个程序 别的C文件里也有MAINERROR 104:MULTIPLE PUBLIC DEFINITIONS(MAIN声明那一行) SYMBOL:MAIN是说MAIN被多次定义WORING L16:UNCALLED SEGMENT,IGNORED FOROVERLAY PROCESS 是说有没被调用的子程序
我来回答:
剩余:2000字
P1&=0xf0 //把P1的0-3位变成0P1|=0x01 //把P1的第0位变成1连起来就是将P1的低4位变成0001 如果是置数,为什么不直接写P1=0x01因为它要保证其它位不变.比如P1原来是,他这么写就变成,而直接赋值就成了了
给你提供一个思路,定义1,2,3,4,5,6,7,8,9,0,十,百,千,万的拼音,然后按照你的读法把输入的数字先判断是几位数,然后按照规则输出就可以了
#include int main(){int i = 1;int j = 0;int k = 1;for (i = 1; i
#includeint multiply(int a,int b,int c=1,int d=1,int e=1){return a*b*c*d*e;}int main(){cout
#include&stdio.h&int&main(){int&n,max=-1,s=0;scanf(&%d&,&n);while(n){if(n%10==0)s++;if(n%10&max)max=n%10;n/=10;}pri
#include "iostream"void main() {int flag=1;a=getchar();while(a!='.'){if(a==' '){if(!flag){flag=1;cout
import java.util.ArrayLimport java.util.Cimport java.util.Cimport java.util.HashMimport java.util.Limport java.util.Mimport j
void main (){int a[10];int max=0;for(i=1;ia[max])max=i;}if( max != 0){i=a[0];a[0]=a[max];a[max]=i;}/*最大数下标max*/}
一个矩阵不等于0的话,那么这个矩阵的2—范数(1—范数和F—范数也一样)一定不等于零,所以你的判断条件可以表示为:if norm(A,2)~=0……end
#includeint main( ){ int arry[4][4],count=1; bool isFind= for(int i=0;i
Dim X As Integer这句出的毛病.你直接把它定义成整数型变量,输入3.5直接四舍五入转换为4.把它换成Dim X As Single
#includeint main(){printf("输入你的成绩:");scanf("%d",&a);if(a>100||a 再答: 第一次被采纳 好开心 处女采
clearclcA=rand(4);k=1;%这个就是你任意要换得数字a=randperm(4);b=randperm(4);%这两行是随机的选择两个数组for i=1:4 这个是你要换得个数要是3个你就i=1:3A(a(i),b(i))=k;endA%最终就是你要换得结果
public class TestIntSam { public static void main(String[] args) { int[] ints={1,2,3,4,5,6,0,20,4,23}; int min=ints[0]; int minSub=0; for(int i=1;i
vara,b,c,i,tot:beginfor i:=100 to 999 do {枚举所有的三位数}begina:=i mod 10; {a是 这个三位数 的个位上的数字}b:=(i mod 100)div 10;{ b 是 这个三位数的 十位上的数字}c:=i div 100
A=[1,2,3;2:4;4:6;3,7,7][m,n]=size(A);a0=[];for i=1:ma=max(A(i,:));B=[a0,a];a0=B;enddisp('最大值为:')M=max(B)disp('坐标为:')[X,Y]=find(A==M)A = 1 2 3 2 3 4 4 5 6 3 7 7最
很少有设备拥有随机电路,除非安全性要求很高,大部分随机发生函数采用线性同余产生0到p-1之间的均匀分布,通常用随机种子s=(a*s+b) mod p进行迭代,函数输出为s^c mod p,其中a,b,c互质,p为质数,s由系统时间等方式初始化;由输出猜测随机种子是一个离散对数方程,很难解,因此安全性较好.我只知道c是以
这很简单嘛拆分year%4==0&&year%100!=0||year%400==0 可以整除4并且不能整除100 或者可以整除400拆分year%4==0||year%400==0&&year%10 可以整除4,或者可以整除400等等,你后面这个语句没写完吧.后面这个语句在编译后得出的结果并不一定是正确的哦
#include "stdio.h"int main(){ int n, double sum = 0; int max = 0; int min = 1 再问: 不能运行这个程序,有错误 再答: #include "stdio.h" int main() { int n, doub
也许感兴趣的知识发生了什么?
随着移动互联的快速普及,用户越来越喜欢在手机端查看内容、交流互动。为了让大家不错过任何精彩瞬间,我们将小组和MOOC迁移至饭团,丰富产品使用功能,提供优质用户体验。
什么是饭团?
饭团是一个自由交流的平台,所有人都可以发布内容,和兴趣相投的人直接分享你的见解;内嵌于微信之中,操作简单,随时随地与他人交流!
我要怎么找到它?
小组和MOOC的用户内容和资料导出功能即将上线豆丁微信公众号
君,已阅读到文档的结尾了呢~~
[考试]单片机常见问题2
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
[考试]单片机常见问题2
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 c51编程软件 的文章

 

随机推荐