第一篇:大连东软信息学院大一上 电子工程 c语言-作业.doc第一次,第二周
4.Create a program that uses escape sequence “ to print favorite quote.#include
main()
{
clrscr();
printf(“”Just do myself.“");
}
5.Create a program that uses escape sequence to print the following structure c:cygwinhomeadministrator.#include
main()
{
clrscr();
printf(”C:cygwinhomeadministrator“);
}
6.Create a program that uses escape sequence to print the following directory structure c:cygwinhomeadministrator.#include
main()
{
clrscr();
printf(”ttt*nnntt*tt*nnnt*tttt*nnn*tttttt*nnnt*tttt*nnntt*tt*nnnttt*“);
}
7.Create a calendar program using the current month.#include
main()
{
clrscr();
printf(”SuntMontTuetWedtThutFritSatn“);
printf(”1t2t3t4t5t6t7n“);
printf(”8t9t10t11t12t13t14n“);
printf(”15t16t17t18t19t20t21n“);
printf(”22t23t24t25t26t27t28n“);
printf(”29t30");
}
第二篇:大连东软信息学院C语言指针练习2016.docx
一、Make a choice 1.For the same data type pointer variable, which operator can notused in C program.A.+
B.-
C.=
D.== 2.when0<=i<10, for the following statements, which reference is wrong to reference array elements.int a[]={1,2,3,4,5,6,7,8,9,0}, *p, i;p=a;A.*(a+i)
B.a[p-a]
C.p+i
D.*(&a[i])3.when0<=i<10, for the following statements, which reference is wrong to reference the address of array elements.int a[]={1,2,3,4,5,6,7,8,9,0}, *p,i;
p=a;
A.&(a+1)
B.a++
C.&p
D.&p[i] 4.What is the result for the following program? #include
p=a;
*(p+3)+=2;printf(“%d,%dn”,*p,*(p+3));}
A.0,5
B.1,5
C.0,6
D.1,6 5.what is the result for the following program? #include
A.输出项不合法
B.6
C.8
D.12 6.For the following statements, what’s the value of(p1-p2)? int a[10], *p1, *p2;p1=a;p2=&a[5];
A.5
B.6
C.10
D.没有指针与指针的减法
7.for this function prototype: void adder(int *ptr,int b);if there are two integers: int op1=2;int op2=4;which statement of function call is right?
A:adder(*op1,op2);B:adder(op1,op2);C:adder(&op1,op2);D:adder(&op1,&op2);8.What does the following program outputs to screen_____ voidToSrn(int *);main(){ int a=8;int *ptr=&a;ToSrn(ptr);} voidToSrn(int *ptr){ printf(“%p”,&a);} A:compile error,can not be run B:8 C:16 D:address of a 9.Assuming int *p,a=4;p=&a;which of the following statements is all means address A:a,p+1 B:&a,*p C:&a,p D:*a,p 10.Assuming inta[10],*p;which one is right A:*p=&a[0];B:*p=a;C:p=a[0];D:p=&a[0];11.Assuming :int a[10],*p=a;which one is the address of a[9] A:a[0]+9 B:&(p+9)C:*(p+9)D:a+9 12.Assuming:
char s1[]=“Hello”,s2[10],*s3=“HelloWorld”,*s4;which one of the following statements is correct? A:strcpy(s1[0],“Morning”);B:s2=“Morning”;C:strcpy(s3,“Morning”);D:strcpy(s4,“Morning”);13.For the following statements,after execution the statement a=p+2;what’s the value of a[0]? float a[3]={1.2,45.6,-23.0};float *p=a;
A.1.2
B.45.6
C.-23.0
D.语句有错
14.What format specifiers(in order)should be used in the printf()statement in thefollowing program? Note that in the program the correct format specifiers have beenreplaced by Z.#include
二、Fill the blank.1.the result of printf(“%sd”,“ab cd”);is __【1】___。2.A pointer is a special type of variable which stores the
【1】
of a memory location.3.assuming:int a[]={1,3,5,7,9,11},*p=a;and the value of *p is _【1】__.the value of *(a+5)is __【2】
4.For the following statement, int a[]={8,1,2,5,0,4,7,6,3,9};What’s the value of a[*(a+a[3])]?._____________
二、read the following programs.1.On a machine in which addresses are 4 bytes, what is printed by the following program: #include
2.What does the following program print? #include
三、write the following program.1.Rewrite the following program such that the function has a return type of void andthe variable y gets its value using pointers.#include
2.Write a program that has a function that when passed a string will print every fourthcharacter of the string.In main()you should create the string ”This is an examplestring.” and pass this to your function to be printed.3.Change the program below to print I love programming.You should do this byusing the values in lovetext to change hatetext.Hint: think about the relationshipbetween the index values of the letters in love and the index values for the word hate.This can be done without creating any new variables.#include
4.Write a program that has a function that when passed a string will print every fourthcharacter of the string.In main()you should create the string ”This is an examplestring.” and pass this to your function to be printed./*Void printString(char *p);*/ Void printString(char *p){ Int i=0,len=0,length=strlen(p);While(*p!=NULL&&len { Printf(“%c”,*p);P+=4;Len+=4;} } main(){ Char str[]=”This is an examplestring.”;printString(str);} 5./* Write a program.In main(), declare an integer array,and initialize the array through keyboard.Create a multiply()function that when given the array and the number of array elements,in which can double the value of the array elements(that is a[i]*2).Also create another print()function for printing the array elements.Call the two functions in main function.Tip: when running the program, input n with 14.*/ #include #define N 14 void multiply(int a[],int n);void print(int *p); main(void){ int a[N],i; for(i=0;i { printf(“n No.%d: ”,i+1);scanf(“%d”,&a[i]); } /*(1)call the multiply()function*/ /**********Program**********/ multiply(a,N); /********** End **********/ /*(2)call the print()function*/ /**********Program**********/ Print(a); /********** End **********/ } void multiply(int a[],int n){ int I; /*(3)double the value of the array elements*/ /**********Program**********/ /********** End ***********/ } void print(int *p){ int i; printf(“nThe output values after multiply are:n”); /*(4)output the value of the array elements*/ /**********Program**********/ /********** End **********/ } 1.Write a program that has a function that when passed a string will print every fourthcharacter of the string.In main()you should create the string ”This is an examplestring.” and pass this to your function to be printed./*Void printString(char *p);*/ Void printString(char *p){ Int i=0,len=0,length=strlen(p);While(*p!=NULL&&len { Printf(“%c”,*p);P+=4;Len+=4;} } main(){ Char str[]=”This is an examplestring.”;printString(str);} 2./* Write a program.In main(), declare an integer array,and the array initialize through keyboard.Create a multiply()function that when given the array and the number of array elements, in which can double the value of the array elements(that is a[i]*2).Also create another print()function for printing the array elements.Call the two functions in main function.Tip: when running the program, input n with 14.*/ #include #define N 14 void multiply(int a[],int n);void print(int *p);main(void){ for(i=0;i { printf(“n No.%d: ”,i+1);scanf(“%d”,&a[i]);int a[N],i; } /*(1)call the multiply()function*/ /**********Program**********/ multiply(a,N); /********** End **********/ /*(2)call the print()function*/ /**********Program**********/ Print(a); /********** End **********/ } void multiply(int a[],int n){ int I; /*(3)double the value of the array elements*/ /**********Program**********/ /********** End ***********/ } void print(int *p){ printf(“nThe output values after multiply are:n”); int i; /*(4)output the value of the array elements*/ /**********Program**********/ /********** End **********/ } 试验五 数组 一、实验目的 1.了解数组的特点,掌握一维数组的定义、初始化及其使用方法。2.掌握字符串的输入输出方法,熟悉常用的字符串操作函数。3.掌握二维数组的定义、初始化及其使用方法。 二、所涉及到的知识点 1.一维数组的定义。考虑数组定义的格式,数组元素在内存中的存储形式及地址分配,数组名的意义,数组元素的维数(数组元素的个数)等。 2.一维数组的初始化。数组初始化赋值的形式,考虑初始值多于数组维数,少于数组维数以及数组维数缺省的情况下,初始赋值的意义理解。 3.二维数组的定义。考虑二维数组定义的格式,尤其是行和列变化,二维数组在内存中如何存储,地址如何分配,二维数组如何转化为一维数组,数组下标如何变化? 4.二维数组的初始化。二维数组初始化的形式,考虑行下标和列下标在什么情况下可以缺省,缺省时的意义有何不同? 5.字符数组的定义和初始化。理解字符数组和字符串之间的联系和区别。尤其是字符串结束标志‘ ’的意义。分析字符串长度、字符串所占内存空间的大小这两种描述的区别。6.字符数组的输入输出,字符串的输入输出,并比较二者的异同。 三、实验内容 (一)阅读并调试下列程序,给出程序结果,并指明程序的功能是什么。1.求最大值问题。#include “stdio.h” #define N 10 void main(){ int a[N]={20,9,10,-16,-9,18,96,7,11,33}; int i,max=a[0],m=0; for(i=1;i if(max { max=___33_____;/* 将比较后的数组元素的较大值赋给max变量*/ m=___9_______;/*将比较后较大的数组元素下标赋给m变量*/ } printf(“max=%d,为第%d个元素n”,max,m+1);} 运行结果: 程序功能:求数组中的较大值及其是第几个元素 2.数据分类问题。#include “stdio.h” #define N 10 /*这是宏定义语句,表示后面程序中出现的N均为10*/ void main(){ int a[N],b[N],i,j=0,k=N-1; printf(“请输入数据:n”); for(i=0;i scanf(“%d”,&a[i]); for(i=0;i { printf(“%d ”,a[i]); if(a[i]<0) b[j++]=a[i]; /* 将负数放在b的前部 */ else b[k--]=a[i]; /* 将其他数放在b的后部 */ } printf(“n”); for(i=0;i printf(“%d ”,b[i]);} 程序调试 ① 调试程序时通常先将N定义为一个小数值,当程序调试成功后再将N定义为常数10,这样可以提高程序的调试效率。 ② 在设计调试用数据时,应考虑各种数据情况,以便提高程序的可靠性。 程序功能:将所输入的数据按输入排一遍,换行后倒着排一遍。运行结果: A.当输入的数据数超过十个时会自动去除多余的数。 B.当输入的数据数小于十个时回车,将无反应,直到输满十个数为止,回车多少不影响。 3.字母统计问题。输入一个长度小于20的字符串,统计其中字母的个数。/* 字母统计问题程序 */ #include “stdio.h” void main(){ char s[20]; int i=0,counter=0; printf(“请输入字符串:n”); gets(s); while(s[i]!=' ') { if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z') counter++; i++; } printf(“Total: %dn”,counter);} 程序调试 ① 运行程序,输入一个长度不足20的字符串,察看并分析程序运行结果。 ② 运行程序,输入一个长度恰好是20的字符串,察看并分析程序运行结果。 ③ 运行程序,输入一个长度超过20的字符串,察看并分析程序运行结果。 ④ 运行程序,输入一个全是字母的字符串,察看并分析程序运行结果。 ⑤ 运行程序,输入一个没有字母的字符串,察看并分析程序运行结果。 ⑥ 运行程序,只输入一个回车符,察看并分析程序运行结果。 ⑦ 运行程序,输入你认为最有特点的一个字符串,察看并分析程序运行结果。 运行结果: 1’ 2’ 3’第一次运行后能正确显示,按任意键 TC2.0 直接退出,郁闷中~~~~~ 4’ 和1’ 2’ 运行一样 5’ 只要输入数字,无论多少,是否有空格,结果均显示 0 ~~(上图为其中的一种情况) 6’ 7’以上均为本人最感兴趣的字符串~~~~O(∩_∩)O~~~ 超强分析:根据多种调试运行结果得知 A.Turboc2.0增加了编程者的难度(必须在输入时检查是否越界); B.第3’ 种情况是因为编译器拒绝运行(编译出错) 说明:TurboC2.0设计者认为字符串越界应当被限制。C..执行程序,进行不同长度字符串测试时,多次出现跳出编程环境即第 3’ 种情况 说明:字符串越界的确对内存数据有破坏性作用。 D.所以只能得出TurboC2.0在此方面有缺陷! 4.奇偶数问题。设有一维整型数组共有20个元素,且偶数与奇数各占一半,将该数组变换为2×10的二维数组且偶数和奇数各成一行。/* 二维数组问题程序 */ include “stdio.h” void main(){ int a[20],b[2][10]; int i,j,col1=0,col2=0; printf(“请输入数据:n”); for(i=0;i<20;i++) scanf(“%d”,&a[i]); for(i=0;i<20;i++) { if(a[i]%2==0) b[0][col1++]=a[i]; /* 偶数存储在b[0]数组 */ else b[1][col2++]=a[i]; /* 奇数存储在b[1]数组 */ } for(i=0;i<2;i++) { for(j=0;j<10;j++) printf(“%6d”,b[i][j]); printf(“n”); } } 程序调试 ① 输入一组数据,其中偶数个数与奇数个数相等,察看并分析程序的运行结果。 运行结果: ② 输入一组数据,其中偶数个数与奇数个数不相等,看程序能否正常运行,并对运行结果进行分析。 运行结果: 分析:A.当按要求给出数据时可按图一正常运行。 .B.当奇偶数目不等时,少的部分 随即 补数,多出的部分按输入先后顺序舍去后输入的(上图2为期中一种情况) ③ 调试完善程序,使得对任何输入数据,程序都能正常运行:或者给出一个正确的执行结果,或者给出一个恰当的提示信息。 (二)编制下列程序 1.只使用一个一维数组,实现本实验的数据分类问题。 2.分别使用scanf()函数的“%c”格式和“%s”格式输入字符串,实现本实验的字母统计问题。 编制结果: %s 型: #include “stdio.h” void main(){ char s[20]; int i=0,counter=0; printf(“Please input charater:n”); scanf(“%s”,s); while(s[i]!=' ') { if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z') counter++; i++; } printf(“Total:%dn”,counter); getch();} 由于时间,请谅解%c 没弄好~~~上课补上,谢谢~~~ 3.修改奇偶数问题程序,使得一维整型数组的20个元素保存在10×2的二维数组中,且偶数与奇数分别存储在两列上。 编制结果: #include int a[20],b[10][2]; int i,j,col1=0,col2=0; printf(“Please input needed date:n”); for(i=0;i<20;i++) scanf(“%d”,&a[i]); for(i=0;i<20;i++) { if(a[i]%2==0) b[col1++][0]=a[i]; else b[col2++][1]=a[i]; } for(j=0;j<10;j++) { for(i=0;i<2;i++) printf(“%6d”,b[j][i]); printf(“n”); } getch();} 四、思考题 1.为什么要引入数组?引入数组的意义是什么?要从数组的定义和数组元素的引用去分析。 答: 引入数组主要是为了提高编程效率。 数组是把具有相同数据类型的若干变量按有序的形式组织起来,以便于程序处理,这些数据元素的集合就叫数组。 2.如何理解一维数组的维数和二维数组的维数。 答: 一维数组来说它并不具有维数,一维数组只是由单一的同一类型的数组成。 而二维数组的维数就具有了意义,可以理解它的元素按行和列组成了一个平面矩阵,它所谓的二维即为行和列。 3.字符数组和字符串的联系和区别是什么?从他们的定义和输入输出来分析。 答: 字符数组和字符串在内存空间中都存放了一串字符。 而字符数组可能因为定义时方括号数值的多少而在内存空间存放了“ ”。 总结:1.请问老师何时多讲一些题,何时把实验讲一下。谢谢~~ 2.截屏 蛮帅的! 3.严正声明:以上均为本人劳动成果,若有雷同,此版本为正版! ----李睿阳 2009/12/18 实验三 顺序及分支结构程序设计 一、实验目的 1.熟悉运算符、表达式,掌握标准输入输出函数的适用方法和顺序结构程序设计的一般方法 2.掌握if语句的格式与应用,if语句的嵌套格式与应用,条件运算符的作用,Switch语句的格式与应用,Break、continue语句的格式与应用。 二、预习内容 1.C语言的常用的运算符及其使用特点。 2.算术运算符中++,――运算符的应用特点。3.常用的关系运算符及应用特点。4.逻辑运算符的概念及应用特点 5.条件运算符的作用及应用特点。 6.各种运算符的混合运算及不同运算符的优先级别。7.条件分支语句的格式及应用。 8.Switch多分支选择语句的格式及应用。 三、实验内容 (一)阅读调试下列程序,并写出程序结果。1.#include void main() { char ch=0x31; printf(“%dn”,ch);/*屏幕显示___________*/ printf(“%on”,ch);/*屏幕显示____________*/ printf(“%xn”,ch);/*屏幕显示____________*/ printf(“%cn”,ch);/*屏幕显示____________*/ } 运行结果:49 61 31 1 2.#include void main(){ int a=5,b=5;printf(“value a=%dn”,a++);/*屏幕显示___________*/ printf(“value b=%dn”,++b);/*屏幕显示___________*/ printf(“value a=%dn”,--a);/*屏幕显示___________*/ printf(“value b=%dn”,b--);/*屏幕显示___________*/ } 运行结果:value a=5 value b=6 value a=5 value b=6 3.输入两个实数a,b,然后交换它们的值,最后输出 #include { float a,b,temp; printf(“请输入a和b的值:”); scanf(“%f,%f”,&a,&b); temp = a; a=b; b=temp; printf(“交换后, a=%f, b=%fn”,a,b); } 运行结果:Please input a and b’s value:1.0,2.0 When finishing,a=2.000000,b=1.000000 4.完成下面的程序,在空白处填入a,b,c,取a,b,c中最大者赋给max。 A.if(a>b && a>c) B.if(a>b) max=________ if(a>c) else max=______ if(b>c) else max=________ max=______ else else max=________ if(b>c) max=________ else max=_________ 5.若整数x分别等于95、87、100、43、66、79,则以下程序段运行后屏幕显示是什么? #include int x; printf(“please input the x value:”); scanf(“%d”,&x); switch(x/10) { case 6: case 7: printf(“Passn”); break; case 8: printf(“Goodn”); break; case 9: case 10: printf(“VeryGoodn”); break; default: printf(“Failn”); } } x等于 95时,程序段运行后屏幕上显示_VeryGood__ x等于 87时,程序段运行后屏幕上显示_Good_ x等于100时,程序段运行后屏幕上显示_Verygood__ x等于 43时,程序段运行后屏幕上显示__Fail_ x等于 66时,程序段运行后屏幕上显示__Pass_ x等于 79时,程序段运行后屏幕上显示__Pass_ (二)编制下列程序 1.以下程序输入三个整数值给a,b,c,程序把b中的值给a,把c中的值给b,把a中的值给c,然后输出a,b,c的值 解答: #include void main(){ int a,b,c,temp;printf(“Please input a b and c's value:”);scanf(“%i,%i,%i”,&a,&b,&c);temp=a;a=b;b=c;c=temp;printf(“When finishing,a=%i,b=%i,c=%in”,a,b,c);getch();} 2.输入一个整数,判断该数的奇偶性。自已写出程序代码。(输出相应的标志even-偶数 odd-奇数,请记住这两个单词) 【分析提示】 一个数除2若余数为0,则这个数一定是偶数,否则是奇数。C语言中的求余运算符为“%”,若输入的数为偶数则输出“even”,若输入的数为奇数则输出“odd”。 解答: #include main(){ int number,residue;printf(“Please input your number:n”);scanf(“%d”,&number);residue=number%2;if(residue==0)printf(“It's even.n”);else printf(“It's odd.n”);getch();} 3.给出一个百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,81-89分为B,70-79分为C,60-69分为D,60分以下为E。 ① 事先编好程序,要求分别用if语句和switch语句实现。运行程序,并检查结果是否正确。 解答:<1> if形式: #include main(){ int result;printf(“Please input one result:n”);scanf(“%d”,&result);if(result>=90)printf(“Your result is A.n”);else if((result>=80)&&(result<=89))printf(“Your result is B.n”);else if((result>=70)&&(result<=79))printf(“Your result is C.n”);else if((result>=60)&&(result<=69))printf(“Your result is D.n”);else if(result<=59)printf(“Your result is E.n”);getch();} 经过测试,此程序可按预想正确运行(O(∩_∩)O~)<2> switch 形式: #include main(){ int result,grade;printf(“Please input one result:n”);scanf(“%d”,&result);grade=result/10;switch(grade){ case 10: case 9: printf(“Your result is A.n”);break;case 8: printf(“Your result is B.n”);break;case 7: printf(“Your result is C.n”);break;case 6: printf(“Your result is D.n”);break;case 5: case 4: case 3: case 2: case 1: case 0: printf(“Your result is E.n”);break;default:printf(“ERRORn”);} getch();} 经过测试,此程序可按预想正确运行(O(∩_∩)O~) ② 再运行一次程序,输入分数为负值(如-70),这显然是输入时出错,不应给出等级。修改程序,使之能正确处理任何数据。当输入数据大于100或小于0时,通知用户“输入数据错”,程序结束。 解答:只需将default 后的 打印语句改为(“Your input is error.n”)即可 四、思考题 1.试举例说明++i与i++应用的区别。答:前者是 先给i加1,然后再取i的值,后者是 先取i的值,然后再给i加1.2.写出C语言中所有运算符混合运算的优先级别。 答:优先级从上往下依次是: ()[ ]->.!~ ++--+<< >> < <= > >= ==!= & ^ | && || ? : = +=-= *= /= %= &= ^= |= <<= >>= , 3.试分析比较条件表达式与if语句的使用特点。 答:条件表达式: 1、多路选择 2、switch语句是多分支选择语句,可用嵌套的if语句处理,但降低了可读性。 3、当分支数大于三种时,常采用开关语句简化程序设计 If: 4.Switch语句结构中加不加break有何区别?在什么情况下可以不加break语句? 答:不加break 会直接执行,直到遇见 break 或 花括号为止。想要执行所有的case 语句 时可以不加 break! 《单片机原理与应用》项目报告 项目编号:_三级项目1__________ 项目列别:三级项目____________ 项目名称:电子时钟设计 班级:______________ 学号:___________ 姓名:________ _____________ 时间:_______________ 分值:_____________ 电子时钟设计 【项目目的】 掌握矩阵键盘的扫描与识别控制 掌握七段数码管的显示控制 【项目内容】 使用51单片机的内部定时器资源设计一个电子时钟,该项目所需实现的内容包括: (1)系统启动时,在6个LED上分别显示“—”,等待用户输入初始时间(2)通过矩阵键盘输入初始时间,要求必须有容错处理,不能输入非法的时间参数 (3)当初始时间输入完毕后,通过确认键确认,该电子时钟便开始运行(4)通过修改键可重新设置初始时间(5)可设置闹铃时间 (6)当闹铃时间到后,可通过蜂鸣器提示,然后通过按键取消蜂鸣器蜂鸣(7)当前时间信息可通过串口传送给PC机(8)可自行添加功能 【硬件连线】 (1)使51单片机的P0口与JP18相连,使用P2口连接JP19扭接,使用P1口连接JP19,控制LED的位选端。(2)短接J8(3)连接P3^0 P3^1与L0 L1相连 (4)JP1^1-JP1^3与JP16^0-JP16^2相连(5)P1^6-P1^7与JP16^6-JP16^7相连 【控制原理分析】 【代码流程分析】 【项目代码】 #include #include sbit KEY1=P1^1; //切换键 sbit KEY2=P1^2;//minute ,hour调整加1定义 sbit KEY3=P1^3;//minute ,hour调整减1定义 sbit bear=P3^1;//闪烁灯 sbit keyalarm=P3^0;//闹铃开关指示灯 sbit kled=P1^7;//闹铃开关 code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; //段码控制 char code weikong_code[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};uchar ms[6]={10,10,10,10,10,10};uchar StrTab[6]; uchar minute=59,hour=12,second=0; //正常时钟 秒,分,时 定义 uchar minute1=00,hour1=00;second1=00;//闹钟时钟 秒,分,时 定义 uchar flag=0, flag1=0; //切换标志 uchar num=0;uint count=0; //定时器计数,定时50ms,count满20,秒加1 /***********子函数声明*******************************************/ void xianshishuzu(); //显示数组子程序 void alarm(); //闹钟子程序 void alarmbeer();void beng(); /********************** 延时子程序*****************************/ void delay(uint z){ uint x,y; for(x=0;x for(y=0;y<110;y++);} /**********************显示时钟子函数***************************/ void dispaly(uchar w[6]){ unsigned int i,j,aa; aa=0x7f; //位选初值0111 1111 for(i=0;i<6;i++) //依次将数组w中六个数取出,并显示 { P2=aa; //位选 j=w[i]; //取出要显示的数码 P0=tab[j]; //取出段选编码 aa=_cror_(aa,1); //位选信号向右移一位 delay(1); //显示延时 P0=0xff; //消影 } } void alarmbeer(){ uchar i; if(keyalarm==0) { if((hour==hour1)&&(minute==minute1)&&((second>=second1)&&(second for(i=0;i<3;i++) { beng(); } } } /***********************显示时钟数组子程序***********************/ void xianshishuzu() { StrTab[4]=second/10; StrTab[5]=second%10; StrTab[2]=minute/10; StrTab[3]=minute%10; StrTab[0]=hour/10; StrTab[1]=hour%10; } /**********************键盘扫描子程序*************************/ void keycan() { if(KEY1==0) //按一次,正常显示,按第二次,时调整,按第三次,分调这整,{ delay(10); //按键1去抖以及动作 if(KEY1==0) //确认按键是否按下 { flag++; //切换标志 } while(!KEY1); //释放按键 } if(flag==1) { if(KEY2==0) { delay(10); if(KEY2==0) { hour++; //正常时间 小时 加1 if(hour==24)hour=0; } while(!KEY2) //释放按键 { dispaly(StrTab); } } if(KEY3==0) { delay(10); if(KEY3==0) { hour--; //正常时间小时 减1 if(hour==-1) hour=23; dispaly(StrTab); } while(!KEY3) { dispaly(StrTab); } } } if(flag==2) { if(KEY2==0) { delay(10); if(KEY2==0) { minute++; if(minute==60) minute=0; } while(!KEY2) { dispaly(StrTab); } } if(KEY3==0) { delay(10); if(KEY3==0) { minute--; if(minute==-1) minute=59; } while(!KEY3) { //按键去抖以及动作 //正常时间 分 加1 //释放按键 //正常时间分 减1 dispaly(StrTab); } } } if(flag==2) { if(KEY2==0) //按键去抖以及动作 { delay(10); if(KEY2==0) { minute++; //分加1 if(minute==60) minute=0; } while(!KEY2) { dispaly(StrTab); } } } if(flag==3) //闹钟对时 { if(KEY2==0) { delay(10); if(KEY2==0) { hour1++; if(hour1==24) hour1=0; //闹钟时间 小时 加1 } while(!KEY2) { alarm(); } } if(KEY3==0) { delay(10); if(KEY3==0) { hour1--; if(hour1==-1) hour1=23; //闹钟时间 小时 减 } while(!KEY3) { alarm(); } } } if(flag==4) { if(KEY2==0) //按键去抖以及动作 { delay(10); if(KEY2==0) { minute1++; if(minute1==60)minute1=0; //闹钟分加1 } while(!KEY2) { alarm(); } } if(KEY3==0) //按键去抖以及动作 { delay(10); if(KEY3==0) { minute1--; if(minute1==-1) minute1=59; //闹钟分减1 } } while(!KEY3) { alarm(); } } } /*******************蜂鸣器子程序****************************/ void beng(){ bear=0; k=0; delay(100); bear=1; k=1; delay(100);} /*****************整点报警子程序***************************/ void zhengdian(void) { uchar i=0; if((second==0)&(minute==0)) //整点报时 { for(i=0;i<10;i++) { TR0=1; beng(); dispaly(ms); } } } /********************************定时闹*******************************/ void alarm() { StrTab[4]=second1/10; StrTab[5]=second1%10; StrTab[2]=minute1/10; StrTab[3]=minute1%10; StrTab[0]=hour1/10; StrTab[1]=hour1%10; TR0=0; dispaly(StrTab); xianshishuzu();} /**************************中断子程*********************************/ void time_()interrupt 1 //中断程序 { count++; TH0=(65536-921600/20)/256; //0.5ms重新送初值 TL0=(65536-921600/20)%256; if(count==20) //定时器计数,定时50ms,count满20,秒加1 { second++; 钟 序 count=0; if(second==60) //秒值等于60,秒清零,分加1 { second=0; minute++; if(minute==60) //分值等于60,分清零,时加1 { minute=0; hour++; if(hour==24) //时值等于24,时清零,返回,全部归零 { hour=0; } } } } xianshishuzu();} /***********************数字电子钟主函数***************************/ void main(){ P1=0XFF; TL0=(65536-921600/20)%256; EA=1; //总中断开 TMOD=0x01; TH0=(65536-921600/20)/256;//预置计数初值,50ms ET0=1; //允许定时器0中断 TR0=1; //开启定时器0 while(1) //主循环 { keyalarm=kled; if(flag==0) { TR0=0; dispaly(ms);//上电初始化就显示------ } if(P1!=0XFF) { keycan(); //按键提前扫描 } if(flag>0) { if(flag==1||flag==2) { TR0=1; dispaly(StrTab); } if(flag==3||flag==4) { TR0=0; alarm(); } if(flag==5) { TR0=1; dispaly(StrTab); zhengdian(); alarmbeer(); } if(flag==6) { TR0=0; flag=0; dispaly(ms); } //按KEY1第六次定时器关闭,切换标志请零,显示------ } } } 【结论与收获】第三篇:大连东软信息学院C语言实验五-数组
第四篇:大连东软信息学院C语言实验三顺序及分支结构程序设计
第五篇:大连东软信息学院单片机三级项目-电子时钟设计