十天学会单片机C语言郭天祥课后习题答案_第1页
十天学会单片机C语言郭天祥课后习题答案_第2页
十天学会单片机C语言郭天祥课后习题答案_第3页
十天学会单片机C语言郭天祥课后习题答案_第4页
十天学会单片机C语言郭天祥课后习题答案_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(圆满版)十天学会单片机C语言_郭天祥课后习题答案(圆满版)十天学会单片机C语言_郭天祥课后习题答案47/47(圆满版)十天学会单片机C语言_郭天祥课后习题答案郭天祥十天学通单片机TX-1C单片机实验板所有课作业+答案,特别整理,供单片机喜好与学习者使用讲次内容细节第一讲学单片机预备知识、怎样点亮一个发光管单片机能做什么,基本电子知识,怎样用TX-1C单片机学习板学习单片机,C51知识简介,怎样申请免费芯片样品。点亮一个发光管,第二讲流水灯设计、蜂鸣器发声、继电器控制简单延时程序、子程序调用、带参数子程序设计、流水灯同时蜂鸣器响、怎样驱动蜂鸣器,及怎样驱动继电器,集电极开路的见解及应用。第三讲

2、数码管显示的原理、数码管的静态显示共阳、共阴数码管显示原理、准时器工作方式介绍、要点表达工作方式2、中止见解及中止函数写法、外面中止试验、准时器中止应用第四讲数码管的动向显示原理及应用实现动向扫描见解、准时器、中止加深用单片机的准时器及中止设计一个60秒准时器第五讲独立键盘、矩阵键盘的检测原理及实现键盘用来做什么、怎样键盘检测、消抖、键盘编码、带返回值函数写法及应用第六讲AD、DA的工作原理及实现、运放电路模拟电压与数字电压的关系、为何要使用AD及DA、ADC0804的操作方法、DAC0832的操作方法第七讲串口通信原理及操作流程串口通信工作方式、10位数据通信、波特率见解、如何依据波特率计算

3、准时器初值、串口打印在调试程序中的应用。第八讲1602液晶、12864液晶显示原理及实现最简单液晶工作原理、怎样开始对一个没有任何见解的芯片开始单片机的操作第九讲IIC总线AT24C02芯片工作原理IIC总线工作原理、当前特别通用的一种通信系统第十讲利用51单片机的准时器设计一个时钟综合运用51单片机知识设计一个能够随意调理时间、带整点闹铃的时钟。(此顶用到准时器、中止、按键、蜂鸣器、数码管或串口通信)第十一讲用DS12C887时钟芯片设计一个高精度时钟DS12C887内部带有锂电池,系统掉电状况下可自行精准走10年,并带有闹钟功能、年、月、日、时、分、秒等。(本节由学生自己设计电路)第十二讲

4、使用Protell99绘制电路图全过程Protell99软件使用、元件库、封装库设计、绘制原理图、错误检查、生成PCB、手动、自动布线、送去加工第十三讲Altiumdesigner6.5绘制电路图全过程最顶级电路板设计软件AltiumDesigner使用、元件库、封装库设计、绘制原理图、错误检查、生成PCB、手动、自动布线、送去加工lesson1比较TX-1C单片机学习板原理图写程序用位操作和总线操作两种方法达成以下题目1.娴熟成立KEIL工程2.点亮第一个发光管.3.点亮最后一个发光管4.点亮1、3、5、75.点亮二、四、五、六6.试一试让第一个发光管闪耀7.试一试设计出流水灯程序=less

5、on2第一个发光管以间隔200ms闪耀8个发光管由上至下间隔1s流动,此中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时封闭蜂鸣器,向来重复下去。8个发光管往返流动,每个管亮100ms,流动时让蜂鸣器发出“滴滴”声。用8个发光管演示出8位二进制数累加过程。8个发光管间隔200ms由上至下,再由下至上,再重复一次,此后全部熄灭再以300ms间隔所有闪耀5次。重复此过程。间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,挨次到8个管亮,此后重复整个过程。间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪耀3次

6、;封闭发光管,程序停止。=lesson31、利用准时/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪耀,设晶振频次为12MHz。2、利用准时/计数器T1产生准不时钟,由P1口控制8个发光二极管,使8个指示灯挨次一个一个闪耀,闪耀频次为10次/秒(8个灯挨次亮一遍为一个周期),循环。3、同时用两个准时器控制蜂鸣器发声,准时器0控制频次,准时器1控制同个频次连续的时间,间隔300ms挨次输出1,10,50,100,200,400,800,1k(hz)的方波。4、用准时器以间隔500MS在6位数码管上挨次显示0、1、2、3.C、D、E、F,重复。lesson41.利用动向扫描方法在

7、六位数码管上显示出坚固的654321.2.用动向扫描方法和准时器1在数码管的前三位显示出秒表,精准到1%秒,即后两位显示1%秒,向来循环下去。3.利用动向扫描和准时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用准时器0以500MS速度进行流水灯从上至下挪动,当数码管上数减到停止时,实验板上流水灯也停止此后所有开始闪耀,3秒后(用T0定时)流水灯所有封闭、数码管上显示出“HELLO”。到此保持住。lesson5数码管前三位显示一个跑表,从000到999之间以1%秒速度运转,当按下一个独立键盘时跑表停止,松开手后跑表连续运转。(用准时器

8、设计表)。在上题的基础上,用其他三个独立键盘实现按下第一个时计时停止,按下第二个时计时开始,按下第三个是计数值清零从头开始。按下16个矩阵键盘挨次在数码管上显示1-16的平方。如按下第一个显示1,第二个显示4.=lesson71.由上位机发送1给单片机时,蜂鸣器以400ms频次发声,发2时以200ms频次发声,发3时以100ms频次发声,发4时关闲蜂鸣器。1.以2400bps从计算机发送任一字节数据,当单片机收到该数据后,在此数据前加上一序号此后连同此数据一同发送至计算机,当序号超过255时归零。2.以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动向显示出来,波特率自定

9、。用AD以1HZ的频次收集模拟信号,此后变换成数字量,再将其以1200bps发送到计算机,在计算机上显示。4.按下矩阵键盘第一行时以1200bps发送,1,2,3,4,第二行时以2400bps发送5,6,7,8,第三行以4800bps发送,9,10,11,12,第四行以9600pbs发送,13,14,15,16.=Lesson1作业1用位操作点亮第一个发光管.合用TX-1C单片机实验板晶振为11.0592M/*/#include/52单片机头文件sbitled1=P10;voidmain()/单片机管脚位申明/主函数led1=0;/将单片机P1.0口清零while(1);/程序停止在这里,在后

10、边会讲到为何这样写。2/用总线操作点亮第一个发光管.合用TX-1C单片机实验板晶振为11.0592M/*/#include/52单片机头文件voidmain()/主函数P1=0 xfe;while(1);/将单片机P1口的8个口由高到低分别赋值为11111110/程序停止在这里,在后边会讲到为何这样写。3/用位操作点亮最后一个发光管.合用TX-1C单片机实验板晶振为11.0592M/*/#include/52单片机头文件sbitled8=P17;voidmain()/单片机管脚位申明/主函数led8=0;/将单片机P1.7口清零while(1);/程序停止在这里,在后边会讲到为何这样写。4/用

11、总线操作点亮最后一个发光管.合用TX-1C单片机实验板晶振为11.0592M/*/#includevoidmain()/52单片机头文件/主函数P1=0 x7f;while(1);/将单片机P1口的8个口由高到低分别赋值为01111111/程序停止在这里,在后边会讲到为何这样写。5/用位操作点亮1,3,5,7发光管.合用TX-1C单片机实验板晶振为11.0592M/*/#include/52单片机头文件sbitled1=P10;/单片机管脚位申明sbitled3=P12;/单片机管脚位申明sbitled5=P14;/单片机管脚位申明sbitled7=P16;/单片机管脚位申明voidmain(

12、)/主函数led1=0;/将单片机P1.0口清零led3=0;/将单片机P1.2口清零led5=0;/将单片机P1.4口清零led7=0;/将单片机P1.6口清零while(1);/程序停止在这里,在后边会讲到为何这样写。6/用总线操作点亮1,3,5,7发光管.合用TX-1C单片机实验板晶振为11.0592M/*/#include/52单片机头文件voidmain()/主函数P1=0 xaa;while(1);/将单片机P1口的8个口由高到低分别赋值为10101010/程序停止在这里,在后边会讲到为何这样写。7用位操作点亮2,4,5,6发光管.合用TX-1C单片机实验板晶振为11.0592M/

13、*/#include/52单片机头文件sbitled2=P11;/单片机管脚位申明sbitled4=P13;/单片机管脚位申明sbitled5=P14;/单片机管脚位申明sbitled6=P15;/单片机管脚位申明voidmain()/主函数led2=0;/将单片机P1.1口清零led4=0;/将单片机P1.3口清零led5=0;/将单片机P1.4口清零led6=0;/将单片机P1.5口清零while(1);/程序停止在这里,在后边会讲到为何这样写。8/用总线操作点亮2,4,5,6发光管.合用TX-1C单片机实验板晶振为11.0592M/*/#include/52单片机头文件voidmain(

14、)/主函数P1=0 xc5;/将单片机P1口的8个口由高到低分别赋值为11000101while(1);/程序停止在这里,在后边会讲到为何这样写。9/试一试让第一个发光管闪耀.(程序看不懂没关系,后边章节会有详尽解说)合用TX-1C单片机实验板晶振为11.0592M/*/#include/52单片机头文件sbitled1=P10;voidmain()/单片机管脚位申明/主函数unsignedinti;/定义一个int型变量while(1)i=50000;led1=0;/变量赋初值为/点亮灯50000while(i-);/延时i=50000;led1=1;/熄灭灯while(i-);9/试一试写

15、出流水灯程序(程序看不懂没关系,后边章节会有详尽解说)合用TX-1C单片机实验板晶振为11.0592M/*/#include/52单片机头文件voidmain()/主函数unsignedinti;/定义一个int型变量while(1)i=50000;P1=0 xfe;while(i-);i=50000;P1=0 xfd;while(i-);i=50000;P1=0 xfb;while(i-);/变量赋初值为/点亮第一个灯/延时/变量赋初值为/点亮第二个灯/延时/变量赋初值为/点亮第三个灯/延时500005000050000i=50000;P1=0 xf7;while(i-);i=50000;P

16、1=0 xef;while(i-);i=50000;P1=0 xdf;while(i-);i=50000;P1=0 xbf;while(i-);i=50000;P1=0 x7f;while(i-);/变量赋初值为/点亮第四个灯/延时/变量赋初值为/点亮第五个灯/延时/变量赋初值为/点亮第六个灯/延时/变量赋初值为/点亮第七个灯/延时/变量赋初值为/点亮第八个灯/延时5000050000500005000050000Lesson21/第一个发光管以间隔200ms闪耀合用TX-1C单片机实验板晶振为11.0592M/*/#include/52单片机头文件#defineuintunsignedint

17、/宏定义#defineucharunsignedchar/宏定义sbitled1=P10;/单片机管脚位申明voiddelay(uintz)/延时函数,z的取值为这个函数的延时ms数,如delay(200);大概延时200ms./delay(500);大概延时500ms.uintx,y;for(x=z;x0;x-)for(y=110;y0;y-);voidmain()/主函数while(1)/大循环led1=0;delay(200);/led1=1;/点亮小灯延时200毫秒/熄灭小灯delay(200);/延时200毫秒2/8个发光管由上至下间隔1s流动,此中每个管亮500ms,灭500ms,

18、亮时蜂鸣器响,灭时封闭蜂鸣器,向来重复下去。合用TX-1C单片机实验板晶振为11.0592M/*/#include/52单片机头文件#include/包括有左右循环移位子函数的库#defineuintunsignedint/宏定义#defineucharunsignedchar/宏定义sbitbeep=P23;voiddelay(uintz)/延时函数,z的取值为这个函数的延时200ms./delay(500);大概延时500ms.ms数,如delay(200);大概延时uintx,y;for(x=z;x0;x-)for(y=110;y0;y-);voidmain()/主函数uchara;a=

19、0 xfe;while(1)/大循环P1=a;beep=0;delay(500);/P1=0 xff;beep=1;/点亮小灯/开启蜂鸣器延时500毫秒/熄灭小灯/封闭蜂鸣器delay(500);/延时500毫秒a=_crol_(a,1);/将a变量循环左移一位3/*个发光管往返流动,每个管亮100ms,流动时让蜂鸣器发出滴滴声。*/*/#include/52单片机头文件#include/包括有左右循环移位子函数的库#defineuintunsignedint/宏定义#defineucharunsignedchar/宏定义sbitbeep=P23;voiddelay(uintz)/延时函数,z

20、的取值为这个函数的延时200ms./delay(500);大概延时500ms.ms数,如delay(200);大概延时uintx,y;for(x=z;x0;x-)for(y=110;y0;y-);voidmain()/主函数uchara,i;while(1)/大循环a=0 xfe;/赋初值for(i=0;i8;i+)/左移P1=a;beep=0;delay(50);/beep=1;delay(50);/点亮小灯/开启蜂鸣器延时50毫秒/封闭蜂鸣器/再延时50毫秒a=_crol_(a,1);/将a变量循环左移一位a=0 x7f;for(i=0;i8;i+)/右移P1=a;beep=0;delay

21、(50);/beep=1;delay(50);/点亮小灯/开启蜂鸣器延时50毫秒/封闭蜂鸣器/再延时50毫秒a=_cror_(a,1);/将a变量循环右移一位4/*用8个发光管演示出8位二进制数累加过程。*/*/#include/52单片机头文件#include/包括有左右循环移位子函数的库#defineuintunsignedint/宏定义#defineucharunsignedchar/宏定义voiddelay(uintz)/延时函数,z的取值为这个函数的延时200ms./delay(500);大概延时500ms.ms数,如delay(200);大概延时uintx,y;for(x=z;x0

22、;x-)for(y=110;y0;y-);voidmain()/主函数uchara;while(1)/大循环a+;P1=a;delay(200);5/*8个发光管间隔200ms由上至下,再由下至上,再重复一次,此后所有熄灭再以300ms间隔所有闪耀5次。重复此过程*/*/#include/52单片机头文件#include/包括有左右循环移位子函数的库#defineuintunsignedint/宏定义#defineucharunsignedchar/宏定义voiddelay(uintz)/延时函数,z的取值为这个函数的延时200ms./delay(500);大概延时500ms.ms数,如del

23、ay(200);大概延时uintx,y;for(x=z;x0;x-)for(y=110;y0;y-);voidmain()/主函数uchara,i,j;while(1)/大循环for(j=0;j2;j+)a=0 xfe;/赋初值for(i=0;i8;i+)/左移P1=a;/点亮小灯delay(200);/延时200毫秒a=_crol_(a,1);/将a变量循环左移一位a=0 x7f;for(i=0;i8;i+)/右移P1=a;/点亮小灯delay(200);/延时200毫秒a=_cror_(a,1);/将a变量循环右移一位P1=0 xff;/所有熄灭for(j=0;j10;j+)delay(3

24、00);/P1=P1;延时/所有取反10次,既闪耀5次6/*间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,挨次到8个管亮,此后重复整个过程。*/*/#include/52单片机头文件#include/包括有左右循环移位子函数的库#defineuintunsignedint/宏定义#defineucharunsignedchar/宏定义voiddelay(uintz)/延时函数,z的取值为这个函数的延时200ms./delay(500);大概延时500ms.ms数,如delay(200);大概延时uintx,y;for(x=z;x0;x-)for(y=110;y0;y-);voidm

25、ain()/主函数uchara,i,j;while(1)/大循环a=0 xfe;/赋初值for(j=0;j8;j+)for(i=0;i8-j;i+)/左移P1=a;/点亮小灯delay(200);/延时200毫秒a=_crol_(a,1);/将a变量循环左移一位a=_crol_(a,j);/补齐,方便下边的左移一位P1=0 xff;a=a1;/所有封闭/左移一位让多一个灯点亮7/*间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个所有闪耀3次;封闭发光管,程序停止。*/*/#include/52单片机头文件#include/

26、包括有左右循环移位子函数的库#defineuintunsignedint/宏定义#defineucharunsignedchar/宏定义voiddelay(uintz)/延时函数,z的取值为这个函数的延时200ms./delay(500);大概延时500ms.ms数,如delay(200);大概延时uintx,y;for(x=z;x0;x-)for(y=110;y0;y-);voidmain()/主函数uchara,i,j;for(j=0;j3;j+)/寄偶交替P1=0 x55;delay(300);/点亮小灯延时300毫秒P1=0 xaa;delay(300);/延时300毫秒for(j=0

27、;j3;j+)/流水灯a=0 xfe;for(i=0;i8;i+)P1=a;/点亮小灯delay(300);/延时300毫秒a=_crol_(a,1);P1=0 xff;for(j=0;j3;j+)/从两边往中间流P1=0 x7e;/点亮小灯delay(300);/延时300毫秒P1=0 xbd;delay(300);/延时300毫秒P1=0 xdb;/点亮小灯delay(300);/延时300毫秒P1=0 xe7;delay(300);/延时300毫秒P1=0 xff;for(j=0;j3;j+)/从中间往两边流P1=0 xe7;/点亮小灯delay(300);/延时300毫秒P1=0 xd

28、b;delay(300);/延时300毫秒P1=0 xbd;/点亮小灯delay(300);/延时300毫秒P1=0 x7e;delay(300);/延时300毫秒P1=0 xff;for(j=0;j6;j+)/所有闪耀P1=P1;/点亮小灯delay(300);/延时300毫秒P1=0 xff;while(1);Lesson31/*利用准时/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪耀,设晶振频次为12MHz。?*/*/#include/52单片机头文件#include/包括有左右循环移位子函数的库#defineuintunsignedint/宏定义#defineuch

29、arunsignedchar/宏定义sbitP1_0=P10;uchartt;voidmain()/主函数TMOD=0 x01;/设置准时器TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;/开总中止ET0=1;/开准时器0中止0为工作方式1TR0=1;/启动准时器0while(1);/等候中止产生voidtimer0()interrupt1TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt+;if(tt=20)tt=0;P1_0=P1_0;2/*利用准时/计数器T1产生准不时钟,由P1口控制8个发光二极

30、管,使8个指示灯挨次一个一个闪耀,闪耀频次为10次/秒(8个灯挨次亮一遍为一个周期),循环。设晶振频次为12MHz。*/*/#include/52单片机头文件#include/包括有左右循环移位子函数的库#defineuintunsignedint/宏定义#defineucharunsignedchar/宏定义sbitP1_0=P10;uchartt,a;voidmain()/主函数TMOD=0 x01;/设置准时器0为工作方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;/开总中止ET0=1;/开准时器0中止TR0=1;/启动准时器0a=

31、0 xfe;while(1);/等候中止产生voidtimer0()interrupt1TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt+;if(tt=2)tt=0;P1=a;a=_crol_(a,1);3/*同时用两个准时器控制蜂鸣器发声,准时器0控制频次,准时器1控制同个频次连续的时间,间隔2s挨次输出1,10,50,100,200,400,800,1k(hz)的方波?设晶振频次为12MHz。*/*/#include/52单片机头文件#include/包括有左右循环移位子函数的库#defineuintunsignedint#defineuchar

32、unsignedchar/宏定义/宏定义sbitbeep=P23;uchartt;uintfre,flag;voidmain()/主函数fre=50000;beep=0;TMOD=0 x11;/设置准时器0,准时器1为工作方式1TH0=(65536-fre)/256;TL0=(65536-fre)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;/开总中止ET0=1;/开准时器0中止ET1=1;TR1=1;TR0=1;/启动准时器0while(1);/等候中止产生voidtimer0()interrupt1/准时器0中止TR0=0;/进

33、中止后先把准时器TH0=(65536-fre)/256;TL0=(65536-fre)%256;0中止封闭,防备内部程序过多而造成中止抛弃tt+;if(flag=40&flag=80&flag=120&flag=160&flag=200&flag=240&flag=280&flag=320&flag360)tt=0;fre=156;beep=beep;TR0=1;voidtimer1()interrupt3/准时器1中止用来产生2秒时间准时TH1=(65536-50000)/256;TL1=(65536-50000)%256;flag+;if(flag=360)flag=0;fre=50000

34、;4/*用准时器以间隔500MS在6位数码管上挨次显示0、1、2、3C、D、E、F,重复。设时钟频次为12M*/*/#include/52单片机头文件#include/包括有左右循环移位子函数的库#defineuintunsignedint/宏定义#defineucharunsignedchar/宏定义sbitdula=P26;/数码管段选锁存端sbitwela=P27;/数码管位选锁存端ucharnum,tt;ucharcodetable=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39

35、,0 x5e,0 x79,0 x71;voidmain()num=0;tt=0;TMOD=0 x01;/设置准时器0为工作方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;/开总中止ET0=1;/开准时器0中止TR0=1;/启动准时器0dula=1;P0=0 x3f;/给段开始送显示0。dula=0;/封闭段选锁存端,防备开始时出现乱码。wela=1;/11101010P0=0 xc0;/翻开六个数码管位选wela=0;while(1)if(tt=10)/每进入10次中止即为500ms,履行一次显示变化。tt=0;num+;if(num=1

36、6)num=0;dula=1;P0=tablenum;dula=0;voidexter0()interrupt1/准时器0中止TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt+;Lesson41/*利用动向扫描方法在六位数码管上显示出坚固的654321.时钟频次为11.0592M*/*/#include/52单片机头文件#include/包括有左右循环移位子函数的库#defineuintunsignedint/宏定义#defineucharunsignedchar/宏定义sbitdula=P26;/数码管段选锁存端sbitwela=P27;/数码管位

37、选锁存端ucharcodetable=/数码管显示编码0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;voiddisplay(uchar,uchar,uchar,uchar,uchar,uchar);/函数申明voiddelay(uint);voidmain()while(1)display(6,5,4,3,2,1);/向来显示voiddisplay(ucharone,uchartwo,ucharthree,ucharfour,ucharfive,uc

38、harsix)dula=1;P0=tableone;/送段数据dula=0;P0=0 xff;/送位数据前封闭所有显示,防备翻开位选锁存后段选数据经过位选锁存器wela=1;P0=0 xfe;wela=0;delay(1);dula=1;P0=tabletwo;dula=0;P0=0 xff;wela=1;P0=0 xfd;wela=0;delay(1);dula=1;P0=tablethree;dula=0;P0=0 xff;wela=1;P0=0 xfb;wela=0;delay(1);dula=1;P0=tablefour;dula=0;P0=0 xff;wela=1;P0=0 xf7;

39、wela=0;delay(1);dula=1;P0=tablefive;dula=0;P0=0 xff;wela=1;P0=0 xef;wela=0;delay(1);dula=1;P0=tablesix;dula=0;P0=0 xff;wela=1;P0=0 xdf;wela=0;delay(1);voiddelay(uintz)/延时子函数uintx,y;for(x=z;x0;x-)for(y=110;y0;y-);2/*用动向扫描方法和准时器1在数码管的前三位显示出秒表,精准到1%秒,即最后一位显示1%秒,向来循环下去设时钟频次为12M*/*/#include/52单片机头文件#incl

40、ude/包括有左右循环移位子函数的库#defineuintunsignedint/宏定义#defineucharunsignedchar/宏定义sbitdula=P26;/数码管段选锁存端sbitwela=P27;/数码管位选锁存端ucharge,shi,bai;uinttt;ucharcodetable=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;voiddisplay(uchar,uchar,uchar);/函数申明voiddelay(uint

41、);voidmain()TMOD=0 x10;/设置准时器1为工作方式1TH1=(65536-10000)/256;TL1=(65536-10000)%256;EA=1;/开总中止ET1=1;/开准时器1中止TR1=1;/启动准时器1while(1)display(bai,shi,ge);voidexter0()interrupt3/准时器1中止TH1=(65536-10000)/256;TL1=(65536-10000)%256;tt+;if(tt=1000)tt=0;bai=tt/100;shi=tt%100/10;ge=tt%10;voiddisplay(ucharone,uchartw

42、o,ucharthree)dula=1;P0=tableone;/送段数据dula=0;P0=0 xff;/送位数据前封闭所有显示,防备翻开位选锁存后段选数据经过位选锁存器wela=1;P0=0 xfe;wela=0;delay(1);dula=1;P0=tabletwo;dula=0;P0=0 xff;wela=1;P0=0 xfd;wela=0;delay(1);dula=1;P0=tablethree;dula=0;P0=0 xff;wela=1;P0=0 xfb;wela=0;delay(1);voiddelay(uintz)/延时子函数uintx,y;for(x=z;x0;x-)fo

43、r(y=110;y0;y-);3/*利用动向扫描和准时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用准时器0以500MS速度进行流水灯从上至下挪动,当数码管上数减到停止时,实验板上流水灯也停止此后所有开始闪耀,3秒后(用T0准时)流水灯所有封闭、数码管上显示出HELLO。到此保持住。设晶振频次为12MHz。*/*/#include/52单片机头文件#include/包括有左右循环移位子函数的库#defineuintunsignedint/宏定义#defineucharunsignedchar/宏定义sbitdula=P26;sbit

44、wela=P27;ucharcodetable=/显示数据编码0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x76,0 x79,0 x38,0 x3f,0;uchartemp,t0,t1,bai,shi,ge,flag,flag1;uintshu;voidinit();/函数申明voiddisplay(ucharaa,ucharbb,ucharcc,ucharbai,ucharshi,ucharge);voiddelay(uintz)/延时子函数

45、uintx,y;for(x=z;x0;x-)for(y=110;y0;y-);voidmain()/主函数init();while(1)if(flag1!=1)/假如flagi不再等于1则显示数据display(7,6,5,bai,shi,ge);elsedisplay(16,17,18,18,19,20);/不然显示hellovoidinit()/初始化函数shu=432;temp=0 xfe;P1=temp;TMOD=0 x11;TH0=(65536-50000)/256;/准时器初始化TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(655

46、36-50000)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;voidtimer0()interrupt1/准时器0中止TH0=(65536-50000)/256;TL0=(65536-50000)%256;t0+;if(flag!=1)/flag不等于1时进行流水灯if(t0=10)t0=1;temp=_crol_(temp,1);P1=temp;else/不然进行灯闪耀if(t0%4=0)/小灯每200毫秒变化一次P1=P1;if(t0=60)TR0=0;/3秒后封闭准时器0,封闭灯,并置flag=1P1=0 xff;flag1=1;voidtimer1()inte

47、rrupt3/准时器1中止函数TH1=(65536-50000)/256;TL1=(65536-50000)%256;t1+;if(t1=2)t1=0;shu-;bai=shu/100;shi=shu%100/10;ge=shu%10;if(shu=398)/当到398时把本来T0中的数除掉,从头加裁初值让小灯闪烁TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;flag=1;t0=0;P1=0 xff;TR1=0;voiddisplay(ucharaa,ucharbb,ucharcc,ucharbai,ucharshi,uchar

48、ge)/显示子函数dula=1;P0=tableaa;dula=0;P0=0 xff;wela=1;P0=0 xfe;wela=0;delay(1);dula=1;P0=tablebb;dula=0;P0=0 xff;wela=1;P0=0 xfd;wela=0;delay(1);dula=1;P0=tablecc;dula=0;P0=0 xff;wela=1;P0=0 xfb;wela=0;delay(1);dula=1;P0=tablebai;dula=0;P0=0 xff;wela=1;P0=0 xf7;wela=0;delay(1);dula=1;P0=tableshi;dula=0;

49、P0=0 xff;wela=1;P0=0 xef;wela=0;delay(1);dula=1;P0=tablege;dula=0;P0=0 xff;wela=1;P0=0 xdf;wela=0;delay(1);数码管前三位显示一个跑表,从000到999之间以1%秒速度运转,当按下一个独立键盘时跑表停止,松开手后跑表连续运转。(用准时器设计表)。#include#include#defineuintunsignedint#defineucharunsignedcharsbitdula=P26;sbitwela=P27;sbits2=P34;ucharcodetable=0 x3f,0 x06

50、,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x76,0 x79,0 x38,0 x3f,0;ucharflag,t0,ge,shi,bai;uintshu;voidinit();voiddisplay(ucharaa,ucharbb,ucharcc);voiddelay(uintz)uintx,y;for(x=z;x0;x-)for(y=110;y0;y-);voidmain()init();while(1)display(bai,shi,ge);if(s2=0)d

51、elay(10);if(s2=0)TR0=0;while(!s2)display(bai,shi,ge);TR0=1;voidinit()TMOD=0 x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1;ET0=1;TR0=1;voidtimer0()interrupt1TH0=(65536-10000)/256;TL0=(65536-10000)%256;shu+;if(shu=1000)shu=0;bai=shu/100;shi=shu%100/10;ge=shu%10;voiddisplay(ucharaa,ucharbb,uchar

52、cc)dula=1;P0=tableaa;dula=0;P0=0 xff;wela=1;P0=0 xfe;wela=0;delay(1);dula=1;P0=tablebb;dula=0;P0=0 xff;wela=1;P0=0 xfd;wela=0;delay(1);dula=1;P0=tablecc;dula=0;P0=0 xff;wela=1;P0=0 xfb;wela=0;delay(1);在上题的基础上,用其他三个独立键盘实现按下第一个时计时停止,按下第二个时计时开始,按下第三个是计数值清零从头开始。#include#include#defineuintunsignedint#def

53、ineucharunsignedcharsbitdula=P26;sbitwela=P27;sbits2=P34;sbits3=P35;sbits4=P36;sbits5=P37;ucharcodetable=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x76,0 x79,0 x38,0 x3f,0;ucharflag,t0,ge,shi,bai;uintshu;voidinit();voiddisplay(ucharaa,ucharbb,uc

54、harcc);voiddelay(uintz)uintx,y;for(x=z;x0;x-)for(y=110;y0;y-);voidmain()init();while(1)display(bai,shi,ge);if(s2=0)delay(10);if(s2=0)TR0=0;while(!s2)display(bai,shi,ge);TR0=1;if(s3=0)delay(10);if(s3=0)while(!s2)display(bai,shi,ge);TR0=0;if(s4=0)delay(10);if(s4=0)while(!s2)display(bai,shi,ge);TR0=1;i

55、f(s5=0)delay(10);if(s5=0)while(!s2)display(bai,shi,ge);shu=0;voidinit()TMOD=0 x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1;ET0=1;TR0=1;voidtimer0()interrupt1TH0=(65536-10000)/256;TL0=(65536-10000)%256;shu+;if(shu=1000)shu=0;bai=shu/100;shi=shu%100/10;ge=shu%10;voiddisplay(ucharaa,ucharbb,uch

56、arcc)dula=1;P0=tableaa;dula=0;P0=0 xff;wela=1;P0=0 xfe;wela=0;delay(1);dula=1;P0=tablebb;dula=0;P0=0 xff;wela=1;P0=0 xfd;wela=0;delay(1);dula=1;P0=tablecc;dula=0;P0=0 xff;wela=1;P0=0 xfb;wela=0;delay(1);按下16个矩阵键盘挨次在数码管上显示如按下第一个显示1,第二个显示4.1-16的平方。#include#defineuintunsignedint#defineucharunsignedchar

57、sbitdula=P26;sbitwela=P27;sbitkey1=P34;ucharcodetable=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;uchartemp;uintnum,num1;voiddelay(uintz)uintx,y;for(x=z;x0;x-)for(y=110;y0;y-);uintkeyscan();voiddisplay(uchar,uchar,uchar);voidmain()dula=1;P0=0;dula=

58、0;wela=1;P0=0 xc0;wela=0;while(1)num1=keyscan();display(num1/100,num1%100/10,num1%10);voiddisplay(ucharaa,ucharbb,ucharcc)dula=1;P0=tableaa;dula=0;P0=0 xff;wela=1;P0=0 xfe;wela=0;delay(1);dula=1;P0=tablebb;dula=0;P0=0 xff;wela=1;P0=0 xfd;wela=0;delay(1);dula=1;P0=tablecc;dula=0;P0=0 xff;wela=1;P0=0

59、xfb;wela=0;delay(1);uintkeyscan()P3=0 xfe;temp=P3;temp=temp&0 xf0;while(temp!=0 xf0)delay(5);temp=P3;temp=temp&0 xf0;while(temp!=0 xf0)temp=P3;switch(temp)case0 xee:num=1;break;case0 xde:num=4;break;case0 xbe:num=9;break;case0 x7e:num=16;break;while(temp!=0 xf0)temp=P3;temp=temp&0 xf0;P3=0 xfd;temp=

60、P3;temp=temp&0 xf0;while(temp!=0 xf0)delay(5);temp=P3;temp=temp&0 xf0;while(temp!=0 xf0)temp=P3;switch(temp)case0 xed:num=25;break;case0 xdd:num=36;break;case0 xbd:num=49;break;case0 x7d:num=64;break;while(temp!=0 xf0)temp=P3;temp=temp&0 xf0;P3=0 xfb;temp=P3;temp=temp&0 xf0;while(temp!=0 xf0)delay(5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论