关于I2C程序

关于I2C程序,第1张

AT的没有具体去看他的daatsheep

一般的 24都是允许一次性全部读出的只要你的时序没有问题

另外ack信号迟一点发送 不会影响读写的

你可以仔细看一下 at的 daatsheep看有没有256字节的限制.

普通的24是01-128字节 02=256字节...16=2047字节..

超过部分..器件会自动回到0地址处理,

/////////////////////////////////////////////

看了一下你,后面添加的程序.

如果你这样写.那么read_all那边就不需要用参数了.

因为如果读取,一般都是从0开始读取的..

另外x24c08_read如果是单字节读写函数.而且是正确的话

那么用

for (ii=0ii<4ii++)

{

for (iii=0iii<256iii++)

{

c=x24c08_read(ii,(uchar)iii)

SBUF=c

while (!TI)

这种方式的读取一定是没有问题.

有问题就是你的代码..或者你的eep本身坏了.

如果你感觉时许地上对的话..不妨看一下.

//////////////////////////////////

m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入数组xx传回。

最后调用函数writeDat()读取10组数据,分别得出结果且把结果输出到文件out.dat中。

部分源程序存在文件prog1.c中。

例如:若输入17 5 则应输出:19,23,29,31,37。

请勿改动主函数main()和写函数writeDat()的内容。

int isP(int m)

{

int i

for(i=2i<mi++)

if(m % i==0)return 0

return 1

}

void num(int m,int k,int xx[])

{ int s=0

for(m=m+1k>0m++)

if(isP(m))

}

*********************************

题目2

已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:如果四位数各位上的数字均是0或2或4或6或8,则统计出满足此条件的个数cnt,并把这些四位数按从大到小的顺序存入数组b中。最后main( )函数调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。

注意:部分源程序存在文件prog1.c中。

程序中已定义数组:a[200],b[200],已定义变量:cnt

请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。

void jsVal()

{ int i,j,qw,bw,sw,gw

for(i=0i<MAXi++)

{ qw=a[i]/1000bw=a[i]/100%10

sw=a[i]%100/10gw=a[i]%10

if(qw&&qw%2==0&&bw%2==0&&sw%2==0&&gw%2==0) b[cnt++]=a[i]

}

for(i=0i<cnt-1i++)

for(j=i+1j<cntj++)

if(b[i]<b[j])

}

*********************************★题目3

函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOR( ),其函数的功能是:以行为单位依次把字符串中所有小写字母o左边的字符串内容移到该串的右边存放,然后把小写字母o删除,余下的字符串内容移到已处理字符串的左边存放,之后把已处理的字符串仍按行重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文件OUT5.DAT中。

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

注意:部分源程序存放在文件prog1.c中。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

void StrOR(void)

{int i,righto,j,s,k

char tem[80]

for(i=0i<maxlinei++)

for(j=strlen(xx[i])-1j>=0j--)

{ k=0memset(tem,0,80)

if(xx[i][j]=='o')

{righto=j

for(s=righto+1s<strlen(xx[i])s++)

tem[k++]=xx[i][s]

for(s=0s<rightos++)

if(xx[i][s]!='o')

tem[k++]=xx[i][s]

strcpy(xx[i],tem)

}

else continue

}

} ★题目4

函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数StrOL(),其函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT6.DAT中。

例如:原文:You He Me

I am a student.

结果:Me He You

student a am I

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

部分源程序存在文件prog1.c中。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。

void StrOL(void)

{ int i,j,k,s,m,strl

char str[80]

for(i=0i<maxlinei++)

{ strl=strlen(xx[i])

memset(str,0,80)

s=k=0

for(j=strl-1j>=0j--)

{ if(isalpha(xx[i][j])) k++

else { for(m=1m<=km++)

str[s++]=xx[i][j+m]

k=0

}

if(!isalpha(xx[i][j]))

str[s++]=' '

}

for(m=1m<=km++)

str[s++]=xx[i][j+m]

str[s]='\0'

strcpy(xx[i],str) }

}

**********************************

☆题目5(整数排序题)

在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200个数存放到数组aa中。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位的大小进行升序排列,然后取出满足此条件的前10个数依次存入数组bb中,如果后三位的数值相等,则按原先的数值进行降序排列。最后调用函数WriteDat()把结果bb输出到文件out.dat中。

例:处理前 6012 5099 9012 7025 8088

处理后 9012 6012 7025 8088 5099

部分源程序存在文件prog1.c中。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

void jsSort()

{

int i,j,data

for(i=0i<199i++)

for(j=i+1j<200j++) if(aa[i]%1000>aa[j]%1000||aa[i]%1000==aa[j]%1000&&aa[i]<aa[j])

for(i=0i<10i++)

bb[i]=aa[i]

}

*********************************

☆题目6 正整数排序

在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200个数存放到数组aa中。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位的大小进行降序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则按原先的数值进行升序排列。最后调用函数WriteDat()把结果bb输出到文件out.dat中。

例:处理前 9012 5099 6012 7025 8088

处理后 5099 8088 7025 6012 9012

注意:部分源程序已给出。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

void jsSort()

{

int i,j,data

for(i=0i<199i++)

for(j=i+1j<200j++)

if(aa[i]%1000<aa[j]%1000||aa[i]%1000==aa[j]%1000&&aa[i]>aa[j])

for(i=0i<10i++)

bb[i]=aa[i]

}

题目37(字符替换题)

函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS7.DAT中。

替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符是大写字母或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。

部分源程序存在文件prog1.c中。原始数据文件存放的格式是:每行的宽度均小于80个字符。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

void encryptChar()

{ int i,j

for(i=0i<maxlinei++)

for(j=0j<strlen(xx[i])j++)

if(xx[i][j]*11%256<=32||xx[i][j]>='A'&&xx[i][j]<='Z') continue

else xx[i][j]=xx[i][j]*11%256

}

*******************************

★☆题目39(选票问题)

现有一个10个人100行的选票数据文件IN.DAT,其数据存放的格式是每条记录的长度均为10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推 :内容均为字符0和1,1表示此人被选中,0表示此人未被选中,全选或不选均为无效的选票。给定函数ReadDat()的功能是把选票数据读入到字符串数组xx中。请编制函数CountRs()来统计每个人的选票数并把得票数依次存入yy[0]到yy[9]中。把结果yy输出到文件OUT.DAT中。

部分源程序存在文件prog1.c中。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。

void CountRs(void)

{ int i,j,count

for(i=0i<100i++)

{ count=0

for(j=0j<10j++)

if(xx[i][j]=='1') count++

if(count==0||count==10) continue

for(j=0j<10j++)

if(xx[i][j]=='1') yy[j]++

}

}

******************************

☆题目41(SIX/NINE问题)

下列程序prog1.c的功能是:计算出自然数SIX和NINE,它们满足的条件是SIX+SIX+SIX=NINE+NINE的个数cnt以及满足此条件所有的SIX与NINE的和SUM。请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果cnt和sum,输出到文件OUT15.DAT中。

其中的S,I,X,N,E各代表一个十进制数字。

部分源程序存在文件prog1.c中。

请勿改动主函数main()和输出数据函数writeDat()的内容。

#include <stdio.h>

int cnt,sum

void countValue()

{ int s,i,x,n,e,six,nine

for(s=1s<10s++)

for(i=0i<10i++)

for(x=0x<10x++)

for(n=1n<10n++)

for(e=0e<10e++)

{ six=s*100+i*10+x

nine=n*1000+i*100+n*10+e

if(3*six==2*nine)

}

}

******************************

题目55(素数统计排序题)

已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出所有这些四位数是素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序,最后调用写函数writeDat()把结果输出到out.dat文件。

例如:5591是素数,则该数满足条件存入数组b中,且个数cnt=cnt+1。9812是非素数,则该数不满足条件忽略。

部分源程序存在文件prog1.c中。

程序中已定义数组:a[300],b[300],已定义变量:cnt

请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。

int isP(int m){

int i

for(i=2i<mi++)

if(m%i==0)return 0

return 1

}

jsValue()

{int i,j,value

for(i=0i<300i++)

if(isP(a[i])) b[cnt++]=a[i]

for(i=0i<cnt-1i++)

for(j=i+1j<cntj++)

if(b[i]>b[j])

}

*******************************

题目56(字符替换题)

函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS5.DAT中。

替代关系:f(p)=p*11mod 256 (p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或f(p)对应的字符是小写字母,则该字符不变,否则将f(p)所对应的字符进行替代。

部分源程序存在文件prog1.c中。原始数据文件存放的格式是:每行的宽度均小于80个字符。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

void encryptChar()

{ int i,j

for(i=0i<maxlinei++)

for(j=0j<strlen(xx[i])j++)

if(xx[i][j]*11%256<=32||xx[i][j]*11%256>='a'&&xx[i][j]*11%256<='z') continue

else xx[i][j]=xx[i][j]*11%256

}

因为开始读取完或者写完一组数据需要一个开始信号和一个终止信号,而这个信号就是数据线的上升下降沿。而后面数据线拉高的原因是为了能正确读取到数据,因为单片机如果是低电平外部器件很有可能不能拉高而一直读到低。手机纯打,往采纳。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11487589.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存