51单片机C语言编程题精选

51单片机C语言编程题精选
51单片机C语言编程题精选

51 C语言编程题精选

1、编程实现对键盘输入的英文名句子进行加密。用加密方法为,当内容为英文字母时其在

26字母中的其后三个字母代替该字母,若为其它字符时不变。

2、编程实现将任意的十进制整数转换成R进制数(R在2-16之间)。

3、从键盘输入一指定金额(以元为单位,如345.78),然后显示支付该金额的各种面额人

民币数量,要求显示100元、50元、10元、5元、2元、1元、5角、1角、5分、1分各多少张。(输出面额最大值:比如345.78=100*3+10*4+5*1+0.5*1+0.1*2+0.01*8)4、随机产生20个[10,50]的正整数存放到数组中,并求数组中的所有元素最大值、最小值、

平均值及各元素之和。

5、编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分

隔不同单词。

6、模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A、B、C、

D表示,当选某候选人时直接输入其编号(编号由计算机随机产生),若输入的不是A、B、

C、D则视为无效票,选举结束后按得票数从高到低输出候选人编号和所得票数。

7、任何一个自然数m的立方均可写成m个连续奇数之和。例如:

1^3=1

2^3=3+5

3^3=7+9+11

4^3=13+15+17+19

编程实现:输入一自然数n,求组成n3的n个连续奇数。

8、知abc+cba=1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有组合。

9、编制一个完成两个数的四则运算程序。如:用户输入34+56则输出结果90.00。要求运算结果保留两位小数,用户输入时一次将两个数和操作符输入。

10、输入一个五位以内的正整数,(1)判断它是一个几位数;(2)请按序输出其各位数字;(3)逆序输出其各位数字。

如输入:56439,输出:5位数

5,6,4,3,9

9,3,4,6,5

11、编写子函数:(1)用冒泡法将一个数组排成升序的函数---SUB1;(2)在升序数组中插入一个数,并且保持该数组仍为升序数组的函数---SUB2。

主函数:①输入任意10个正整数给数组;②调用SUB1对数组进行排序;③从键盘输入一个正整数,调用SUB2将其插入该数组。

12、编写函数:(1)用选择法将数组排成降序的函数----SUB1;(2)用折半查找法查找某数是否在给定的数组当中的函数----SUB2。

主函数:输入任意10个正整数给数组,调用SUB1对数组进行排序,从键盘输入一个正整数,调用SUB2在数组中进行查找,找到后输出“OK”,没有找到则输出“NO FOUND!”。

13、编写一个程序,输入两个包含5个元素的数组,先将两个数组升序排列,然后将这两个数组合并成一个升序数组。

14、耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。

15、按如下图形打印杨辉三角形的前10行。其特点是两个腰上的数都为1,其它位置上的每一个数是它上一行相邻两个整数之和。

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

……

16、某班有5个学生,三门课。分别编写3个函数实现以下要求:

(1)求各门课的平均分;

(2)找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩;

(3)找出三门课平均成绩在85-90分的学生,并输出其学号和姓名

主程序输入5个学生的成绩,然后调用上述函数输出结果。

17、编写一人个求X的Y次幂的递归函数,X为double型,y为int型,要求从主函数输入x,y的值,调用函数求其幂。

18、打印魔方阵。

所谓魔方阵是指这样的的方阵:

它的每一行、每一列和对角线之和均相等。

输入n,要求打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。

例如,当n=3时,魔方阵为:

8 1 6

3 5 7

4 9 2

魔方阵中各数排列规律为:

①将“1”放在第一行的中间一列;

②从“2”开始直到n×n为止的各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数同样加1;

③如果上一数的行数为1,则下一个数的行数为n(最下一行),如在3×3 方阵中,1在第1行,则2应放在第3行第3列。

④当上一个数的列数为n时,下一个数的列数应为1,行数减1。如2在第3行第3列,3应在第2行第1列。

⑤如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。如按上面的规定,4应放在第1行第2列,但该位置已被1占据,所以4就放在3的下面。由于6是第1行第3列(即最后一列),故7放在6下面。

19、找出一个二维数组中的“鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没有“鞍点”),打印出有关信息。

20、马克思在《数学手稿》中提出如下问题:有30个人(包括男人、女人和小孩)在一家饭店吃饭共花50先令,其中每个男人花3先令,每个女人花2先令,每个小孩花1先令,问男人、女人、小孩各有多少人?

21、定义一个结构体变量(包括年、月、日),计算该日在本年中为第几天?(注意考虑闰年问题),要求写一个函数days,实现上面的计算。由主函数将年月日传递给days函数,计算后将日子传递回主函数输出。

22、建立一个链表,每个结点包括:学号、姓名、性别、年龄,输入一个学号,如果链表中的结点包括该学号,则输出该结点内容后,并将其结点删去。

23、给定一个日期,求出该日为星期几(已知2002-3-28为星期四)。

24、用递归法将一个整数n转换成字符串(例如输入4679,应输出字符串“4679”),n 为不确定数,可以是位数不超过5,且数值在-32768~32767之间和任意整数。

25、有一个字符串,包括n个字符。写一个函数,将此字符串从第m个字符开始的全部字符复制成另一个字符串。要求在主函数输入字符串及m值并输出复制结果。

26、在主函数中输入6个字符串,用另一个函数对他们按从小到大的顺序,然后在主函数中输出这6个已经排好序的字符串。要求使用指针数组进行处理。

27、编写一个函数实现对两个字符串的比较。不用使用C语言提供的标准函数strcmp。要求在主函数中输入两个字符串,并输出比较的结果(相等的结果为0,不等时结果为第一个不相等字符的ASCII差值)。

28、有一个unsigned long型整数,先要分别将其前2个字节和后2个字节用为两个unsigned int型整数输出(设一个int型数据占2个字节),试编写一函数partition实现上述要求。要求在主函数输入该long型整数,在函数partition中输出结果。

29、编一程序,能把从终端读入的一个字符中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存(用字符!表示输入字符串的结束)。

30、有五个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人多少岁?他说比第3个人大2岁。问第3个人多少岁?他说比第3个人大2岁。问第2个人多少岁?他说比第1个人大2岁。最后问第1个人多少岁?他说是10岁。请问第5个人多大?(这是一个递归问题)

参考答案

1、编程实现对键盘输入的英文名句子进行加密。用加密方法为,当内容为英文字母时其在26字母中的其后三个字母代替该字母,若为其它字符时不变。

#include

main()

{char c;

printf("please input a string:");

while((c=getchar())!='\n')

{ if(c>='A'&&c<='W'||c>='a'&&c<='w') c=c+3;

else if(c>='X'&&c<='Z'||c>='x'&&c<='z') c=(c+3)-26;

printf("%c",c);

}

printf("\n");

return 0;

}

2、编程实现将任意的十进制整数转换成R进制数(R在2-16之间)。

#include

#include

void main()

{

int n,R,i=0,a[16]={0};

char str[16]="0123456789ABCDEF";

clrscr();

printf("please input an integer number:\n");

scanf("%d",&n);

printf("please input R:\n");

scanf("%d",&R);

if(n<0)

{

printf("%c",'-');

n=-n;

}

while(n!=0)

{

a[i++]=n%R;

n=n/R;

}

while(i-->0)

printf("%c",str[a[i]]);

getche();

}

3、从键盘输入一指定金额(以元为单位,如345.78),然后显示支付该金额的各种面额人民币数量,要求显示100元、50元、10元、5元、2元、1元、1角、5分、1分各多少张。#include

main()

{ int a1,a2,a3,a4,a5,a6,a7,a8,a9;

float f;

a1=a2=a3=a4=a5=a6=a7=a8=a9=0;

printf("please input a float number:");

scanf("%f",&f);

while(f>100.0)

{ f=f-100.0;

a1++;

}

while(f>50.0)

{ f=f-50.0;

a2++;

}

while(f>10.0)

{ f=f-10.0;

a3++;

}

while(f>5.0)

{ f=f-5.0;

a4++;

}

while(f>1.0)

{ f=f-1.0;

a5++;

}

while(f>0.5)

{ f=f-0.5;

a6++;

}

while(f>0.1)

{ f=f-0.1;

a7++;

}

while(f>0.05)

{ f=f-0.05;

a8++;

}

while(f>0.01)

{ f=f-0.01;

a9++;

}

printf("a1=%d, a2=%d, a3=%d, a4=%d, a5=%d, a6=%d, a7=%d, a8=%d, a9=%d\n",

a1,a2,a3,a4,a5,a6,a7,a8,a9);

return 0;

}

4、随机产生20个[10,50]的正整数存放到数组中,并求数组中的所有元素最大值、最小值、平均值及各元素之和。

#include

#include

void main()

{

int a[21],i,ran,max,min,sum,average;

clrscr();

for (i=1;i<=20;i++)

{

while((ran=random(51))/10==0) //ensure ran between 20 and 50 ;

a[i]=ran;

}

max=min=a[1]; // initialize here

sum=0;

for(i=1;i<=20;i++)

{

printf("a[%d]=%d\n",i,a[i]);

sum+=a[i];

if(max

max=a[i];

else if(min>a[i])

min=a[i];

}

average=sum/20;

printf("\nsum=%d, max=%d, min=%d, average=%d \n",sum,max,min,average);

puts("\nany key to exit!");

getche();

}

5、编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。

#include

#include

void main()

{

char string[80],*p;

int i=0,max=0;

clrscr();

printf("please input a string:\n");

gets(string);

// printf("\n%s\n",string);

p=string;

while(*p!='\0')

{

if(*p==' ')

{

if(max<=i)

max=i;

i=0;

}

else

i++;

p++;

}

if(max<=i)

max=i;

printf("\nmax_length of the string is: %d \n",max);

getche();

}

7、模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A、B、C、

D表示,当选某候选人时直接输入其编号(编号由计算机随机产生),若输入的不是A、B、

C、D则视为无效票,选举结束后按得票数从高到低输出候选人编号和所得票数。

#include

#include

#include

#include

void main()

{

int i,n,A,B,C,D,abandon,ran; //abandon stand for the ones who abandon

clrscr();

A=B=C=D=abandon=0;

printf("Enter the number of persons:");

scanf("%d",&n); //n persons to select from candidate a,b,c and d.

randomize();

for(i=1;i<=n;i++)

{

ran=random(5)+65; //A,B,C,D and the ones who abandon

switch(ran)

{

case 'A':A++;break;

case 'B':B++;break;

case 'C':C++;break;

case 'D':D++;break;

default :abandon++;

}

}

printf("\nA=%d,B=%d,C=%d,D=%d,abandon=%d\n\n",A,B,C,D,abandon);

i=4;

while(i--!=0)

{

if(A>=B&&A>=C&&A>=D&&A!=-1)

{

printf("A=%d,",A);

A=-1;

}

if(B>=A&&B>=C&&B>=D&&B!=-1)

{

printf("B=%d,",B);

B=-1;

}

if(C>=A&&C>=B&&C>=D&&C!=-1)

{

printf("C=%d,",C);

C=-1;

}

if(D>=A&&D>=B&&D>=C&&D!=-1)

{

printf("D=%d,",D);

D=-1;

}

}

printf("abandon=%d, \n\n",abandon);

getch();

}

7.任何一个自然数m的立方均可写成m个连续奇数之和。例如:1^3=1

2^3=3+5

3^3=7+9+11

4^3=13+15+17+19

编程实现:输入一自然数n,求组成n3的n个连续奇数。

#include

#include

#include //

void main()

{

int i,j,n,sum,count;

clrscr();

printf("\n an integer here please:");

scanf("%d",&n);

printf("\n");

// i=(int)floor(sqrt((float)n));

// if(i%2==0)

// i++;

i=1; //

for(;i<=n*n*n;i+=2)

{

sum=0;

count=0;

for(j=i;j<=n*n*n;j+=2)

{

sum=sum+j;

count++;

if((n*n*n==sum)&&(count==n))

break;

}

if((sum==n*n*n)&&(count==n))

break;

}

printf("i=%d,j=%d\n\n",i,j);

printf("%d*%d*%d=",n,n,n);

// while(n-->1) { printf("%d+",i); i+=2; }

for(;i

printf("%d+",i); //

printf("%d",i);

getch();

}

8、已知abc+cba=1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有组合。

#include

#include

void main()

{

int num,a,b,c;

clrscr();

printf("Press any key to calculate!\n\n");

getch();

for(num=101;num<1000;num++)

{

a=num/100;

b=num%100/10;

c=num%10;

if(num+c*100+b*10+a==1333)

printf("\n%d+%d=1333\n",num,c*100+b*10+a);

}

while(!kbhit()) ;

}

8、编制一个完成两个数的四则运算程序。如:用户输入34+56则输出结果90.00。要求运

算结果保留两位小数,用户输入时一次将两个数和操作符输入。

#include

#include

void main()

{

float num1,num2;

char s;

clrscr();

printf("Enter a statement please:");

scanf("%f%c%f",&num1,&s,&num2);

switch(s)

{

case '+':printf("%.2f%c%.2f=%.2f",num1,s,num2,num1+num2);break;

case '-':printf("%.2f%c%.2f=%.2f",num1,s,num2,num1-num2);break;

case '*':printf("%.2f%c%.2f=%.2f",num1,s,num2,num1*num2);break;

case '/':printf("%.2f%c%.2f=%.2f",num1,s,num2,num1/num2);break;

default: printf("Input Error!");

}

getch();

}

9、输入一个五位以内的正整数,(1)判断它是一个几位数;(2)请按序输出其各位数字;

(3)逆序输出其各位数字。

如输入:56439,输出:5位数

5,6,4,3,9

9,3,4,6,5

#include

#include

long power(int n)

{

int i;

long result=1;

for(i=1;i<=n;i++)

result=10*result;

return result;

}

void main()

{

long num,n,j;

int count=1,tmpcount;

clrscr();

printf("Please input a number(0-99999):");

scanf("%ld",&num);

n=num;

while((n=n/10)!=0)

count++;

printf("\n%ld is a %d digits.\n\n",num,count);

tmpcount=count; //temporary tmpcount for later use in statement A

n=num;

while(count-->1)

{

j=power(count);

printf("%d, ",n/j);

n=n%j;

}

printf("%d\n",n);

n=num;

while(tmpcount-->1) // statement A

{

printf("%d, ",n%10);

n=n/10;

}

printf("%d\n",n);

getch();

}

10、编写子函数:(1)用冒泡法将一个数组排成升序的函数---SUB1;(2)在升序数

组中插入一个数,并且保持该数组仍为升序数组的函数---SUB2。主函数:①输入任意10个正整数给数组;②调用SUB1对数组进行排序;③从键盘输入一个正整数,调用SUB2将其插入该数组。

#include

#include

void main()

{

int i,k,a[12]={0}; //a[0] for no use

void sub1(int b[]),sub2(int b[],int k);

clrscr();

printf("Please input 10 numbers:");

for(i=1;i<=10;i++)

scanf("%d",&a[i]);

getchar();

sub1(a);

for(i=1;i<=10;i++)

printf("\na[%d]=%d\n",i,a[i]);

printf("\n\nplease input a number to be inserted into the array:");

scanf("%d",&k);

sub2(a,k);

for(i=1;i<=11;i++)

printf("\na[%d]=%d\n",i,a[i]);

puts("\nAny key to exit!");

getch();

}

void sub1(b)

int b[];

{

for (i=1;i<10;i++) //the first one is always the smallest

for(j=i;j<=10;j++)

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

{

t=b[i];

b[i]=b[j];

b[j]=t;

}

}

void sub2(int b[],int k)

{

int i;

for(i=10;i>=1;i--)

{

if(k

b[i+1]=b[i];

else

{

b[i+1]=k;

break;

}

}

}

11、编写函数:(1)用选择法将数组排成降序的函数----SUB1;(2)用折半查找法查

找某数是否在给定的数组当中的函数----SUB2。主函数:输入任意10个正整数给数组,调用SUB1对数组进行排序,从键盘输入一个正整数,调用SUB2在数组中进行查找,找到后输出“OK”,没有找到则输出“NO FOUND!”。

#include

#include

void main()

{

int i,key,a[11]={0},sub1(),sub2();

printf("please input 10 number: ");

for(i=1;i<=10;i++)

scanf("%d",&a[i]);

getchar();

sub1(a);

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

printf("a[%d]=%d ,",i,a[i]);

printf("\n please input a key number: ");

scanf("%d",&key);

sub2(a,key,1,10);

}

int sub1(int b[])

{

int t,i,j,post;

for (i=1;i<10;i++)

{

post=i;

for(j=i+1;j<=10;j++)

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

post=j;

if(post!=i)

{

t=b[i];

b[i]=b[post];

b[post]=t;}

}

return 0;

}

int sub2(int c[],int k,int n0,int n1)

{

int i=n0,j=n1,m;

m=(i+j)/2;

while(i<=j)

{

if(k

j=m-1;

if(k>c[m])

i=m+1;

if(k==c[m])

break;

m=(i+j)/2;

}

if(k==c[m])

printf("OK!\n") ;

else

printf("NO FOUND!\n");

return 0;

}

12、编写一个程序,输入两个包含5个元素的数组,先将两个数组升序排列,然后将这

两个数组合并成一个升序数组。

#include

#include

void main()

{

int i,j,k,a[6]={0},b[6]={0},c[11]={0},sub1(); clrscr();

printf("\nplease input 5 int numbers to array1: "); for(i=1;i<=5;i++) //a[0] for no use

scanf("%d",&a[i]);

getchar();

sub1(a,5);

printf("\nplease input 5 int numbers to array2: "); for(i=1;i<=5;i++) //b[0] for no use

scanf("%d",&b[i]);

getchar();

sub1(b,5);

printf("\nthe sorted array a is:\n\n");

for(i=1;i<=5;i++)

printf("a[%d]=%d ",i,a[i]);

printf("\n");

printf("\nthe sorted array b is:\n\n");

for(i=1;i<=5;i++)

printf("b[%d]=%d ",i,b[i]);

k=i=j=1;

while(i<=5&&j<=5)

if(a[i]

c[k++]=a[i++]; //c[0] for no use

else

c[k++]=b[j++];

if(i

for(;i<=5;i++)

c[k++]=a[i];

else //appending the rest ones in array b

for(;j<=5;j++)

c[k++]=b[j];

printf("\n\n");

printf("\nthe merged array c is:\n\n");

for(k=1;k<=10;k++)

{

if(k==6)

printf("\n");

printf("c[%d]=%d ",k,c[k]);

}

while(!kbhit());

}

int sub1(int b[],int n)

{

int t,i,j,post;

for(i=1;i

{

post=i;

for(j=i+1;j<=n;j++)

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

post=j;

if(post!=i) j

{ j

t=b[i];

b[i]=b[post];

b[post]=t;

}

}

return 0;

}

13、耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:

13人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。

/*

// approach one

#define N 13

#include

#include

struct person

{

int number; //its order in the original circle

int nextp; //record its next person

};

struct person link[N+1]; //link[0] for no use

void main()

{

int i,count,next; //count for 12 persons,and

//next for the person not out of circle yet

clrscr();

for (i=1;i<=N;i++)

{

link[i].number=i; //numbering each person

if(i==N)

link[i].nextp=1;

else

link[i].nextp=i+1; //numbering each next person

}

printf("\nThe sequence out of the circle is:\n");

for(next=1,count=1;count

i=1;

while (i!=3) //i counts 1,2,3

{

do //skip the ones whose numbers are zero

next=link[next].nextp;

while(link[next].number==0); //end of do

i++;

}

printf("%3d ",link[next].number);

link[next].number=0; //indicate out of circle already

do //start from the ones whose numbers are not zero next time next=link[next].nextp;

while(link[next].number==0);

}

printf("\n\nThe betrayer of them is:");

for(i=1;i<=N;i++)

if(link[i].number)

printf("%3d\n",link[i].number);

getch();

}

*/

// approach two using cyclic list

#define N 13

#define LEN sizeof(struct person)

#include

#include

#include

#include

// struct person //permit struct placed here//

// {

// int number;

// struct person *next;

// };

void main()

{

int i,count;

struct person //or permit struct placed here also//

{

int number;

struct person *next;

};

struct person *head,*p1,*p2;

clrscr();

head=p2=NULL;

for(i=1;i<=N;i++)

{

p1=(struct person *)malloc(LEN);

p1->number=i;

if(head==NULL)

head=p1;

else

p2->next=p1;

p2=p1;

}

p2->next=head;

printf("\nthe sequence out of the circle is:\n");

for (count=1;count

{

i=1;

while(i!=3)

{

p1=head;

head=head->next;

i++;

}

p2=head;

printf("%3d ",p2->number);

p1->next=head=p2->next;

free(p2);

}

printf("\nThe betrayer of them is:\n%3d",head->number);

getch();

}

15、按如下图形打印杨辉三角形的前10行。其特点是两个腰上的数都为1,其它位置上的每一个数是它上一行相邻两个整数之和。

1

2 1

2 2 1

2 3 3 1

2 4 6 4 1

……

#include

#include

#define N 10

void main()

{

int i,j,k,a[N][N];

clrscr();

for(i=0;i

{

a[i][0]=1;

a[i][i]=1;

}

for(i=2;i

for(j=1;j

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=0;i

{

for(k=0;k<=3*(N-i);k++)

printf(" ");

for(j=0;j<=i;j++)

printf("%6d",a[i][j]);

printf("\n\n");

}

getch();

}

16、某班有5个学生,三门课。分别编写3个函数实现以下要求:

(1)求各门课的平均分;

(2)找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩;(3)找出三门课平均成绩在85-90分的学生,并输出其学号和姓名

主程序输入5个学生的成绩,然后调用上述函数输出结果。

#define SNUM 5 /*student number*/

#define CNUM 3 /*course number*/

#include

#include

/*disp student info*/

void DispScore(char num[][6],char name[][20],float score[][CNUM])

{

int i,j;

printf("\n\nStudent Info and Score:\n");

for(i=0;i

{

printf("%s ",num[i]);

printf("%s ",name[i]);

for(j=0;j

printf("%8.2f",score[i][j]);

printf("\n\n");

}

}

/*calculate all student average score*/

void CalAver(float score[][CNUM])

{

float sum,aver;

int i,j;

for(i=0;i

{

sum=0;

for(j=0;j

sum=sum+score[j][i];

aver=sum/SNUM;

printf("Average score of course %d is %8.2f\n",i+1,aver); }

}

/*Find student: two courses no pass*/

void FindNoPass(char num[][6],float score[][CNUM]) {

int i,j,n;

printf("\nTwo Course No Pass Students:\n");

for(i=0;i

{

n=0;

for(j=0;j

if(score[i][j]<60)

n++;

if(n>=2)

{

printf("%s ",num[i]);

for(j=0;j

if(score[i][j]<60)

printf("%8.2f",score[i][j]);

printf("\n");

}

}

}

/*Find student: three courses 85-90*/

void FindGoodStud(char num[][6],char name[][20],float score[][CNUM])

{

int i,j,n;

printf("\nScore of three courses between 85 and 90:\n");

for(i=0;i

{

n=0;

for(j=0;j

if(score[i][j]>=85&&score[i][j]<=90)

n++;

if(n==3)

printf("%s %s\n",num[i],name[i]);

}

}

/*input student info*/

void main()

{

char num[SNUM][6],name[SNUM][20]; //array num refers to student number

float score[SNUM][CNUM]; //and its length is 6

int i,j;

clrscr();

printf("\nPlease input student num and score:\n");

for(i=0;i

{

printf("\n\nStudent%d number: ",i+1);

scanf("%s",num[i]);

printf("\nStudent%d name: ",i+1);

scanf("%s",name[i]);

printf("\nStudent%d three scores: ",i+1);

for(j=0;j

scanf("%f",&score[i][j]);

}

DispScore(num,name,score);

CalAver(score);

FindNoPass(num,score);

FindGoodStud(num,name,score);

getch(); }

17、编写一人个求X的Y次幂的递归函数,X为double型,y为int型,要求从主函数输入x,y的值,调用函数求其幂。

#include

#include

double fact(double x,int y)

{

if(y==1)

return x;

else

return x*fact(x,y-1);

}

void main()

{

double x;

int y;

clrscr();

printf("\nPlease x,y:");

scanf("%lf%d",&x,&y);

printf("\nx^y=%.2lf",fact(x,y));

getch();

}

18、打印魔方阵。

所谓魔方阵是指这样的的方阵:

它的每一行、每一列和对角线之和均相等。

输入n,要求打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。

例如,当n=3时,魔方阵为:

8 1 6

3 5 7

4 9 2

魔方阵中各数排列规律为:

①将“1”放在第一行的中间一列;

②从“2”开始直到n×n为止的各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数同样加1;

③如果上一数的行数为1,则下一个数的行数为n(最下一行),如在3×3 方阵中,1在第1行,则2应放在第3行第3列。

④当上一个数的列数为n时,下一个数的列数应为1,行数减1。如2在第3行第3列,3应在第2行第1列。

⑤如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。如按上面的规定,4应放在第1行第2列,但该位置已被1占据,所以4就放在3的下面。由于6是第1行第3列(即最后一列),故7放在6下面。

#include

#include

#define Max 15

void main()

{

int i,row,col,odd;

int m[Max][Max];

51单片机期末备考试题(有答案)1

卷一(答案在题后) 一、填空题(23分,每空1分) 1. MCS-51系列单片机为__位单片机 2. AT89S51有__级优先级中断,__个中断源 3. AT89S51单片机指令系统的寻址方式有___、___、___、___、___、___。 4. 如果(A)=34H,(R7)=0ABH,执行XCH A, R7;结果(A)= ___,(R7)= ___ 5. 74LS138是具有3个输入的译码器芯片,其输出作为片选信号时,最多可以选中__片芯片。 6. 若A中的内容为67H,那么,P标志位为__ 7.半导体存储器分成两大类:__和__,其中__具有易失性,常用于存储临时性数据 8.求十进制数-102的补码(以2位16进制数表示),该补码为__ 9.8051内部有__个并行口,__口直接作输出口时,必须外接上拉电阻;并行口作输入口时,必须先将口锁存器置__,才能读入外设的状态。 10.通过CPU对i/o状态的测试,只有i/o已准备好时才能进行i/o传送,这种传送方式称为_______ 11.已知fosc=12MHz,T0作为定时器使用时,其定时时间间隔为___1us 12.若AT89S51外扩8KB 程序存储器的首地址若为1000H,则末地址为__H 2FFF 13. 在R7初值为00H的情况下,DJNZ R7,rel指令将循环执行__次 答案: 1. 8 2. 2 5 3.寄存器寻址直接寻址寄存器间接寻址立即寻址基址寄存器寻址变址寄存器寻址 4. 0ABH 34H 5. 8 6. 1 7. RAM ROM RAM 8. 9AH 9. 4 P0 1 10.程序查询方式 11. 1us 12. 2FFF 13. 256 学海无涯苦作舟,祝你学业有成。

山东大学单片机原理与应用期末试卷与答案

一、填空 1、MCS51 单片机的控制信号线有 2、MCS51 单片机内部RAM 的位寻址空间有位,位寻址空间对 应的字节地址为,位地址为 3、MCS51 单片机并行口P0的用途是 P2 口的用途是 4、指令MOV P1,@R0 中两操作数的寻址方式分别是 5、2764 为芯片,地址线条,可扩展K 空 间,地址从0000H 至H 6、外部中断INT1 的中断入口地址为,在同级 优先级中串行口中断的优先级排在第位。 7 定时/ 计数器有四种工作方式:方式0 的功能 为:,方式 1 的功能 为:,方式2 的功能为: ,方式3 的功能为: 8、若晶振为12MHz,则一个机器周期为:,一条双字节单周 期指令的执行时间是。 9、MCS51 单片机的堆栈设置在区内,堆栈的最深深度为 字节。 二、请写出完成下列功能的指令(可用多条语句实现) 1、将R0 内容送入R7 2、将位地址50H 内容送入SMOD 位 3、将外部EPROM 1000H 单元内容送入外部RAM 3000H 单元

4、用单条指令完成累加器ACC 清零,有几种方法。 5、设RS1=0,RS0=1,将R1 内容入栈 三、读程序,填写执行结果 1、MOV 40H,#36H MOV R0,#40H MOV A,@R0 SETB C ADDC A,#0F9H C AC F0 RS1 RS0 OV P 2、MOV SP,#50H MOV DPTR,#1050H MOV A,#88H PUSH DPL PUSH DPH PUSH ACC POP DPL POP DPH POP ACC 3、MOV A,#40H SWAP A INC A MOVC A,@A+PC S0: AJMP S0 TAB: DB 10H,11H,12H,13H,14H,15H DB 16H,17H,18H,1AH,19H,1BH 四、程序设计 编程序完成下列逻辑功能 F ABC ( A C) B

[业务]51单片机期末考试试卷及答案2

[业务]51单片机期末考试试卷及答案2 一、填空题 1、设X=5AH,Y=36H,则X与Y“或”运算为7EH,X与Y的“异或”运算为 6CH。 2、若机器的字长为8位,X=17,Y=35,则X,Y=110100,X,Y=11101110(要求 结果写出二进制形式)。 3、单片机复位后,堆栈指针SP的值是07h。 4、若采用6MHz的晶体振荡器,则MCS-51单片机的振荡周期为1/6us,机器周期为2us。 5、一个函数由两部分组,即说明部分和语句部分。 6、C语言中输入和输出操 作是由库函数scanf和printf等函数来完成。 7.当MCS-51引脚 ALE 信号有效时,表示从Po口稳定地送出了低8位地址. 8.MCS-51的堆栈是软件填写堆栈指针临时在_片内数据存储_器内开辟的区域. 9.MCS-51有4组工作寄存器,它们的地址范围是 00H-1FH 。 10.MCS-51片内 20H-2FH 范围内的数据存储器,既可以字节寻址又可以位寻址. 11.计算机的系统总线有数据总线、地址总线、控制总线。 12.一个机器周期等于 6个状态周期,振荡脉冲2分频后产生的时钟信号的周期定义为状态周期。 13、单片机的复位操作是_高电平,寄存器IE的值是_EA、ES、ET1、EX1、 ET0、EX0_。 14、若选择内部程序存储器,应该设置为高电平(高电平/低电平),那么,PSEN信号的处理方式为不用。 15、单片机程序的入口地址是0000H ,外部中断1的入口地址是0013H 。 16、片机的内部RAM区中,可以位寻址的地址范围是20H-2FH ,特殊功能寄存器中,可位寻址的地址是能被8整除的地址。

51单片机原理及应用期末考试试题汇总7

一、选择题 从下列各题4个备选答案中选出一个或二个正确答案 并将其代号写在题干后面的括号内。 1、8051基本型单片机内部程序存储器容量为 C 。 A、16KB B、8KB C、4KB D、128B 2、8051基本型单片机内部RAM容量为D。 A、16KB B、8KB C、4KB D、128B 3、当优先级的设置相同时 若以下几个中断同时发生 A 中断优先响应。 A、外部中断0 B、T1 C、串口 D、T0 4、在80C51单片机应用系统中 可以作为时钟输出的是 C 引脚。 A、EA B、RST C、ALE D、PSEN 5、当CPU响应外部中断1 的中断请求后 将自动转向 B 。 A、0003H B、0013H C、000BH D、001BH 6、为了能够使MCS-51单片机在正常工作中及时服务于多个外设 以下传送方式最适用的是 D 。 A、异步 查询 传送 B、同步 无条件 传送 C、DMA传送 D、中断传送 7、已知1只共阴极LED显示器 其中a笔段为字形代码的最低位 若需显示数字1 它的字形代码应为(A )。A、06H B、0F9H C、30H D、0CFH 8、已知1只共阳极LED显示器 其中a笔段为字形代码的最低位 若需显示小数点“.” 它的字形码应为(A)。A、7FH B、0F9H C、30H D、80H 9、已知1只共阴极LED显示器 其中a笔段为字形代码的最低位 若需显示小数点“.”共阳极 它的字形码应为(A )。A、80H B、0F9H C、30H D、7FH 10、下列数据字定义的数表中 (C、D)是错误的。 A、DW “AA” B、DW “A” C、DW “OABC” D、DW 1ABC2H 11、若P1口接有一个4×4的行列键盘 则P1口一定有 C、D 。 A、8位输入口 B、8位输出口 C、4位输入口 D、4位输出口 12、以下指令中能够产生WR信号的是 B、D 。 A、MOV @R0,A B、MOVX @R0,A C、MOVX A @DPTR D、MOVX @DPTR,A 13、8031单片机的定时器T1用作定时方式时是 A、B 。 A、以内部时钟频率为定时基准 12个时钟周期加1 B、以内部时钟频率为定时基准 1个机器周期加1 C、以外部脉冲为定时基准 12个脉冲加1 D、以外部脉冲为定时基准 每个脉冲加1 14、DAC0832在单片机系统中是一种 B、D 器件。 A、输入 B、输出 C、将数字量转换成模拟量 D、将模拟量转换成数字量 15、家用电器中使用的单片机应属于计算机的 B 。 A、辅助设计应用B.测量、控制应用C.数值计算应用 D.数据处理应用 16、对程序存储器的读操作 只能使用 D 。 A MOV指令 B. PUSH指令 C. MOVX指令 D. MOVC指令 17、若82C55的PC口接有一个4×4的行列键盘 则PC口一定有 C、D 。 A、8位输入口 B、8位输出口 C、4位输入口 D、4位输出口 18、下列说法正确的是 A、B 。 A、立即数寻址方式是操作数本身就在指令中 而不是它的地址在指令中。

51单片机原理期末考试题

1.若累加器A中的数据为67H,则PSW中的P=_1__。 2. 一个机器周期= _6_个状态周期=12个振荡周期。 3.89C51的堆栈是按照先进后出的原则进行存取的RAM区。 4. 用一条指令实现以下功能: 若A中数据不等于200,则程序转至PROM_ CJNZ A,#200H,PROM__。 5. 为了使10H—17H作工作寄存器使用RS1, RS0的取值为__1,0。 6. 89C51中21个特殊功能寄存器,其地址凡是能被8整除的都有位寻址功能。 7. 89C51单片机有片内ROM容量_4KB , RAM容量128。 8. 某串行通信中有1个起始位,8个数据位和1个停止位,应选择的异步串行通信方式为方式1。 9. 在89C51单片机初始化时,SP存放的是07H。 10. 当89C51引脚ALE信号有效时,表示从P0口稳定地送出了_数据和地信息。 四、判断题(每小题2分,共20分) 1.如果发生除法溢出错误,则PSW标志位P置1。(∨) 5.对于89C51单片机,当CPU对内部程序存储器寻址超过4K时,系统会自动在外部程序存储器中寻址(∨)。 6.外加晶振频率越高,系统运算速度也就越快,系统性能也就越好(∨)。 7. 位TF0是定时器T1的溢出中断标志位。(∨) 8.在定时器T0和外部中断1都设为高优先级时,外部中断1优先级高于定时器T0。(×) 9.子程序的返回指令是RETI ,中断程序的返回指令是RET。(×) 10.波特率是数据传输的速率,指每秒传送的字节数。(∨) 3、51有 5个中断源,有2个中断优先级,优先级由软件填写特殊功能寄存器 IP 加以选择 4、中断请求信号有电平触发和脉冲触发两种触发方式。 6、74LS273通常用来作简单输出接口扩展;而74LS244则常用来作简单输入接口扩展。 7、A/D转换器的三个重要指标是转换速度、分辨率和转换精度。 二、选择题(从备选答案中选择一个正确答案,并将代号写在括号内。每题2分,共10分) 1、MCS-51单片机外扩存储器芯片时,4个I/O口中用作数据总线的是( B )。 (A)P0和P2口(B)P0口(C)P2和P3口(D)P2口 2、访问外部数据存储器时,不起作用的信号是( C )。 (A)RD (B) WR (C) PSEN (D)ALE 3、使用定时器T1时,有几种工作模式( C )。 (A)1种(B)2种(C)3种(D)4种 4、MCS-51响应中断时,下面哪一个条件不是必须的( C )。 A、当前指令执行完毕 B、中断是开放的 C、没有同级或高级中断服务 D、必须有RETI指令 5、当MCS-51进行多机通讯时,串行接口的工作方式应选为( C )。 (A)方式0 (B)方式1 (C)方式2 (D)方式0或方式2 三、简答题(每题15分,共30分) 1、MCS-51单片机内部有几个定时/计数器?它们由哪些寄存器组成? 答:MCS-51单片机内部有两个16位可编程的定时/计数器,简称定时器0(T0)和定时器1(T1)。它们分别由方式寄存器TMOD、控制寄存器TCON和数据寄存器TH0、TL0,TH1、TL1组成。

山东大学单片机原理与应用期末试卷及答案

一、填空 1、MCS51单片机的控制信号线有 2、MCS51单片机内部RAM的位寻址空间有位,位寻址空间对 应的字节地址为,位地址为 3、MCS51单片机并行口P0的用途是 P2口的用途是 4、指令MOV P1,@R0中两操作数的寻址方式分别是 5、2764为芯片,地址线条,可扩展K空 间,地址从0000H至H 6、外部中断INT1的中断入口地址为,在同级 优先级中串行口中断的优先级排在第位。 7定时/计数器有四种工作方式:方式0的功能为:,方式1的功能 为:,方式2的功能为: ,方式3的功能为: 8、若晶振为12MHz,则一个机器周期为:,一条双字节单周 期指令的执行时间是。 9、MCS51单片机的堆栈设置在区内,堆栈的最深深度为 字节。 二、请写出完成下列功能的指令(可用多条语句实现) 1、将R0内容送入R7 2、将位地址50H内容送入SMOD位 3、将外部EPROM 1000H单元内容送入外部RAM 3000H 单元

4、用单条指令完成累加器ACC 清零,有几种方法。 5、设RS1=0,RS0=1,将R1内容入栈 三、 读程序,填写执行结果 1、 MOV 40H,#36H MOV R0,#40H MOV A,@R0 SETB C ADDC A,#0F9H C AC F0 RS1 RS0 OV P 2、 MOV SP,#50H MOV DPTR,#1050H MOV A,#88H PUSH DPL PUSH DPH PUSH ACC POP DPL POP DPH POP ACC 3、 MOV A,#40H SWAP A INC A MOVC A,@A+PC S0: AJMP S0 TAB: DB 10H,11H,12H,13H,14H,15H DB 16H,17H,18H,1AH,19H,1BH 四、 程序设计 编程序完成下列逻辑功能 B C A ABC F ?+?=)(

51单片机C语言程序设计复习资料

2013-2014学年上期51单片机C语言程序设计重修复习提纲考试方式:闭卷考试。 考试题型: 填空题(每空1分,共18分);单项选择题(每空2分,共18分);问答及计算题(每题4分,共16分);编程及程序阅读题(5小题,共48分)。 考试分数: 卷面成绩70%+平时成绩15%+实验成绩15%,未缺席、无课堂违纪、作业全交且认真完成的同学平时成绩可获得满分,缺席一次平时成绩扣30分,实验好评次数3次以上且实验报告全优的同学实验成绩可得满分,实验缺席一次扣30分。缺席实验和旷课共3次以上者,无考试资格。 考试时间: 18周周一(12月30日)下午14:00:16:00,考试地点:具体考室另行通知希望大家认真复习,认真听讲,不懂就问,考试成绩不及格允许查卷,如查卷卷面批阅无误成绩不做更改。 编程题为实验或实验类似的题目有3题,其余2题也取自课堂讲授例题,请务必认真复习。第一章单片机概述及单片机知识回顾 掌握什么是单片机、单片机的应用、常见单片机类型、十进制、十六进制、二进制数制转换知识。掌握单片机的硬件组成、CPU的结构、程序计数器PC的功能、存储器结构、机器周期的计算、会画出单片机的最小系统电路图及回答单片机最小系统的组成。 第二章C51语言程序设计基础(本章填空题和选择题比重较大请务必认真复习)掌握C51语言进行软件开发与汇编语言相比的优点、掌握C51的数据类型、特殊功能位的定义、C51的基本运算(位运算重点复习)、数组的定义、C51的结构及函数。 第三章AT89S51片内并行端口及编程(本章有编程题) 掌握P0-P3并行端口的特点,会开关量检测及流水灯程序的编程。 第四章AT89S51单片机的中断系统(本章有编程题) 掌握中断系统的结构、中断请求响应被满足的条件、外部中断的触发选择方式、外部中断的使用与编程。 第五章AT89S51单片机的定时器/计数器(本章有编程器) 掌握定时器的结构,TOMD及TCON的使用,定时器方式0和方式1的特点、会计算定时器初值,会用定时器中断产生PWM波形,会用定时器对外部事件进行计数。 第六章AT89S51单片机的串行口(本章有计算题) 掌握串行通信的基础知识(课本没有的内容请参照课堂讲授笔记或PPT)、串行口的四种工作方式的特点、会计算奇偶校验码、会根据波特率计算T1的初值。 第七章AT89S51单片机与输入/输出外设接口(本章有编程题) 掌握数码管动态显示的原理、掌握矩阵式键盘的原理与编程(矩阵键盘编程必考,但不会考4X4键盘)。 第八章AT89S51单片机与D/A与A/D转换器的接口(本章有编程题) 掌握AD与DA转换的接口、ADC和DAC的技术指标、常用AD和DA转换器。掌握ADC0809和TLC2543的使用与编程(2器件其中之一有编程题)。 第九章AT89S51单片机应用系统与调试(本章有编程题) 掌握单片机应用系统的软件抗干扰方法。

单片机期末考试试题

物理与电气工程学院C51单片机试卷4 一、填空题(每小题1分,共45分) 1、串行口方式2接收到的第9位数据送寄存器的位中保存。 2、MCS-51系列单片机为位单片机。 3、8031的中断源有、、、、、有个中断优先级。 4、MCS-51系列单片机的典型芯片分别为、、。 5、利用8255A可以扩展个并行口,其中条口线具有位操作功能。 6、由8031组成的单片机系统在工作时,EA引脚应该接。 7、串行口的方式0的波特率为。 8、8031内部有___________个定时器,___________个并行口和___________个串行口。 9、8031的异步通信口为(单工/半双工/全双工),若传送速率为每秒120帧,每帧10位,则波特率为____ 。 10、8031的口为双功能口。 11、8031的口为高8位地址总线口。 12、欲使P1口的低4位输出0,高4位不变,应执行一条命令。 13、KeiL C51软件中,工程文件的扩展名是__________,编译连接后生成可烧写的文件扩展名是____________。 14、MCS-51单片机中,在IP=0x00时,优先级最高的中断是_______________,最低的是___________。 15、MCS—51单片机的P0—P4口均是并行 I/O口,其中的P0口和P2口除了可以进行数据的输入、输出外,通常还用来构建系统的和,在P0—P4口中,为真正的双向口,为准双向口。 16、MCS—5l单片机的堆栈区只可设置在存储区(器)。 17、单片机的复位操作是__________(高电平/低电平),单片机复位后,中断允许寄存器IE的值是________。 18、8255A内部控制电路还可以分成两组:A组和B组。其中A组控制的对象是,B 组控制的对象是。 19、若采用6MHz的晶体振荡器,则MCS-51单片机的振荡周期为________,机器周期为 ____________。 20、A/D芯片选择最主要的参数是__________和_____________。 21、C51定义可寻址位,使用关键字为___ _ 。 25、变量tmp=0x15,经运算tmp>>=4;后的tmp值为___ _ 。 26、C51数组的下标是从__ __开始的。

51单片机C语言入门教程详细解说

单片机c语言入门 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没 什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。 当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具 体选择C51还是A51呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学C51,毕竟C51和我们课上讲的C语言,有些类似, 编程的思想可以说是相通的。而且C51还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看,如果你选择了A51,那么你可以不要看了!因为下面讲 的全是C方面的,完全在浪费你的时间! 呵呵^_^ 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使

51单片机原理及应用期末考试试题汇总6

广西工学院2010—2011 学年第2 学期课程考核试题 考核课程单片机技术(B卷)考核班级通信081,082 考核类型闭卷学生人数80人打印份数85份 一、填空题(每小题2分,共20分) 1.若累加器A中的数据为67H,则PSW中的P=_1__。 2. 一个机器周期=_6_个状态周期=12个振荡周期。 3.89C51的堆栈是按照先进后出的原则进行存取的RAM区。 4. 用一条指令实现以下功能: 若A中数据不等于200,则程序转至PROM_ CJNZ A,#200H,PROM__。 5. 为了使10H—17H作工作寄存器使用RS1,RS0的取值为__1,0。 6. 89C51中21个特殊功能寄存器,其地址凡是能被8整除的都有位寻址功能。 7. 89C51单片机有片内ROM容量_4KB , RAM容量128。 8. 某串行通信中有1个起始位,8个数据位和1个停止位,应选择的异步串行通信方式为方式1。 9. 在89C51单片机初始化时,SP存放的是07H。 10. 当89C51引脚ALE信号有效时,表示从P0口稳定地送出了_数据和地信息。 四、判断题(每小题2分,共20分) 1.如果发生除法溢出错误,则PSW标志位P置1。(∨) 5.对于89C51单片机,当CPU对内部程序存储器寻址超过4K时,系统会自动在外部程序存储器中寻址(∨)。 6.外加晶振频率越高,系统运算速度也就越快,系统性能也就越好(∨)。 7. 位TF0是定时器T1的溢出中断标志位。(∨) 8.在定时器T0和外部中断1都设为高优先级时,外部中断1优先级高于定时器T0。(×)9.子程序的返回指令是RETI ,中断程序的返回指令是RET。(×) 10.波特率是数据传输的速率,指每秒传送的字节数。(∨) 3、51有5个中断源,有2个中断优先级,优先级由软件填写特殊功能寄存器IP 加以选择 4、中断请求信号有电平触发和脉冲触发两种触发方式。 6、74LS273通常用来作简单输出接口扩展;而74LS244则常用来作简单输入接口扩展。 7、A/D转换器的三个重要指标是转换速度、分辨率和转换精度。 二、选择题(从备选答案中选择一个正确答案,并将代号写在括号内。每题2分,共10分) 1、MCS-51单片机外扩存储器芯片时,4个I/O口中用作数据总线的是( B )。 (A)P0和P2口(B)P0口(C)P2和P3口(D)P2口 2、访问外部数据存储器时,不起作用的信号是( C )。 (A)(B)(C)(D)ALE 3、使用定时器T1时,有几种工作模式( C )。 (A)1种(B)2种(C)3种(D)4种 4、MCS-51响应中断时,下面哪一个条件不是必须的( C )。 A、当前指令执行完毕 B、中断是开放的 C、没有同级或高级中断服务 D、必须有RETI 指令 5、当MCS-51进行多机通讯时,串行接口的工作方式应选为( C )。

单片机C语言期末考精彩试题

单片机C语言期末考试题(A) 一、单项选择题:40 分 1、MCS-51系列的单片机中片内RAM的字节大小可能的是() A、128M B、128K C、128 D、64 2、C51语言提供的合法的数据类型关键字是()。 A、sfr B、BIT C、Char D、integer r 3、片内RAM的位寻址区,位于地址()处。 A、00H~1FH B、20H~2FH C、30H~7FH D、80H~FFH 4、间接寻址片内数据存储区(256字节),所用的存储类型是() A、data B、bdata C、idata D、xdata 5、MCS-51单片机上电复位的信号是() A、下降沿 B、上升沿 C、低电平 D、高电平 6、可以将P1口的低4位全部置高电平的表达式是() A、P1&=0x0f B、P1|=0x0f C、P1^=0x0f D、P1=~P1 7、一般单片机C51程序中,为了使程序执行的效率最高,函数参数传递时,函数参数的个数不能够超过() A、1 B、2 C、3 D、4 8、需要扩展一片外部RAM,大小32K字节,需要的地址线是() A、15 B、14 C、13 D、12 9、如果将中断优先级寄存器IP中,将IP设置为0x0A,则优先级最高的是() A、外部中断1 B、外部中断0 C、定时/计数器1 D、定时/计数器0 10、单片机C51中用关键字()来改变寄存器组 A、interrupt B、unsigned C、using D、reentrant 11、红外线遥控码由发射电路经()Hz的载频调制后发射。 A、38K B、12M C、6M D、32。768K

51单片机声控智能小车C语言程序设计代码

51单片机声控智能小车C语言程序设计代码 #include #define uint unsigned int #define uchar unsigned char unsigned char code LEDShowData[]={0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x19,0x03}; sbit LED=P0^7; sbit m1a=P0^0; sbit m1b=P0^1; sbit m2a=P0^2; sbit m2b=P0^3; sbit B1=P0^4; uint m,n,x,y,z; void delayB1() { unsigned int delaytime=500; while(delaytime--); return; } void delayLED(uint ms) { uint a,b; for(a=0;a

TR0=1;//启动T0定时器 TR1=0;//关闭T1定时器 m1a=1; m2a=1; } void timer2(void) interrupt 5 { TF2=0;//软件对T2标志位清零 n++; if(n==250)//n控制查询周期时间 { n=0; switch(m) { case 1://低速挡,占空比77.8% { P2=LEDShowData[0];//七段数码管显示1 TH0=210; TL0=210;//对T0定时器赋初值 TH1=240; TL1=240;//对T1定时器赋初值 x=m; m=0; z=0; ET0=1; ET1=1; TR0=1;//启动T0定时器 break;//跳出switch } case 2://高速挡,占空比99.6% { P2=LEDShowData[1];//七段数码管显示2 TH0=1; TL0=1; //对T0定时器赋初值 TH1=255; TL1=255; //对T1定时器赋初值 x=m+1; m=0; z=0; ET0=1; ET1=1; TR0=1; //启动T0定时器 break;//跳出switch }

51单片机原理及应用期末考试试题汇总

单片机原理及应用期末考试试题汇总 1、单片机是将微处理器、一定容量的RAM 和ROM以及I/O口、定时器等电路集成在一块芯片上而构成的微型计算机。 2、单片机89C51片集成了4KB的FLASH ROM,共有5个中断源。 3、两位十六进制数最多可以表示256个存储单元。 4、89C51是以下哪个公司的产品?(C) A、INTEL B、AMD C、ATMEL D、PHILIPS 5、在89C51中,只有当EA引脚接高电平时,CPU才访问片的Flash ROM。 6、是非题:当89C51的EA引脚接低电平时,CPU只能访问片外ROM,而不管片是否有程序存储器。T 7、是非题:当89C51的EA引脚接高电平时,CPU只能访问片的4KB空间。F 8、当CPU访问片外的存储器时,其低八位地址由P0口提供,高八位地址由P2口提供,8位数据由P0口提供。 9、在I/O口中,P0口在接LED时,必须提供上拉电阻,P3口具有第二功能。 10、是非题:MCS-51系列单片机直接读端口和读端口锁存器的结果永远是相同的。F 11、是非题:是读端口还是读锁存器是用指令来区别的。T 12、是非题:在89C51的片RAM区中,位地址和部分字节地址是冲突的。F 13、是非题:中断的矢量地址位于RAM区中。F 14、MCS-51系列单片机是属于(B)体系结构。 A、诺依曼 B、普林斯顿 C、哈佛 D、图灵 15、89C51具有64KB的字节寻址能力。 16、是非题:在89C51中,当CPU访问片、外ROM区时用MOVC指令,访问片外RAM区时用MOVX 指令,访问片RAM区时用MOV指令。T 17、在89C51中,片RAM分为地址为00H~7FH的真正RAM区,和地址为80H~FFH的特殊功能寄存器(SFR) 区两个部分。 18、在89C51中,通用寄存器区共分为4组,每组8个工作寄存器,当CPU复位时,第0组寄存器为当前的工作寄存器。 19、是非题:工作寄存器区不允许做普通的RAM单元来使用。F 20、是非题:工作寄存器组是通过置位PSW中的RS0和RS1来切换的。T 21、是非题:特殊功能寄存器可以当作普通的RAM单元来使用。F 22、是非题:访问128个位地址用位寻址方式,访问低128字节单元用直接或间接寻址方式。T 23、是非题:堆栈指针SP的容可指向片00H~7FH的任何RAM单元,系统复位后,SP初始化为00H。F 24、数据指针DPTR是一个16位的特殊功能寄存器寄存器。 25、是非题:DPTR只能当作一个16位的特殊功能寄存器来使用。F 26、是非题:程序计数器PC是一个可以寻址的特殊功能寄存器。F 27、在89C51中,一个机器周期包括12个振荡周期,而每条指令都由一个或几个机器周期组

51单片机期末考试试卷及答案2

制作人:兰香子 一、填空题 1、设X=5AH,Y=36H,则X与Y“或”运算为7EH,X与Y的“异或”运算为6CH。 2、若机器的字长为8位,X=17,Y=35,则X+Y=110100,X-Y=11101110(要求结果写出二进制形式)。 3、单片机复位后,堆栈指针SP的值是07h。 4、若采用6MHz的晶体振荡器,则MCS-51单片机的振荡周期为1/6us,机器周期为2us。 5、一个函数由两部分组,即说明部分和语句部分。 6、C语言中输入和输出操作是由库函数scanf和printf等函数来完成。 7.当MCS-51引脚ALE 信号有效时,表示从Po口稳定地送出了低8位地.址8.MCS-51的堆栈是软件填写堆栈指针临时在_片内数据存储_器内开辟的区域. 。00H-1FH 9.MCS-51有4组工作寄存器,它们的地址范围是10.MCS-51片内20H-2FH 范围内的数据存储器,既可以字节寻址又可以.位寻址11.计算机的系统总线有数据总线、地址总线、控制总线。 12.一个机器周期等于 6个状态周期,振荡脉冲2分频后产生的时钟信号的周期定义为状态周期。 13、单片机的复位操作是_高电平,寄存器IE的值是_EA、ES、ET1、EX1、 ET0、EX0_。 14、若选择内部程序存储器,应该设置为高电平(高电平/低电平),那么,PSEN信号的处理方式为不用。 15、单片机程序的入口地址是0000H ,外部中断1的入口地址是0013H 。 16、片机的内部RAM区中,可以位寻址的地址范围是20H-2FH ,特殊功能寄存器中,可位寻址的地址是能被8整除的地址。 17、eiL C51软件中,工程文件的扩展名是UV2,编译连接后生成可烧写的文件扩展名是HEX。 18、CS-51单片机中,在IP=0x00时,优先级最高的中断是外部中断,最低的是串行口中断。 19、CS—51单片机的P0—P4口均是并行 I/O口,其中的P0口和P2口除了可以进行数据的输入、输出外,通常还用来构建系统的数据总线和 地址总线,在P0—P4口中, P0为真正的双向口, P1-P3 为准双向 口。 20、S—5l单片机的堆栈区只可设置在片内数据存储区(器) 21、S—51单片机外部中断请求信号有电平方式和脉冲方式,在电平 制作人:兰香子 方式下,当采集到INT0、INT1的有效信号为低电平时,激活外部中断。 二、单项选择题 1、C语言提供的合法的数据类型关键字是( B )。 A、Double B、short C、integer D、Char

51单片机C语言变量定义

单片机教程,51单片机C语言学习 第六课变量 上课所提到变量就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下:[存储种类]数据类型[存储器类型]变量名表 在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。这些存储种类的具体含义和用法,将在第七课《变量的存储》中进一步进行学习。 而这里的数据类型则是和我们在第四课中学习到的名种数据类型的定义是一样的。说明了一个变量的数据类型后,还可选择说明该变量的存储器类型。存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。表6-1中是KEIL uVision2所能认别的存储器类型。注意的是在AT89C51芯片中RAM只有低128位,位于80H到FFH的高128位则在52芯片中才有用,并和特殊寄存器地址重叠。特殊寄存器(SFR)的地址表请看附录二 如果省略存储器类型,系统则会按编译模式SMALL,COMPACT或LARGE所规定的默认存储器类型去指定变量的存储区域。无论什么存储模式都可以声明变量在任何的8051存储区范围,然而把最常用的命令如循环计数器和队列索引放在内部数据区可以显著的提高系统性能。还有要指出的就是变量的存储种类与存储器类型是完全无关的。 SMALL存储模式把所有函数变量和局部数据段放在8051系统的内部数据存储区这使访问数据非常快,但SMALL存储模式的地址空间受限。在写小型的应用程序时,变量和数据放在data内部数据存储器中是很好的因为访问速度快,但在较大的应用程序中data区最好只存放小的变量、数据或常用的变量(如循环计数、数据索引),而大的数据则放置在别的存储区域。 COMPACT存储模式中所有的函数和程序变量和局部数据段定位在8051系统的外部数据存储区。外部数据存储区可有最多256字节(一页),在本模式中外部数据存储区的短地址用@R0/R1。 LARGE存储模式所有函数和过程的变量和局部数据段都定位在8051系统的外部数据区外部数据区最多可有64KB,这要求用DPTR数据指针访问数据。 之前提到简单提到sfr,sfr16,sbit定义变量的方法,下面我们再来仔细看看。

新概念51单片机C语言教程例题

目录 例编写程序,点亮第一个发光二极管(P27 )错误!未定义书签。例利用for 语句延时特性,编写第一个发光二极管以间隔1S 亮灭闪动的程序(P42 )错误!未定义书签。 例编写程序使第一个发光二极管以间隔500ms亮灭闪动。(P48 )错误!未定义 书签。 例编写程序使第一个二极管以亮200ms灭800ms的方式闪动。P49)错误味定义书签。 例利用C51自带库_crol_(),以间隔500ms实现流水灯程序(P53)错误味定义书签。 例编写程序使第一个数码管显示8(P59 )....... 错误!未定义书签。 例让实验板上6个数码管同时点亮,依次显示0到F,时间间隔为,循环下去。 (P61 )..................... 错误!未定义书签。 例第一个数码管显示 1 ,时间为,然后关闭它,立即让第二个数码管显示2,时间为,在关闭它……一直到最后一个数码管显示6,时间同样为,关闭它之后再 回来显示第一个数码管,一直循环下去。(P62 ) ... 错误!未定义书签。 例利用定时器0 工作方式1,在实验板上实现第一个发光管以1s 亮灭闪烁。 (P74 )..................... 错误!未定义书签。 例用定时器0的方式1实现个第一发光二极管以200ms间隔闪烁,用定时器1 的方式 1 实现数码管前两位59s 循环计时。(P75 )错误!未定义书签。例用数码管前两位显示一个十进制数,变化范围为00~59,开始时显示00,每按下S2键一次,数值加1;每按下S3键一次,数值减1;每按下S4键一次,数值归零;按下S5键一次,利用定时器功能使数值开始自动每秒加1,再次按下

51单片机原理期末考试题

广西工学201 2011学年2学期课程考核试 考核课单片机技卷)考核班通08082 考核类闭学生人8打印份8 一、填空题(每小分,2分 1 ?若累加器A中的数据为67H,则PSW中的P=_1_。. 2. 一个机器周期= 6个状态周期=12个振荡周期。 ----- — 3. 89C51的堆栈是按照先进后出的原则进行存取的RAM区。 4. 用一条指令实现以下功能:若A中数据不等于200,则程序转至PROM_ CJNZ A #200H, PROM__ _____________________________________ 5. 为了使10H—仃H作工作寄存器使用RS1, RS0的取值为_1, 0。 6. 89C51中21个特殊功能寄存器,其地址凡是能被8整除的都有位寻址功能。 7. 89C51 单片机有片内ROM容量4KB , RAM 容量128。 — --------------------------------------- 1 ------------- 1 8. 某串行通信中有1个起始位,8个数据位和1个停止位,应选择的异步串行通信方式为方式1。_____________ 9. 在89C51单片机初始化时,SP存放的是07H _____ 10. 当89C51引脚ALE信号有效时,表示从P0 口稳定地送出了_数据和地信息。 _________________ 四、判断题(每小题2分,共20分) 1 ?如果发生除法溢出错误,则PSW标志位P置1。(V ) 5 ?对于89C51单片机,当CPU寸内部程序存储器寻址超过4K时,系统会自动在外部程序存储器中寻址(V )。 6 ?外加晶振频率越高,系统运算速度也就越快,系统性能也就越好( V )。 7.位TF0是定时器T1的溢出中断标志位。(V ) &在定时器T0和外部中断1都设为高优先级时,外部中断1优先级高于定时器T0o ( X ) 9 ?子程序的返回指令是R ETI ,中断程序的返回指令是RET。( X ) 10 ?波特率是数据传输的速率,指每秒传送的字节数。(V ) 3、51有5个中断源,有2个中断优先级,优先级由软件填写特殊功能寄存器IP加以选择 _______ 4、中断请求信号有电平触发和脉冲触发两种触发方式。 ----------------- ---------- 6、74LS273通常用来作简单输出接口扩展;而74LS244则常用来作简单输入接口扩展。 7、A/D转换器的三个重要指标是转换速度、分辨率和转换精度。------------------ 二、选择题(从备选答案中选择一个正确答案,并将代号写在括号内。每题2分,共10分) 1、MCS-51单片机外扩存储器芯片时,4个I/O 口中用作数据总线的是( B )。 (A) P0 和P2 口( B) P0 口( C P2 和P3 口( D) P2 口 2、访问外部数据存储器时,不起作用的信号是( C )。 ______ __________________ _____ WRPSENRD (D)(CA) (B) ALE (3、使用定时器T1时,有几种工作模式( C )。 (A) 1 种(B) 2 种(C 3 种(D) 4 种 4、MCS-51响应中断时,下面哪一个条件不是必须的( C )。 A、当前指令执行完毕 B、中断是开放的 C、没有同级或高级中断服务 D、必须有RETI指令 5、当MCS-51进行多机通讯时,串行接口的工作方式应选为( C )。 (A)方式0 (B)方式1 ( C)方式2 (D方式0或方式2 三、简答题(每题15分,共30分) 1、MCS-51单片机内部有几个定时/计数器?它们由哪些寄存器组成? 答:MCS-51单片机内部有两个16位可编程的定时/计数器,简称定时器0 (T0)和定时器1 (T1 )。它们分别由方式寄存器TMOD控制寄存组成。TL1、TH1, TL0 TH0和数据寄存器 TCON器. 一、填空题(每空1分,共20分) 1、计算机的系统总线有地址总线、控制总线和数据总线。 ------------ 2、通常、单片机上电复位时PC=0000H , SP= 07H ;而工作寄存器则缺省采用第00 组,这组寄存器的地址范围是从000H~007H。_______________ ___________ ______________ 3、JZ e的操作码地址为1000H, e=20H,它转移的目标地址为1022H 。 4、汇编语言中可以使用伪指令,它们不是真正的指令,只是用来对汇编过程进行 ---------------- 某种控制进行某种控制。

相关文档
最新文档