郭天祥_十天学通单片机_所有课后作业+答案 .pdf

上传人:Che****ry 文档编号:34233157 上传时间:2022-08-15 格式:PDF 页数:45 大小:249.76KB
返回 下载 相关 举报
郭天祥_十天学通单片机_所有课后作业+答案 .pdf_第1页
第1页 / 共45页
郭天祥_十天学通单片机_所有课后作业+答案 .pdf_第2页
第2页 / 共45页
点击查看更多>>
资源描述

《郭天祥_十天学通单片机_所有课后作业+答案 .pdf》由会员分享,可在线阅读,更多相关《郭天祥_十天学通单片机_所有课后作业+答案 .pdf(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、lesson1 对照 TX-1C单片机学习板原理图写程序用位操作和总线操作两种方法完成以下题目1.熟练建立 KEIL工程2.点亮第一个发光管 . 3.点亮最后一个发光管4.点亮 1、3、5、7 5.点亮二、四、五、六6.尝试让第一个发光管闪烁7.尝试设计出流水灯程序= lesson2 第一个发光管以间隔200ms闪烁8 个发光管由上至下间隔1s流动,其中每个管亮500ms, 灭 500ms, 亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。8 个发光管来回流动,第个管亮100ms, 流动时让蜂鸣器发出“滴滴”声。用 8 个发光管演示出8 位二进制数累加过程。8 个发光管间隔 200ms由上至下,再

2、由下至上, 再重复一次, 然后全名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 45 页 - - - - - - - - - 部熄灭再以 300ms间隔全部闪烁 5 次。重复此过程。间隔 300ms 第一次一个管亮流动一次,第二次两个管亮流动,依次到 8 个管亮,然后重复整个过程。间隔 300ms 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8 个全部闪烁 3 次;关闭发光管,程序停止。= lesson3 1、利用

3、定时 /计数器 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,重复。lesson4 名师资

4、料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 45 页 - - - - - - - - - 1.利用动态扫描方法在六位数码管上显示出稳定的654321. 2.用动态扫描方法和定时器1 在数码管的前三位显示出秒表,精确到1%秒,即后两位显示1%秒,一直循环下去。3.利用动态扫描和定时器1 在数码管上显示出从765432 开始以 1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用定时器 0 以 500MS 速度进行流水灯从上至下移动,当数码管上数减到停止时,实验

5、板上流水灯也停止然后全部开始闪烁,3 秒后(用 T0 定时)流水灯全部关闭、数码管上显示出“HELLO ” 。到此保持住。lesson5 数码管前三位显示一个跑表,从000 到 999 之间以 1%秒速度运行,当按下一个独立键盘时跑表停止,松开手后跑表继续运行。(用定时器设计表 )。在上题的基础上,用另外三个独立键盘实现按下第一个时计时停止,按下第二个时计时开始,按下第三个是计数值清零从头开始。按下 16 个矩阵键盘依次在数码管上显示1-16 的平方。如按下第一个显示 1,第二个显示 4. = 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -

6、 - - - 名师精心整理 - - - - - - - 第 3 页,共 45 页 - - - - - - - - - lesson7 1.由上位机发送 1 给单片机时,蜂鸣器以 400ms频率发声,发 2 时以200ms频率发声,发 3 时以 100ms频率发声,发 4 时关闲蜂鸣器。1.以 2400bps从计算机发送任一字节数据,当单片机收到该数据后,在此数据前加上一序号然后连同此数据一起发送至计算机,当序号超过 255 时归零。2.以 16 进制发送一个0-65536 之间的任一数,当单片机收到后在数码管上动态显示出来,波特率自定。3. 用 AD 以 1HZ 的频率采集模拟信号,然后转换成

7、数字量,再将其以 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 单片机头文件sbit led1=P10; / 单片机管脚位声明void main() / 主函数 led1=0; / 将单片机P1.0 口清零while(1); / 程序

8、停止在这里,在后面会讲到为什么这样写。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 45 页 - - - - - - - - - 2/ 用总线操作点亮第一个发光管. / 适用TX-1C单片机实验板/ 晶振为 11.0592M /*/ #include /52 单片机头文件void main() / 主函数 P1=0 xfe; / 将单片机P1 口的 8 个口由高到低分别赋值为11111110 while(1); / 程序停止在这里,在后面会讲到为什么这样写。 3 / /

9、 用位操作点亮最后一个发光管. / 适用TX-1C单片机实验板/ 晶振为 11.0592M /*/ #include /52 单片机头文件sbit led8=P17; / 单片机管脚位声明void main() / 主函数 led8=0; / 将单片机P1.7 口清零while(1); / 程序停止在这里,在后面会讲到为什么这样写。 4 / 用总线操作点亮最后一个发光管. / 适用TX-1C单片机实验板/ 晶振为 11.0592M /*/ #include /52 单片机头文件void main() / 主函数 P1=0 x7f; / 将单片机P1 口的 8 个口由高到低分别赋值为011111

10、11 while(1); / 程序停止在这里,在后面会讲到为什么这样写。 5 / 用位操作点亮1,3,5,7 发光管 . / 适用TX-1C单片机实验板/ 晶振为 11.0592M /*/ #include /52 单片机头文件sbit led1=P10; / 单片机管脚位声明名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 45 页 - - - - - - - - - sbit led3=P12; / 单片机管脚位声明sbit led5=P14; / 单片机管脚位声明sb

11、it led7=P16; / 单片机管脚位声明void main() / 主函数 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 单片机头文件void main() / 主函数 P1=0 xaa; / 将单片机P1 口的 8 个口由高到低分别赋值为101010

12、10 while(1); / 程序停止在这里,在后面会讲到为什么这样写。 7 / 用位操作点亮2,4,5,6 发光管 . / 适用TX-1C单片机实验板/ 晶振为 11.0592M /*/ #include /52 单片机头文件sbit led2=P11; / 单片机管脚位声明sbit led4=P13; / 单片机管脚位声明sbit led5=P14; / 单片机管脚位声明sbit led6=P15; / 单片机管脚位声明void main() / 主函数 led2=0; / 将单片机P1.1 口清零led4=0; / 将单片机P1.3 口清零led5=0; / 将单片机P1.4 口清零le

13、d6=0; / 将单片机P1.5 口清零while(1); / 程序停止在这里,在后面会讲到为什么这样写。 8 / 用总线操作点亮2,4,5,6 发光管 . / 适用TX-1C单片机实验板/ 晶振为 11.0592M 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 45 页 - - - - - - - - - /*/ #include /52 单片机头文件void main() / 主函数 P1=0 xc5; / 将单片机P1 口的 8 个口由高到低分别赋值为110001

14、01 while(1); / 程序停止在这里,在后面会讲到为什么这样写。 9 / 尝试让第一个发光管闪烁.(程序看不懂没关系,后面章节会有详细讲解) / 适用TX-1C单片机实验板/ 晶振为 11.0592M /*/ #include /52 单片机头文件sbit led1=P10; / 单片机管脚位声明void main() / 主函数 unsigned int i; / 定义一个int 型变量while(1) i=50000; / 变量赋初值为50000 led1=0; / 点亮灯while(i-); / 延时i=50000; led1=1; / 熄灭灯while(i-); 9 / 尝试写

15、出流水灯程序(程序看不懂没关系,后面章节会有详细讲解) / 适用TX-1C单片机实验板/ 晶振为 11.0592M /*/ #include /52 单片机头文件void main() / 主函数 unsigned int i; / 定义一个int 型变量while(1) i=50000; / 变量赋初值为50000 P1=0 xfe; / 点亮第一个灯while(i-); / 延时名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 45 页 - - - - - - - -

16、- i=50000; / 变量赋初值为50000 P1=0 xfd; / 点亮第二个灯while(i-); / 延时i=50000; / 变量赋初值为50000 P1=0 xfb; / 点亮第三个灯while(i-); / 延时i=50000; / 变量赋初值为50000 P1=0 xf7; / 点亮第四个灯while(i-); / 延时i=50000; / 变量赋初值为50000 P1=0 xef; / 点亮第五个灯while(i-); / 延时i=50000; / 变量赋初值为50000 P1=0 xdf; / 点亮第六个灯while(i-); / 延时i=50000; / 变量赋初值为5

17、0000 P1=0 xbf; / 点亮第七个灯while(i-); / 延时i=50000; / 变量赋初值为50000 P1=0 x7f; / 点亮第八个灯while(i-); / 延时 Lesson 2 1 / 第一个发光管以间隔200ms 闪烁/ 适用TX-1C单片机实验板/ 晶振为 11.0592M /*/ #include /52 单片机头文件#define uint unsigned int / 宏定义#define uchar unsigned char / 宏定义sbit led1=P10; / 单片机管脚位声明void delay(uint z) / 延时函数 ,z 的取值为

18、这个函数的延时ms 数,如delay(200);大约延时200ms. /delay(500); 大约延时500ms. uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void main() / 主函数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 45 页 - - - - - - - - - while(1) / 大循环 led1=0; / 点亮小灯delay(200); / 延时 200 毫秒led1=1; / 熄灭小灯delay(

19、200); / 延时 200 毫秒 2 / 8 个发光管由上至下间隔1s 流动/ ,其中每个管亮500ms,灭 500ms,亮时蜂鸣器响/ ,灭时关闭蜂鸣器,一直重复下去。/ 适用TX-1C单片机实验板/ 晶振为 11.0592M /*/ #include /52 单片机头文件#include / 包含有左右循环移位子函数的库#define uint unsigned int / 宏定义#define uchar unsigned char / 宏定义sbit beep=P23; void delay(uint z) / 延时函数 ,z 的取值为这个函数的延时ms 数,如delay(200);

20、大约延时200ms. /delay(500); 大约延时500ms. uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void main() / 主函数 uchar a; a=0 xfe; while(1) / 大循环 P1=a; / 点亮小灯beep=0; / 开启蜂鸣器delay(500); / 延时 500 毫秒P1=0 xff; / 熄灭小灯beep=1; / 关闭蜂鸣器delay(500); / 延时 500 毫秒a=_crol_(a,1); / 将 a 变量循环左移一位 3 /* 名师资料总结 - - -精品资料欢迎下载 - - - - - -

21、 - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 45 页 - - - - - - - - - 8 个发光管来回流动,每个管亮 100ms,流动时让蜂鸣器发出滴滴 声。*/ /*/ #include /52 单片机头文件#include / 包含有左右循环移位子函数的库#define uint unsigned int / 宏定义#define uchar unsigned char / 宏定义sbit beep=P23; void delay(uint z) / 延时函数 ,z 的取值为这个函数的延时ms 数,如delay(200);

22、大约延时200ms. /delay(500); 大约延时500ms. uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void main() / 主函数 uchar a,i; while(1) / 大循环 a=0 xfe; / 赋初值for(i=0;i8;i+) / 左移 P1=a; / 点亮小灯beep=0; / 开启蜂鸣器delay(50); / 延时 50 毫秒beep=1; / 关闭蜂鸣器delay(50); / 再延时 50 毫秒a=_crol_(a,1); / 将 a 变量循环左移一位 a=0 x7f; for(i=0;i8;i+) / 右移

23、P1=a; / 点亮小灯beep=0; / 开启蜂鸣器delay(50); / 延时 50 毫秒beep=1; / 关闭蜂鸣器delay(50); / 再延时 50 毫秒a=_cror_(a,1); / 将 a 变量循环右移一位 4 /* 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 45 页 - - - - - - - - - 用 8 个发光管演示出8 位二进制数累加过程。*/ /*/ #include /52 单片机头文件#include / 包含有左右循环移位子

24、函数的库#define uint unsigned int / 宏定义#define uchar unsigned char / 宏定义void delay(uint z) / 延时函数 ,z 的取值为这个函数的延时ms 数,如delay(200);大约延时200ms. /delay(500); 大约延时500ms. uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void main() / 主函数 uchar a; while(1) / 大循环 a+; P1=a; delay(200); 5 /* 8 个发光管间隔200ms 由上至下,再由下至上,再重复

25、一次,然后全部熄灭再以300ms 间隔全部闪烁 5 次。重复此过程*/ /*/ #include /52 单片机头文件#include / 包含有左右循环移位子函数的库#define uint unsigned int / 宏定义#define uchar unsigned char / 宏定义void delay(uint z) / 延时函数 ,z 的取值为这个函数的延时ms 数,如delay(200);大约延时200ms. /delay(500); 大约延时500ms. uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void main() / 主函数

26、 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 45 页 - - - - - - - - - uchar a,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(

27、200); / 延时 200 毫秒a=_cror_(a,1); / 将 a 变量循环右移一位 P1=0 xff; / 全部熄灭for(j=0;j10;j+) delay(300); / 延时P1=P1; / 全部取反10 次,既闪烁5 次 6 /* 间隔 300ms 第一次一个管亮流动一次,第二次两个管亮流动,依次到8 个管亮,然后重复整个过程。*/ /*/ #include /52 单片机头文件#include / 包含有左右循环移位子函数的库#define uint unsigned int / 宏定义#define uchar unsigned char / 宏定义void delay(

28、uint z) / 延时函数 ,z 的取值为这个函数的延时ms 数,如delay(200);大约延时200ms. /delay(500); 大约延时500ms. uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 45 页 - - - - - - - - - void main() / 主函数 uchar a,i,j; while(1) / 大循环 a=0 xfe; / 赋初值for(j=

29、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 / 包含有左右循环移位子函数的库#

30、define uint unsigned int / 宏定义#define uchar unsigned char / 宏定义void delay(uint z) / 延时函数 ,z 的取值为这个函数的延时ms 数,如delay(200);大约延时200ms. /delay(500); 大约延时500ms. uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void main() / 主函数 uchar a,i,j; for(j=0;j3;j+) / 寄偶交替名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -

31、 - - - 名师精心整理 - - - - - - - 第 13 页,共 45 页 - - - - - - - - - P1=0 x55; / 点亮小灯delay(300); / 延时 300 毫秒P1=0 xaa; delay(300); / 延时 300 毫秒 for(j=0;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

32、毫秒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 xdb; delay(300); / 延时 300 毫秒P1=0 xbd; / 点亮小灯delay(300); / 延时 300 毫秒P1=0 x7e; delay(300); / 延时 300 毫秒 P1=0 xff; fo

33、r(j=0;j6;j+) / 全部闪烁 P1=P1; / 点亮小灯名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 45 页 - - - - - - - - - delay(300); / 延时 300 毫秒 P1=0 xff; while(1); Lesson3 1 /* 利用定时 /计数器 T0从 P1.0 输出周期为1s 的方波,让发光二极管以1HZ闪烁,设晶振频率为12MHz。? */ /*/ #include /52 单片机头文件#include / 包含有左右

34、循环移位子函数的库#define uint unsigned int / 宏定义#define uchar unsigned char / 宏定义sbit P1_0=P10; uchar tt; void main() / 主函数 TMOD=0 x01;/ 设置定时器0 为工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;/开总中断ET0=1;/开定时器0 中断TR0=1;/ 启动定时器0 while(1);/ 等待中断产生 void timer0() interrupt 1 TH0=(65536-50000)/256; TL0=

35、(65536-50000)%256; tt+; if(tt=20) tt=0; P1_0=P1_0; 2 /* 利用定时 /计数器 T1 产生定时时钟 , 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 45 页 - - - - - - - - - 由 P1口控制 8 个发光二极管, 使 8 个指示灯依次一个一个闪动,闪动频率为10 次/秒 (8 个灯依次亮一遍为一个周期),循环。设晶振频率为12MHz。*/ /*/ #include /52 单片机头文件#includ

36、e / 包含有左右循环移位子函数的库#define uint unsigned int / 宏定义#define uchar unsigned char / 宏定义sbit P1_0=P10; uchar tt,a; void main() / 主函数 TMOD=0 x01;/ 设置定时器0 为工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;/开总中断ET0=1;/开定时器0 中断TR0=1;/ 启动定时器0 a=0 xfe; while(1);/ 等待中断产生 void timer0() interrupt 1 TH0=(65

37、536-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。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 45 页 - - - - - - - - - */

38、 /*/ #include /52 单片机头文件#include / 包含有左右循环移位子函数的库#define uint unsigned int / 宏定义#define uchar unsigned char / 宏定义sbit beep=P23; uchar tt; uint fre,flag; void main() / 主函数 fre=50000; beep=0; TMOD=0 x11;/ 设置定时器0,定时器 1 为工作方式1 TH0=(65536-fre)/256; TL0=(65536-fre)%256; TH1=(65536-50000)/256; TL1=(65536-5

39、0000)%256; EA=1;/开总中断ET0=1;/开定时器0 中断ET1=1; TR1=1; TR0=1;/ 启动定时器0 while(1);/ 等待中断产生 void timer0() interrupt 1 / 定时器 0 中断 TR0=0; / 进中断后先把定时器0 中断关闭,防止内部程序过多而造成中断丢失TH0=(65536-fre)/256; TL0=(65536-fre)%256; tt+; if(flag=40&flag=80&flag=120&flag=160&flag=200&flag=240&flag=280&flag=320&flag360) tt=0; fre=1

40、56; beep=beep; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 45 页 - - - - - - - - - TR0=1; void timer1() interrupt 3 / 定时器 1 中断用来产生2 秒时间定时 TH1=(65536-50000)/256; TL1=(65536-50000)%256; flag+; if(flag=360) flag=0; fre=50000; 4 /* 用定时器以间隔500MS 在 6 位数码管上依次显示0、1、

41、2、3.C、D、E、 F,重复。设时钟频率为12M */ /*/ #include /52 单片机头文件#include / 包含有左右循环移位子函数的库#define uint unsigned int / 宏定义#define uchar unsigned char / 宏定义sbit dula=P26; / 数码管段选锁存端sbit wela=P27; / 数码管位选锁存端uchar num,tt; uchar code table= 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

42、x39,0 x5e,0 x79,0 x71; void main() num=0; tt=0; TMOD=0 x01;/ 设置定时器0 为工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;/开总中断ET0=1;/开定时器0 中断TR0=1;/ 启动定时器0 dula=1; P0=0 x3f; / 给段开始送显示0。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 45 页 - - - - - - - - -

43、dula=0;/ 关闭段选锁存端,防止开始时出现乱码。wela=1;/11101010 P0=0 xc0; / 打开六个数码管位选wela=0; while(1) if(tt=10) / 每进入 10 次中断即为500ms,执行一次显示变化。 tt=0; num+; if(num=16) num=0; dula=1; P0=tablenum; dula=0; void exter0() interrupt 1 / 定时器 0 中断 TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt+; Lesson4 1 /* 利用动态扫描方法在六位数码管上显示出

44、稳定的654321. 时钟频率为11.0592M */ /*/ #include /52 单片机头文件#include / 包含有左右循环移位子函数的库#define uint unsigned int / 宏定义#define uchar unsigned char / 宏定义sbit dula=P26; / 数码管段选锁存端sbit wela=P27; / 数码管位选锁存端uchar code table= / 数码管显示编码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

45、x5e,0 x79,0 x71; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 45 页 - - - - - - - - - void display(uchar,uchar,uchar,uchar,uchar,uchar); / 函数声明void delay(uint); void main() while(1) display(6,5,4,3,2,1); / 始终显示 void display(uchar one,uchar two,uchar three,uch

46、ar four,uchar five,uchar six) 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); dul

47、a=1; P0=tablefour; dula=0; P0=0 xff; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 45 页 - - - - - - - - - wela=1; P0=0 xf7; 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; we

48、la=1; P0=0 xdf; wela=0; delay(1); void delay(uint z) / 延时子函数 uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); 2 /* 用动态扫描方法和定时器1 在数码管的前三位显示出秒表,精确到 1%秒,即最后一位显示1%秒,一直循环下去设时钟频率为12M */ /*/ #include /52 单片机头文件#include / 包含有左右循环移位子函数的库#define uint unsigned int / 宏定义#define uchar unsigned char / 宏定义sbit dula=P26;

49、 / 数码管段选锁存端sbit wela=P27; / 数码管位选锁存端uchar ge,shi,bai; uint tt; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 45 页 - - - - - - - - - uchar code table= 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; void disp

50、lay(uchar,uchar,uchar); / 函数声明void delay(uint); void main() TMOD=0 x10;/ 设置定时器1 为工作方式1 TH1=(65536-10000)/256; TL1=(65536-10000)%256; EA=1;/开总中断ET1=1;/开定时器1 中断TR1=1;/ 启动定时器1 while(1) display(bai,shi,ge); void exter0() interrupt 3 / 定时器 1 中断 TH1=(65536-10000)/256; TL1=(65536-10000)%256; tt+; if(tt=100

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁