郭天祥_十天学通单片机_实验板所有课后作业+答案

合集下载

郭天祥十天学会单片机和C语言编程课件

郭天祥十天学会单片机和C语言编程课件
展望未来的学习
了解如何继续深入学习单片机和C语言编程,并掌握更高级的技术和知识。
技术进阶
1
进一步学习单片机和C语言编程的高级知识和技巧
探索更高级的单片机和C语言编程知识,掌握更多的技巧和技术。
2
创新应用和解决实际问题的能力提升
学习如何创新应用单片机和C语言编程,以及如何解决实际问题。
总结和展望
学习成果总结和个人感悟
回顾您在这十天学习中所取得的成果,并分享您对编程的个人感悟和体会。
郭天祥十天学会单片机ቤተ መጻሕፍቲ ባይዱ C语言编程ppt课件
欢迎来到郭天祥的课程!在这十天的学习中,我们将带您领略单片机和C语言 编程的奇妙世界,掌握编程的基础知识,并通过实践案例和技术进阶,提升 您的编程技巧。
课程介绍
单片机和C语言编程的重要性
了解为什么单片机和C语言编程在现代科技中如此重要,以及掌握它们的好处。
学习目标和课程安排
明确我们在这十天学习中的目标,以及课程的安排和内容概览。
基础知识
探索单片机的基本概念和原理,以及C语言编程的基本语法和常见功能。
实践案例
通过实例学习单片机和C语言编程
通过实际案例学习如何应用单片机和C语言编程,深 入理解他们的工作原理。
实战案例演示和分析
演示一些实战案例,并深入分析案例中的编程技巧 和解决问题的方法。

郭天祥单片机C语言课后答案

郭天祥单片机C语言课后答案

郭天祥单片机C语言课后答案郭天祥十天学通单片机 TX-1C单片机实验板所有课作业+答案,特别整理,供单片机爱好与学习者使用讲次内容细节第一讲学单片机预备知识、如何点亮一个发光管单片机能做什么,基本电子知识,如何用TX-1C单片机学习板学习单片机,C51知识简介,如何申请免费芯片样品。

点亮一个发光管,第二讲流水灯设计、蜂鸣器发声、继电器控制简单延时程序、子程序调用、带参数子程序设计、流水灯同时蜂鸣器响、如何驱动蜂鸣器,及如何驱动继电器,集电极开路的概念及应用。

第三讲数码管显示的原理、数码管的静态显示共阳、共阴数码管显示原理、定时器工作方式介绍、重点讲述工作方式2、中断概念及中断函数写法、外部中断试验、定时器中断应用第四讲数码管的动态显示原理及应用实现动态扫描概念、定时器、中断加深用单片机的定时器及中断设计一个60秒定时器第五讲独立键盘、矩阵键盘的检测原理及实现键盘用来做什么、如何键盘检测、消抖、键盘编码、带返回值函数写法及应用第六讲AD、DA的工作原理及实现、运放电路模拟电压与数字电压的关系、为什么要使用AD及DA、ADC0804的操作方法、DAC0832的操作方法第七讲串口通讯原理及操作流程串口通讯工作方式、10位数据通讯、波特率概念、如何根据波特率计算定时器初值、串口打印在调试程序中的应用。

第八讲1602液晶、12864液晶显示原理及实现最简单液晶工作原理、如何开始对一个没有任何概念的芯片开始单片机的操作第九讲IIC总线AT24C02芯片工作原理IIC总线工作原理、目前非常通用的一种通信机制第十讲利用51单片机的定时器设计一个时钟综合运用51单片机知识设计一个可以随意调节时间、带整点闹铃的时钟。

(其中用到定时器、中断、按键、蜂鸣器、数码管或串口通信)第十一讲用DS12C887时钟芯片设计一个高精度时钟D S12C887内部带有锂电池,系统掉电情况下可自行精确走10年,并带有闹钟功能、年、月、日、时、分、秒等。

十天学会单片机郭天祥(LESSON3_数码管静态显示及定时器和中断应用)

十天学会单片机郭天祥(LESSON3_数码管静态显示及定时器和中断应用)

LED数码显示方式及电路 数码显示方式及电路 静态显示方式
LED显示器工作方式有两种:静态显示方式和动态显示 方式。静态显示的特点是每个数码管的段选必须接一个8位 数据线来保持显示的字形码。当送入一次字形码后,显示字 形可一直保持,直到送入新字形码为止。这种方法的优点是 占用CPU时间少,显示便于监测和控制。缺点是硬件电路比 较复杂,成本较高。
MCS-51单片机的中断系统结构 主程序 中断请求 执行主 程序 断点 继续执行 主程序 执行 中断 处理 程序 中断返回 中断响应
引起CPU中断的根源,称为中断源。中断源向CPU提出 中断的根源,称为中断源。中断源向 引起 中断的根源 中断源 提出 的中断请求。 暂时中断原来的事务A,转去处理事件B。 的中断请求。CPU暂时中断原来的事务 ,转去处理事件 。 暂时中断原来的事务 对事件B处理完毕后 再回到原来被中断的地方( 断点), 处理完毕后, 对事件 处理完毕后,再回到原来被中断的地方(即断点), 称为中断返回。实现上述中断功能的部件称为中断系统 中断系统( 称为中断返回。实现上述中断功能的部件称为中断系统(中 断机构)。 断机构)。
89C52
RXD TXD ALE PSEN
LED
P20
P21
P22
U1
P10 P11 P12 P13 P14 P15 P16 P17 1 2 3 4 5 6 7 8 13 12 15 14 31 19 18 9 17 16 P10 P11 P12 P13 P14 P15 P16 P17 INT1 INT0 T1 T0 P00 P01 P02 P03 P04 P05 P06 P07 P20 P21 P22 P23 P24 P25 P26 P27 VCC GND RXD TXD ALE/P PSEN 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 40 20 10 11 30 29

郭天祥10天学会单片机完整版精品PPT课件

郭天祥10天学会单片机完整版精品PPT课件

▪ 工业自动化:数据采集、测控技术。 ▪ 智能仪器仪表:数字示波器、数字信号源、
数字万用表、感应电流表等。
▪ 消费类电子产品:洗衣机、电冰箱、空调机、 电视机、微波炉、手机、IC卡、汽车电子设 备等。
▪ 通讯方面:调制解调器、程控交换技术、手 机、小灵通等。
▪ 武器装备:飞机、军舰、坦克、导弹、航天 飞机、鱼雷制导、智能武器等。
▪ CPU:由运算和控制逻辑组成,同时还包括 中断系统和部分外部特殊功能寄存器;
▪ RAM:用以存放可以读写的数据,如运算的 中间结果、最终结果以及欲显示的数据;
▪ ROM:用以存放程序、一些原始数据和表格;
▪ I/O口:四个8位并行I/O口,既可用作输入, 也可用作输出;
▪ T/C:两个定时/记数器,既可以工作在定时 模式,也可以工作在记数模式;
﹡ Intel的:80C31、80C51、87C51,80C32、 80C52、87C52等;
﹡ ATMEL的:89C51、89C52、89C2051等; ﹡ Philips、华邦、Dallas 、STC
Siemens(Infineon)等公司的许多产品 。 补充:关于型号的介绍
80C51的引脚封装
总线型
非总线型
80C51/89C51 89C2051
P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 RST/VPD 9 P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.5/T1 15 P3.6/WR 16 P3.7/RD 17 XTAL2 18 XTAL1 19
sfr:特殊功能寄存器声明 sfr16:sfr的16位数据声明 sbit:特殊功能位声明 bit:位变量声明 例:sfr SCON = 0X98;

51单片机C语言教程-郭天祥-PDF转word版第二章

51单片机C语言教程-郭天祥-PDF转word版第二章

本章详细介绍单片机程序常用编译软件Keil的用法,包括用Kei建立工程、工程配置、C51单片机程序软件仿真、单步、全速、断点设置、变量查看等。同时还介绍如何使用SST89E516RD单片机进行计算机与TX-IC单片机学习板之间的硬件仿真。用一个完整的C51程序来操作发光二极管的点亮与熄灭,然后调用C51库函数来方便地实现流水灯,最后为大家补充蜂鸣器与继电器的操作方法及集电极开路与漏极开路的概念。从这一章开始我们将手把手地讲解单片机C语言编程。认真学好本章,对于初学者来说将会是一个非常好的开头。
REG52.H
Header generic 80C52 and 80C32 microcontroller.
Copyright (c) 1988-2001 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved.
--------------------------------------------------------------------------*/
tx1c实验板上发光二极管处连接锁存器的目的是因为发光二极管通过锁存器连接到单片机的p1口而板上ad芯片的数据输出端也连接到单片机的p1口当我们在做ad实验时ad芯片的数据输出端的数据就会实时发生变化而若不加锁存器那么发光二极管的阴极电平也跟随ad的数据输出的变化而变化这样就会看见发光管无规则闪动为了在做ad实验时不影响发光二极管我们在发光二极管与单片机之间加入一个锁存器用以隔离当做ad实验时我们可通过单片机将此锁存器的锁存端关闭而此时无论单片机p1口数据怎么变化发光二极管也不会闪动
完后续的代码而引发出更多的错误。解决办法如下:我们须将错误信息窗口右侧的滚动条拖到最上面,双击第一条错误信息,可以看到Keil软件自动将错误定位,并且在代码行前面出现一个蓝色的箭头。需要说明的是,有些错误连Keil软件自身也不能准确显示错误信息,更不能准确定位,它只能定位到错误出现的大概位置,我们根据这个大概位置和错误提示信息自己再查找和修改错误。双击图2.2.3中第一条错误信息后,显示如图2.2.4所示。

单片机课后重要习题答案

单片机课后重要习题答案

单片机课后重要习题答案单片机课后重要习题答案在学习单片机的过程中,课后习题是巩固知识、提高编程能力的重要环节。

下面是一些常见的单片机课后习题及其答案,供大家参考。

一、基础题1. 请用C语言编写一个程序,实现将一个整数的二进制表示输出到LED灯上。

答案:```c#include <reg52.h>void main(){int num = 10; // 待转换的整数int i;while (1){for (i = 0; i < 8; i++){P1 = num & (1 << i) ? 0xFF : 0x00; // 判断第i位是否为1,是则点亮LED灯delay(); // 延时函数}}```2. 请编写一个程序,实现将一个8位二进制数的奇偶校验位计算出来,并输出到P1口。

答案:```c#include <reg52.h>void main(){unsigned char num = 0b10011010; // 待计算的8位二进制数int count = 0;int i;for (i = 0; i < 8; i++){if (num & (1 << i)){count++;}}P1 = count % 2 ? 0xFF : 0x00; // 奇数个1则输出高电平,偶数个1则输出低电平}二、进阶题1. 请编写一个程序,实现一个简单的计算器功能,能够进行加、减、乘、除四则运算,并将结果输出到数码管上。

答案:```c#include <reg52.h>void main(){unsigned char num1 = 10; // 第一个操作数unsigned char num2 = 5; // 第二个操作数unsigned char operator = '+'; // 运算符,可修改为其他运算符unsigned char result;switch (operator){case '+':result = num1 + num2;break;case '-':result = num1 - num2;break;case '*':result = num1 * num2;break;case '/':result = num1 / num2;break;default:result = 0;break;}// 将结果输出到数码管上P1 = result;}```2. 请编写一个程序,实现一个简单的密码验证功能,用户输入密码后,若密码正确,则点亮一个LED灯,否则不点亮。

单片机的课后习题答案

单片机的课后习题答案

单片机的课后习题答案单片机的课后习题答案在学习单片机的过程中,课后习题是非常重要的一环。

通过解答习题,我们可以巩固所学的知识,提高自己的实践能力。

下面是一些常见的单片机课后习题及其答案,希望对大家的学习有所帮助。

1. 什么是单片机?答:单片机是一种集成电路芯片,具有中央处理器、存储器和各种输入输出接口等功能。

它能够完成各种控制任务,广泛应用于电子产品、仪器仪表、通信设备等领域。

2. 请简述单片机的工作原理。

答:单片机通过接收输入信号,经过处理后,控制输出信号。

其工作原理可以概括为:输入信号经过外部输入接口输入到单片机内部,单片机通过中央处理器对输入信号进行处理,然后根据处理结果通过输出接口控制外部设备。

3. 什么是中断?答:中断是一种机制,用于在单片机运行过程中,处理外部事件的优先级。

当发生中断事件时,单片机会立即中断当前任务,转而执行中断服务程序,处理完中断事件后再返回原来的任务。

4. 请简述中断的优点。

答:中断具有以下几个优点:- 灵活性:中断可以随时响应外部事件,提高系统的实时性和灵活性。

- 高效性:通过中断,可以及时处理紧急事件,提高系统的处理效率。

- 可靠性:中断可以确保关键任务的执行,避免因外部事件而导致的系统故障。

5. 请简述定时器的作用。

答:定时器是单片机中常用的一种外设,用于产生精确的时间延迟。

通过定时器,我们可以实现定时、计数、测量等功能,广泛应用于各种计时、控制、通信等场景。

6. 如何使用定时器产生1秒的延时?答:以8051单片机为例,可以通过设置定时器的初值和工作模式来实现1秒的延时。

具体步骤如下:- 设置定时器的初值,使其在溢出前计数器的值为65536-(机器周期/定时器时钟周期)*(所需延时时间/定时器溢出时间)。

- 设置定时器的工作模式,选择合适的时钟源和分频系数。

- 等待定时器溢出,即可实现1秒的延时。

7. 请简述串口通信的原理。

答:串口通信是一种常用的数据传输方式,通过串行传输数据。

(完整版)十天学会单片机C语言_郭天祥---课后习题答案

(完整版)十天学会单片机C语言_郭天祥---课后习题答案

郭天祥十天学通单片机TX-1C单片机实验板所有课作业+答案,特别整理,供单片机爱好与学习者使用讲次内容细节第一讲学单片机预备知识、如何点亮一个发光管单片机能做什么,基本电子知识,如何用TX-1C单片机学习板学习单片机,C51 知识简介,如何申请免费芯片样品。

点亮一个发光管,第二讲流水灯设计、蜂鸣器发声、继电器控制简单延时程序、子程序调用、带参数子程序设计、流水灯同时蜂鸣器响、如何驱动蜂鸣器,及如何驱动继电器,集电极开路的概念及应用。

第三讲数码管显示的原理、数码管的静态显示共阳、共阴数码管显示原理、定时器工作方式介绍、重点讲述工作方式2、中断概念及中断函数写法、外部中断试验、定时器中断应用第四讲数码管的动态显示原理及应用实现动态扫描概念、定时器、中断加深用单片机的定时器及中断设计一个60 秒定时器第五讲独立键盘、矩阵键盘的检测原理及实现键盘用来做什么、如何键盘检测、消抖、键盘编码、带返回值函数写法及应用第六讲AD、DA 的工作原理及实现、运放电路模拟电压与数字电压的关系、为什么要使用AD 及DA、ADC0804 的操作方法、DAC0832 的操作方法第七讲串口通讯原理及操作流程串口通讯工作方式、10 位数据通讯、波特率概念、如何根据波特率计算定时器初值、串口打印在调试程序中的应用。

第八讲 1 602液晶、12864 液晶显示原理及实现最简单液晶工作原理、如何开始对一个没有任何概念的芯片开始单片机的操作第九讲IIC总线AT24C02芯片工作原理IIC总线工作原理、目前非常通用的一种通信机制第十讲利用51 单片机的定时器设计一个时钟综合运用51 单片机知识设计一个可以随意调节时间、带整点闹铃的时钟。

(其中用到定时器、中断、按键、蜂鸣器、数码管或串口通信)第^一讲用DS12C887时钟芯片设计一个高精度时钟DS12C887内部带有锂电池,系统掉电情况下可自行精确走10 年,并带有闹钟功能、年、月、日、时、分、秒等。

郭天祥_十天学通单片机_实验板所有课后作业+答案_特别整理

郭天祥_十天学通单片机_实验板所有课后作业+答案_特别整理

郭天祥_十天学通单片机_实验板所有课后作业+答案_特别整理郭天祥《十天学通单片机》———“ TX-1C单片机实验板”所有课后作业+答案,特别整理,供单片机爱好与学习者使用第一讲学单片机预备知识、如何点亮一个发光管单片机能做什么,基本电子知识,如何用TX-1C单片机学习板学习单片机,C51知识简介,如何申请免费芯片样品。

点亮一个发光管,第二讲流水灯设计、蜂鸣器发声、继电器控制简单延时程序、子程序调用、带参数子程序设计、流水灯同时蜂鸣器响、如何驱动蜂鸣器,及如何驱动继电器,集电极开路的概念及应用。

第三讲数码管显示的原理、数码管的静态显示共阳、共阴数码管显示原理、定时器工作方式介绍、重点讲述工作方式2、中断概念及中断函数写法、外部中断试验、定时器中断应用第四讲数码管的动态显示原理及应用实现动态扫描概念、定时器、中断加深用单片机的定时器及中断设计一个60秒定时器第五讲独立键盘、矩阵键盘的检测原理及实现键盘用来做什么、如何键盘检测、消抖、键盘编码、带返回值函数写法及应用第六讲AD、DA的工作原理及实现、运放电路模拟电压与数字电压的关系、为什么要使用AD 及DA、ADC0804的操作方法、DAC0832的操作方法第七讲串口通讯原理及操作流程串口通讯工作方式、10位数据通讯、波特率概念、如何根据波特率计算定时器初值、串口打印在调试程序中的应用。

第八讲1602液晶、12864液晶显示原理及实现最简单液晶工作原理、如何开始对一个没有任何概念的芯片开始单片机的操作第九讲IIC总线AT24C02芯片工作原理IIC总线工作原理、目前非常通用的一种通信机制第十讲利用51单片机的定时器设计一个时钟综合运用51单片机知识设计一个可以随意调节时间、带整点闹铃的时钟。

(其中用到定时器、中断、按键、蜂鸣器、数码管或串口通信)第十一讲用DS12C887时钟芯片设计一个高精度时钟DS12C887内部带有锂电池,系统掉电情况下可自行精确走10年,并带有闹钟功能、年、月、日、时、分、秒等。

单片机课后习题参考答案(全).

单片机课后习题参考答案(全).

第1章单片机概述参考答案1.答:微控制器,嵌入式控制器2.答:CPU、存储器、I/O口、总线3.答:C4.答:B5.答:微处理器、微处理机和CPU它们都是中央处理器的不同称谓,微处理器芯片本身不是计算机。

而微计算机、单片机它们都是一个完整的计算机系统,单片机是集成在一个芯片上的用于测控目的的单片微计算机。

嵌入式处理器一般意义上讲,是指嵌入系统的单片机、DSP、嵌入式微处理器。

目前多把嵌入式处理器多指嵌入式微处理器,例如ARM7、ARM9等。

嵌入式微处理器相当于通用计算机中的CPU。

与单片机相比,单片机本身(或稍加扩展)就是一个小的计算机系统,可独立运行,具有完整的功能。

而嵌入式微处理器仅仅相当于单片机中的中央处理器。

为了满足嵌入式应用的特殊要求,嵌入式微处理器虽然在功能上和标准微处理器基本是一样的,但在工作温度、抗电磁干扰、可靠性等方面一般都做了各种增强。

6.答:MCS-51系列单片机的基本型芯片分别:8031、8051和8071。

它们的差别是在片内程序存储器上。

8031无片内程序存储器、8051片内有4K字节的程序存储器ROM,而8751片内有集成有4K字节的程序存储器EPROM。

7.答:因为MCS-51系列单片机中的“MCS”是Intel公司生产的单片机的系列符号,而51系列单片机是指世界各个厂家生产的所有与8051的内核结构、指令系统兼容的单片机。

8.答:相当于MCS-51系列中的87C51,只不过是AT89S51芯片内的4K字节Flash存储器取代了87C51片内的4K字节的EPROM。

9.单片机体积小、价格低且易于掌握和普及,很容易嵌入到各种通用目的的系统中,实现各种方式的检测和控制。

单片机在嵌入式处理器市场占有率最高,最大特点是价格低,体积小。

DSP是一种非常擅长于高速实现各种数字信号处理运算(如数字滤波、FFT、频谱分析等)的嵌入式处理器。

由于对其硬件结构和指令进行了特殊设计,使其能够高速完成各种复杂的数字信号处理算法。

跟郭天祥学单片机

跟郭天祥学单片机

教学争鸣新课程NEW CURRICULUM跟郭天祥学单片机刘玉秀(山东诸城市潍坊工商职业学院)单片机技术是电子信息类学生必须掌握的一门技术,也是现代工科学生就业的一个基本条件,成为理工科院校,同时也是高职院校电子类专业的主要专业课程,它可以充分体现学生利用自己所掌握的知识解决实际工程问题的能力。

在单片机教学过程中,学生不仅要掌握单片机的原理和应用,还应具有“开发”能力,由于其教学内容纷繁复杂,与各种学科相互渗透,如何提高教学的效率是单片机教学过程中的一个研究课题。

传统的单片机教学,就是教师在上面枯燥地讲解理论、程序,下面的学生听得一头雾水,阻碍了学生的学习的兴趣,学生跟教师缺少交流与讨论。

下面介绍单片机的领军人物郭天祥是如何利用他的单片机系统学习单片机的。

郭天祥,老家新疆伊宁,原哈尔滨工程大学学生,后接触单片机,已经成为单片机领域的一个企业家,名下有天祥电子网站,其最大成就之一是开设了十天学会单片机系列课程并录制出来,网络上广泛流传,他建立了个人网站(天祥电子),公司的网站是,主要是产品宣传与销售。

他的单片机研发基地位于哈尔滨工程大学国家大学科技园创业中心4楼,1000多平方米,设备包括多功能贴片机、无铅回流焊机、无铅波峰焊机、BGA返修工作站、流水线组装线等。

拥有完整的小型产品生产线,能够完全满足公司产品焊接需求,此外还可对外承接焊接订单。

他的火爆视频教程介绍:单片机外围电路设计及C语言编程视频教程介绍:这是一部学单片机革命性的视频教程,教程全部十二讲,每讲3小时左右,看视频的同时可以用TX-1C单片机实验板一个实验一个的演示,给学员解释每条指令的意思及原理,通过10天的时间让学生完全掌握单片机的C语言编程及单片机外围电路设计的思想。

全程的屏幕,声音,用屏幕录像,实验板现象用摄像头拍摄,这部教程算是国内首个如此创新的以教师亲自实践为主,学员现场写程序,直接下载到实验板看现象,讲单片机的视频教程,只要你认真看,认真听,保证10天让你学会单片机应用和C语言编程。

单片机课后答案及实验

单片机课后答案及实验

3; P99;第18题
MOV MOV MOV MOV ANL ORL SWAP CPL XRL ORL
30H ; 0A4H A ; 0D6H R0 ; 30H R2 ; 47H A ; R2 A ; @R0 A A A ; 0FFH 30H ; A
;30H=A4H ;A=0D6H ;R0=30H ;R2=47H
DEL: JBC TF0;REP AJMP DEL
REP: CLR P1.2 DJNZ R0;DEL AJMP L1 END
3. 设MCS-51单片机的晶振频率为6MHZ;以计数器T0 进行外部事件计数;每计数1000个外部事件输入脉 冲后;计数器T1开始2ms定时;定时时间到后;T0又开 始计数;如此周而复始地工作&
解:要求定时时间为1s;若采用定时模式1;根 据公式:定时时间T=65536-初始值xTcy; 可知最大定时时间为65.536ms&若定时 10ms;则必须有100个10ms;即100次溢出中 断为1s;10ms时间常数为D8F0H&
ORG 0000H AJMP MAIN ORG 000BH AJMP INT_T0 ORG 0030H MAIN: MOV TMOD ; 01H MOV TL0 ; 0F0H MOV TH0 ; 0D8H SETB TR0 MOV R6 ; 00H
MOV DPTR;0300H
LOOP:CLR DPS
MOVX A;@DPTR
ANL A;0FH SWAP A XCH A;B
INC DPTR MOVX A;@DPTR ANL A;0FH ORL A;B INC DPTR SETB DPS MOVX @DPTR;A INC DPTR DJNZ R2;LOOP CLR DPS SJMP $

单片机课后习题答案详细版.doc

单片机课后习题答案详细版.doc

单片机课后习题答案1.89C51单片机内包含哪些主要逻辑功能部件?答:80C51系列单片机在片内集成了以下主要逻辑功能部件:(l)CPU(中央处理器):8位(2)片内RAM:128B(3)特殊功能存放器:21个(4)程序存储器:4KB (5)并行I/O口:8位,4个(6)串行接口:全双工,1个(7)定时器/计数器:16位,2个(8)片内时钟电路:1个2.89C51的EA端有何用途?答:/EA端接高电平时,CPU只访问片内flash Rom并执行内部程序,存储器。

/EA端接低电平时,CPU只访问外部ROM,并执行片外程序存储器中的指令。

/EA端保持高电平时,CPU执行内部存储器中的指令。

3.89C51的存储器分哪几个空间?如何区别不同空间的寻址?答:ROM〔片内ROM和片外ROM统一编址〕〔使用MOVC〕〔数据传送指令〕〔16bits地址〕〔64KB〕片外RAM〔MOVX〕〔16bits地址〕〔64KB〕片内RAM 〔MOV〕〔8bits地址〕〔256B〕4.简述89C51片内RAM的空间分配。

答:片内RAM有256B,低128B是真正的RAM区,高128B是SFR〔特殊功能存放器〕区。

5.简述布尔处理存储器的空间分配,片内RAM中包含哪些可位寻址单元。

答:片内RAM区从00H~FFH〔256B〕其中20H~2FH〔字节地址〕是位寻址区对应的位地址是00H~7FH6. 如何简捷地判断89C51正在工作?答:用示波器观察8051的XTAL2端是否有脉冲信号输出〔判断震荡电路工作是否正常?〕ALE〔地址锁存允许〕〔Address Latch Enable〕输出是fosc的6分频用示波器观察ALE是否有脉冲输出〔判断8051芯片的好坏?〕观察PSEN〔判断8051能够到EPROM 或ROM中读取指令码?〕因为/PSEN接外部EPROM〔ROM〕的/OE端子OE=Output Enable〔输出允许〕7. 89C51如何确定和改变当前工作存放器组?答:PSW〔程序状态字〕〔Program Status Word〕中的RS1和RS0 可以给出4中组合,用来从4组工作存放器组中进展选择PSW属于SFR〔Special Function Register〕〔特殊功能存放器〕9.读端口锁存器和“读引脚〞有何不同?各使用哪种指令?答:读锁存器〔ANLP0,A〕就是相当于从存储器中拿数据,而读引脚是从外部拿数据〔如MOV A,P1这条指令就是读引脚的,意思就是把端口p1输入数据送给A〕传送类MOV,判位转移JB、JNB、这些都属于读引脚,平时实验时经常用这些指令于外部通信,判断外部键盘等;字节交换XCH、XCHD算术及逻辑运算ORL、CPL、ANL、ADD、ADDC、SUBB、INC、DEC控制转移CJNE、DJNZ都属于读锁存器。

郭天祥十天学会单片机完整

郭天祥十天学会单片机完整

26))选:择T其1实运为行低控电制有平位有。效还是f下lo降a沿t 有效。
32
3.4e-38~3.4e38
所通谓信主 有从并型式行,通即信有在和数串个行单通片信d机两o中种ub,方l有式e一。个是主机,其余的是从机,从机6要4服从主机的调1度.7、e支-3配0。8~1.7e308
补I682个C充总发必线光要上管字符型的传由理送上论的至7有 无知数下识据间,信 隔即号1缺scu是流什hn广动a么s义,8ri补g的其什n,中e么既每d。包个c括9h管a地亮r址50A信0m号s,,灭B又50包0括ms真,亮正时的蜂8数8鸣据器信响号,。灭时0关-~1闭22蜂58鸣5~器1,27一直重复下去。
16
0~65535
1微0机10中B有->内10部-总> 无A线H和外部u总n线si两g类ne。d sБайду номын сангаасort int
16
0~65535
C-3P2U76在8处~3理27某67一事件A时u,n发si生g了n另ed一事lo件nBg请i求nCt PU迅速去处理(中3断2发生); 0~4294967295
一、数据位的有效性规定
2 10
8
1000
3 11
9
1001
4 100
10
1010
5 101
11
1011
十六进制
▪ 是二进制的简短表示形式。 十进制中的0-15分别表示为十六进制的0、1 、2、3、4、5、6、7、8、9、A、B、C、D 、E、F
▪ 熟练掌握二进制与十六进制之间的转换。 规律:一般把四个二进制数放在一起转换成 一个十六进制数,转换时先把二进制数转换 成十进制数,再把十进制数转换成十六进制 数。

基于郭天祥的十天学通单片机,其讲课中涉及到的源程序

基于郭天祥的十天学通单片机,其讲课中涉及到的源程序

以下程序基于郭天祥的十天学通单片机TX-1C单片机实验板,是其讲课中涉及到的源程序Lesson11#include<reg52.h>sbit D2=P1^2;unsigned int a;void main(){D2=0;/* for(a=0;a<=10000;a++){};D2=1;for(a=0;a<=10000;a++){};*/}2#include<reg52.h>void main(){P1=0xfd;}lesson21#include<reg52.h>sbit p1_1=P1^0unsigned int avoid main(){while(1){a=51000;p1_1=0;while(a--);a=51000;while(a--);p1_1=1;a=51000;while(a--);a=51000;while(a--);}}2#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit D1=P1^0;//void delay();void delay(uint);void main(){ while(1){D1=0;delay(100);D1=1;delay(100);}}/*void delay(){uint x,y;for(x=100;x>0;x--)for(y=600;y>0;y--);}*/void delay(uint z){uint x;uchar y;for(x=z;x>0;x--)for(y=20;y>0;y--);}lesson31#include<reg52.h>sbit dula=P2^6;sbit wela=P2^7;void main(){wela=1;P0=0xc0;wela=0;dula=1;P0=0x06;dula=0;while(1);}2 #include<reg52.h>#define uint unsigned int#define uchar unsigned char sbit dula=P2^6;sbit wela=P2^7;uchar num;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(uint z);void main(){wela=1;//11101010P0=0xea;wela=0;while(1){for(num=0;num<16;num++) {dula=1;P0=table[num];dula=0;delay(1000);}}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}3#include<reg52.h>#define uint unsigned int#define uchar unsigned char sbit dula=P2^6;sbit wela=P2^7;sbit d1=P1^0;uchar num;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(uint z);void main(){EA=1;//开总中断EX0=1;//开外部中断0//IT0=1;TCON=0x01;wela=1;//11101010P0=0xea;wela=0;while(1){for(num=0;num<16;num++) {d1=1;dula=1;P0=table[num];dula=0;delay(1000);} }}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void exter0() interrupt 0{d1=0;}4#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit dula=P2^6;sbit wela=P2^7;sbit d1=P1^0;uchar num,num1;tt;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(uint z);void main(){num=0;tt=0;TMOD=0x11;//设置定时器0为工作方式1TH0=(65536-10000)/256;TL0=(65536-10000)%256;TH1=(65536-20000)/256;TL1=(65536-20000)%256;// EA=1;//开总中断ET0=1;//开定时器0中断ET1=1;TR0=1;//启动定时器0TR1=1;wela=1;//11101010P0=0xea;wela=0;dula=1;P0=0x3f;dula=0;while(1){if(num1==25){num1=0;P1=~P1;}if(tt==100){tt=0;num++;if(num==16)num=0;dula=1;P0=table[num];dula=0;}}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void time0() interrupt 1 {TH0=(65536-10000)/256; TL0=(65536-10000)%256; tt++;}void time1() interrupt 3 {TH1=(65536-20000)/256; TL1=(65536-20000)%256; num1++;}Lesson41.#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char uchar temp,aa,num;sbit dula=P2^6;sbit wela=P2^7;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(uint z);void main(){num=0;aa=0;TMOD=0x01;TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;ET0=1;TR0=1;temp=0xfe;P1=temp;dula=1;P0=table[0];dula=0;wela=1;P0=0xc0;wela=0;while(1){delay(1000);temp=_crol_(temp,1);P1=temp;/* if(aa==40){aa=0;num++;if(num==16)num=0;dula=1;P0=table[num];dula=0;} */}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void timer0() interrupt 1 {TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++;if(aa==40){aa=0;num++;if(num==16)num=0;dula=1;P0=table[num];dula=0;}}Lesson4-2#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char uchar temp,aa,numdu,numwe; sbit dula=P2^6;sbit wela=P2^7;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //void delay(uint z);void main(){numdu=0;numwe=0;aa=0;TMOD=0x01;TH0=(65536-5000)/256;TL0=(65536-5000)%256;EA=1;ET0=1;TR0=1;while(1){// delay(1000);// temp=_crol_(temp,1);// P1=temp;if(aa==1){aa=0;numdu++;if(numdu==7)numdu=1;dula=1;P0=table[numdu];dula=0;wela=1;P0=tablewe[numwe];wela=0;numwe++;if(numwe==6)numwe=0;}}}/*void delay(uint z){uint x,y; for(x=z;x>0;x--)for(y=110;y>0;y--);}*/void timer0() interrupt 1{TH0=(65536-5000)/256;TL0=(65536-5000)%256;aa++;}Lesson4-3#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar temp,aa,bai,shi,ge;sbit dula=P2^6;sbit wela=P2^7;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void display(uchar bai,uchar shi,uchar ge);void delay(uint z);void init();void main(){init();//初始化子程序while(1){if(aa==20){aa=0;temp++;if(temp==100){temp=0;}bai=temp/100;shi=temp%100/10;ge=temp%10;}display(bai,shi,ge);}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void display(uchar bai,ucharshi,uchar ge){dula=1;P0=table[bai];dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(1);dula=1;P0=table[shi];dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(1);dula=1;P0=table[ge];dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(1);}void init(){wela=0;dula=0;temp=0;TMOD=0x01;TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;ET0=1;TR0=1;}void timer0() interrupt 1 {TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++;}Lesson51#include <reg52.h>#include <intrins.h>#define uchar unsigned char #define uint unsigned int sbit dula=P2^6;sbit wela=P2^7;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76,0x79,0x38,0x3f,0};uchar temp,t0,t1,bai,shi,ge,flag,flag1; uint shu;void init();voiddisplay(uchar,uchar,uchar,uchar,ucha r,uchar);void delay(uint z){uint t1,y;for(t1=z;t1>0;t1--)for(y=110;y>0;y--);}void main(){init();while(1){if(flag1!=1)display(7,6,5,bai,shi,ge);elsedisplay(16,17,18,18,19,20);}}void init(){shu=432;temp=0xfe;P1=temp;TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;t0++;if(flag!=1){if(t0==10){t0=1;temp=_crol_(temp,1);P1=temp;}}else{if(t0%4==0)P1=~P1;if(t0==60){TR0=0;P1=0xff;flag1=1;}}}void timer1() interrupt 3{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){TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;flag=1;t0=0;P1=0xff;TR1=0;}}}void display(uchar aa,uchar bb,uchar cc,uchar ba,uchar sh,uchar g){dula=1;P0=table[aa];dula=0; P0=0xff;wela=1;P0=0xfe;wela=0;delay(1);dula=1;P0=table[bb];dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(1);dula=1;P0=table[cc];dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(1);dula=1;P0=table[ba];dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(1);dula=1;P0=table[sh];dula=0;P0=0xff;wela=1;P0=0xef;wela=0;delay(1);dula=1;P0=table[g];dula=0;P0=0xff;wela=1;P0=0xdf;wela=0;delay(1);}Lesson5-2#include<reg52.h>#define uint unsigned int#define uchar unsigned char sbit d1=P1^0;sbit dula=P2^6;sbit wela=P2^7;sbit key1=P3^4;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar num;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){wela=1;P0=0xfe;wela=0;P3=0xff;while(1){if(key1==0){delay(5);if(key1==0){d1=0;num++;if(num==10)num=0;}while(!key1);delay(5);while(!key1);}elsed1=1;dula=1;P0=table[num];dula=0;}}Lesson5-3#include<reg52.h>#define uint unsigned int#define uchar unsigned char sbit dula=P2^6;sbit wela=P2^7;sbit key1=P3^4;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0}; uchar num,temp,num1; void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}uchar keyscan();void display(uchar aa); void main(){num=17;dula=1;P0=0;dula=0;wela=1;P0=0xc0;wela=0;while(1){display(keyscan());}}void display(uchar aa) {dula=1;P0=table[aa-1];dula=0;}uchar keyscan(){P3=0xfe;temp=P3;temp=temp&0xf0; while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0; while(temp!=0xf0){temp=P3;switch(temp){Case 0xee:num=1; break;case 0xde:num=2; break;case 0xbe:num=3; break;case 0x7e:num=4;break;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0; }}}P3=0xfd;temp=P3;temp=temp&0xf0; while(temp!=0xf0) {delay(5);temp=P3;temp=temp&0xf0; while(temp!=0xf0) {temp=P3;switch(temp){case 0xed:num=5; break;case 0xdd:num=6; break;case 0xbd:num=7; break;case 0x7d:num=8; break;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0; }}}P3=0xfb;temp=P3;temp=temp&0xf0; while(temp!=0xf0) {delay(5);temp=P3;temp=temp&0xf0; while(temp!=0xf0) {temp=P3;switch(temp){case 0xeb:num=9; break;case 0xdb:num=10; break;case 0xbb:num=11; break;case 0x7b:num=12; break;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0; }}}P3=0xf7;temp=P3;temp=temp&0xf0; while(temp!=0xf0) {delay(5);temp=P3;temp=temp&0xf0; while(temp!=0xf0) {temp=P3;switch(temp){case 0xe7:num=13; break;case 0xd7:num=14; break;case 0xb7:num=15; break;case 0x77:num=16; break;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0; }}}return num;}Lesson61#include<reg52.h> sbit csda=P3^2; sbit wr=P3^6;void main(){csda=0;wr=0;P0=0;while(1);}Lesson6-2#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit wr=P3^6;sbit rd=P3^7;void delay(uint z){uint t1,y;for(t1=z;t1>0;t1--)for(y=110;y>0;y--);}void init();void start();void main(){init();while(1){start();delay(20);rd=0;delay(10);rd=1;delay(10);}}void init(){P0=0;}void start(){wr=1;wr=0;wr=1;}Lesson7#include<reg52.h>unsigned char flag,a;void main(){TMOD=0x20;//设置定时器1为工作方式2TH1=0xfd; TL1=0xfd;TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=1;while(1){/* if(RI==1){RI=0;P1=SBUF;}*/if(flag==1){ES=0;flag=0;SBUF='1';//28;while(!TI);TI=0;SBUF='2';//28;while(!TI);TI=0;SBUF='3';//28;while(!TI);TI=0;ES=1;}}}void ser() interrupt 4{RI=0;// P1=SBUF;a=SBUF;flag=1;}Lesson8#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]="I LIKE MCU!"; uchar code table1[]=""; sbit lcden=P3^4;sbit lcdrs=P3^5;sbit dula=P2^6;sbit wela=P2^7;uchar num;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com) {lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date) {lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){dula=0;wela=0;lcden=0;write_com(0x38);write_com(0x0e);write_com(0x06);write_com(0x01);write_com(0x80+0x10);}void main(){init();for(num=0;num<11;num++) {write_data(table[num]); delay(20);}// write_com(1);write_com(0x80+0x53);for(num=0;num<13;num++) {write_data(table1[num]); delay(20);}for(num=0;num<16;num++) {write_com(0x18);delay(20); }while(1);}Lesson9#include<reg52.h>#define uchar unsigned char sbit sda=P2^0;sbit scl=P2^1;uchar a;void delay(){ ;; }void start() //开始信号{sda=1;delay();scl=1;delay();sda=0;delay();}void stop() //停止{sda=0;delay();scl=1;delay();sda=1;delay();}void respons() //应答{uchar i;scl=1;delay();while((sda==1)&&(i<250))i++; scl=0;delay();}void init(){sda=1;delay();scl=1;delay();}void write_byte(uchar date) {uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;scl=0;delay();sda=CY;delay();scl=1;delay();// scl=0;// delay();}scl=0;delay();sda=1;delay();}uchar read_byte(){uchar i,k;scl=0;delay();sda=1;delay();for(i=0;i<8;i++){scl=1;delay();k=(k<<1)|sda;scl=0;delay();}return k;}void delay1(uchar x){uchar a,b;for(a=x;a>0;a--)for(b=100;b>0;b--);}void write_add(uchar address,uchar date){start();write_byte(0xa0);respons();write_byte(address);respons();write_byte(date);respons();stop();}uchar read_add(uchar address){uchar date; start();write_byte(0xa0);respons();write_byte(address);respons();start();write_byte(0xa1);respons();date=read_byte();stop();return date;}void main(){init();write_add(23,0xaa);delay1(100);P1=read_add(23);while(1);}Lesson10#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;sbit rs=P3^5;sbit lcden=P3^4;sbit s1=P3^0;sbit s2=P3^1;sbit s3=P3^2;sbit rd=P3^7;uchar count,s1num;char miao,shi,fen;uchar code table[]=" 2007-7-30 MON";uchar code table1[]=" 00:00:00"; void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchar date){rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){uchar num;dula=0;wela=0;lcden=0;// fen=59;// miao=53;// shi=23;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<15;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<12;num++){write_date(table1[num]);delay(5);}TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void write_sfm(uchar add,uchar date){uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge); }void keyscan(){rd=0;if(s1==0){delay(5);if(s1==0){ s1num++;while(!s1);if(s1num==1){TR0=0;write_com(0x80+0x40+10); write_com(0x0f);}}if(s1num==2){write_com(0x80+0x40+7); }if(s1num==3){write_com(0x80+0x40+4); }if(s1num==4){s1num=0;write_com(0x0c);TR0=1;}}if(s1num!=0){if(s2==0){delay(5);if(s2==0){while(!s2);if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10); }if(s1num==2){fen++;if(fen==60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7); }if(s1num==3){shi++;if(shi==24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4); }}}if(s3==0){delay(5);if(s3==0){while(!s3);if(s1num==1){/* if(miao==0){miao=59;write_sfm(10,miao);write_com(0x80+0x40+10); }*/miao--;if(miao==-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10); }if(s1num==2){fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7); }if(s1num==3){shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4); }}}} }void main(){init();while(1){keyscan();}// while(1);}void timer0() interrupt 1 {TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++;if(count==18){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);}}Lesson11---shizhong.c#include<reg52.h>#include<define.h>void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void didi(){beep=0;delay(50);beep=1;delay(100);beep=0;delay(50);beep=1;}void write_com(uchar com) {rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchar date) {rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){uchar num;EA=1;EX0=1;IT0=1;dula=0;wela=0;lcden=0;// set_time();set_alarm(14,13,10);write_ds(0x0B,0x26);read_ds(0x0c);// fen=59;// miao=53;// shi=23;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<15;num++) {write_date(table[num]); delay(5);}write_com(0x80+0x40); for(num=0;num<12;num++){write_date(table1[num]);delay(5);}}void write_sfm(uchar add,uchar date){uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void keyscan(){rd=0;if(flag1==1){if(s2==0){delay(5);if(s2==0){while(!s2);flag1=0;}}if(s3==0){delay(5);if(s3==0){while(!s3);flag1=0;}}}if(s1==0){delay(5);if(s1==0){ s1num++;flag=1;flag1=0;while(!s1);if(s1num==1){TR0=0;write_com(0x80+0x40+10);write_com(0x0f);}}if(s1num==2){write_com(0x80+0x40+7); }if(s1num==3){write_com(0x80+0x40+4); }if(s1num==4){s1num=0;write_com(0x0c);flag=0;write_ds(0,miao);write_ds(2,fen);write_ds(4,shi);}}if(s1num!=0){if(s2==0){delay(1);if(s2==0){while(!s2);if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10); }if(s1num==2){fen++;if(fen==60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7); }if(s1num==3){shi++;if(shi==24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4); }} }if(s3==0){delay(1);if(s3==0){while(!s3);if(s1num==1){/* if(miao==0){miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);}*/miao--;if(miao==-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2){fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3){shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);}}}}}void write_ds(uchar add,uchar date) {dscs=0;dsas=1;dsds=1;dsrw=1;P0=add;dsas=0;dsrw=0;P0=date;dsrw=1;dsas=1;dscs=1;}uchar read_ds(uchar add){uchar ds_date;dsas=1;dsds=1;dsrw=1;dscs=0;P0=add;dsas=0;dsds=0;P0=0xff;ds_date=P0;dsds=1;dsas=1;dscs=1;return ds_date;}void set_time(){write_ds(4,10);write_ds(2,32);}void set_alarm(uchar ashi,uchar afen,uchar amiao){write_ds(1,amiao);write_ds(3,afen);write_ds(5,ashi);}void main(){init();while(1){keyscan();if(flag1==1)didi();if(flag==0){miao=read_ds(0);fen=read_ds(2);shi=read_ds(4);write_sfm(10,miao);write_sfm(7,fen);write_sfm(4,shi);}}}void exter() interrupt 0{ uchar c;flag1=1; c=read_ds(0x0c); }。

郭天祥单片机课件作业

郭天祥单片机课件作业
⑷ 所需延时用奏乐指令03 00 04实现。
8、用单片机编程控制共阳数码管
⑴ 扩展板上的数码管先循环显示数字P37七次;
⑵ 单片机上的数码管记录循环显示的遍数;
⑶ 循环显示P37七次后再一直循环显示数字73P,直到按复位键结束程序的运行;
⑷ 所需延时用奏乐指令03 00 04实现。
9、用单片机编程控制共阳数码管
⑶ 循环显示24A九次后再一直循环显示数字A 42,直到按复位键结束程序的运行;
⑷ 所需延时用奏乐指令03 00 04实现。
7、用单片机编程控制共阳数码管
⑴ 扩展板上的数码管先循环显示数字U64九次;
⑵ 单片机上的数码管记录循环显示的遍数;
⑶ 循环显示U64九次后再一直循环显示数字46U,直到按复位键结束程序的运行;
⑶然后三个灯不发光,直到按复位键结束程序的运行,三个灯才恢复为发黄(橙)光;
⑷ 每次亮灯时间用奏乐指令03 00 04实现。
3.用DP801单片机控制DP801-1扩展板上的三色灯,要求:
⑴ 底色为红色,从左到右跑白光(就是不发光,每次只有一个灯不发光,其余的灯发红光);
⑵ 共跑动11次,单片机上的数码管记录跑动的遍数;
⑶然后三个灯不发光,直到按复位键结束程序的运行,三个灯才恢复为发黄(橙)光;
⑷ 每次亮灯时间用奏乐指令03 00 04实现。
8.用DP801单片机控制DP801-1扩展板上的三色灯,要求:
⑴ 底色为绿色,从左到右跑红光(每次只有一个灯发红光,其余的灯发绿光);
⑵ 共跑动6次,单片机上的数码管记录跑动的遍数;
⑶然后三个灯不发光,直到按复位键结束程序的运行,三个灯才恢复为发黄(橙)光;

单片机课后习题答案

单片机课后习题答案

单片机课后习题答案单片机课后习题答案在学习单片机的过程中,课后习题是检验自己掌握程度的重要方式。

然而,有时候我们可能会遇到一些难题,不知道如何解答。

本文将提供一些常见的单片机课后习题答案,希望能够帮助大家更好地理解和应用单片机知识。

1. 请简述单片机的工作原理。

单片机是一种集成电路芯片,内部包含了中央处理器(CPU)、内存、输入输出接口等功能模块。

它通过接收外部的输入信号,经过处理后,再通过输出接口将结果输出。

其工作原理主要包括以下几个步骤:(1)从外部接收输入信号,例如按键、传感器等。

(2)将输入信号转化为数字信号,经过模数转换器(ADC)进行模数转换。

(3)CPU对数字信号进行处理,例如进行逻辑运算、数值计算等。

(4)根据处理结果,通过输出接口将结果输出,例如驱动LED灯、显示器等。

(5)循环执行上述步骤,实现单片机的持续工作。

2. 如何在单片机中实现延时功能?在单片机中,延时功能往往是非常常见的需求。

我们可以通过使用定时器来实现延时功能。

具体步骤如下:(1)设置定时器的工作模式和计数方式。

例如,选择定时器模式为定时器模式,计数方式为自动重载。

(2)设置定时器的初始值和计数周期。

初始值决定了延时的起始时间,计数周期决定了延时的时长。

(3)启动定时器,使其开始计数。

(4)在程序中检测定时器是否计数完成。

可以通过检测定时器中断标志位或者定时器计数值是否达到设定值来判断。

(5)如果定时器计数完成,表示延时时间已经到达,可以执行延时后的操作。

(6)如果定时器计数未完成,表示延时时间还未到达,可以继续等待或执行其他操作。

3. 如何实现数码管的动态显示?数码管的动态显示是通过快速切换不同的数码管段位来实现的。

具体步骤如下:(1)设置一个计数器,用于控制数码管的刷新频率。

(2)设置一个数组,用于存储需要显示的数码管段位的状态。

(3)编写一个中断服务函数,用于定时刷新数码管的显示。

(4)在主程序中,设置数码管需要显示的内容。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

郭天祥《十天学通单片机》———“ TX-1C单片机实验板”所有课后作业+答案,特别整理,供单片机爱好与学习者使用第一讲学单片机预备知识、如何点亮一个发光管单片机能做什么,基本电子知识,如何用TX-1C单片机学习板学习单片机,C51知识简介,如何申请免费芯片样品。

点亮一个发光管,第二讲流水灯设计、蜂鸣器发声、继电器控制简单延时程序、子程序调用、带参数子程序设计、流水灯同时蜂鸣器响、如何驱动蜂鸣器,及如何驱动继电器,集电极开路的概念及应用。

第三讲数码管显示的原理、数码管的静态显示共阳、共阴数码管显示原理、定时器工作方式介绍、重点讲述工作方式2、中断概念及中断函数写法、外部中断试验、定时器中断应用第四讲数码管的动态显示原理及应用实现动态扫描概念、定时器、中断加深用单片机的定时器及中断设计一个60秒定时器第五讲独立键盘、矩阵键盘的检测原理及实现键盘用来做什么、如何键盘检测、消抖、键盘编码、带返回值函数写法及应用第六讲AD、DA的工作原理及实现、运放电路模拟电压与数字电压的关系、为什么要使用AD及DA、ADC0804的操作方法、DAC0832的操作方法第七讲串口通讯原理及操作流程串口通讯工作方式、10位数据通讯、波特率概念、如何根据波特率计算定时器初值、串口打印在调试程序中的应用。

第八讲1602液晶、12864液晶显示原理及实现最简单液晶工作原理、如何开始对一个没有任何概念的芯片开始单片机的操作第九讲IIC总线AT24C02芯片工作原理IIC总线工作原理、目前非常通用的一种通信机制第十讲利用51单片机的定时器设计一个时钟综合运用51单片机知识设计一个可以随意调节时间、带整点闹铃的时钟。

(其中用到定时器、中断、按键、蜂鸣器、数码管或串口通信)第十一讲用DS12C887时钟芯片设计一个高精度时钟DS12C887内部带有锂电池,系统掉电情况下可自行精确走10年,并带有闹钟功能、年、月、日、时、分、秒等。

(本节由学生自己设计电路)第十二讲使用Protell99绘制电路图全过程Protell99软件使用、元件库、封装库设计、绘制原理图、错误检查、生成PCB、手动、自动布线、送去加工第十三讲Altium designer 6.5绘制电路图全过程最顶级电路板设计软件Altium Designer使用、元件库、封装库设计、绘制原理图、错误检查、生成PCB、手动、自动布线、送去加工lesson1对照TX-1C单片机学习板原理图写程序,用位操作和总线操作两种方法完成以下题目1.熟练建立KEIL工程2.点亮第一个发光管.3.点亮最后一个发光管4.点亮1、3、5、75.点亮二、四、五、六6.尝试让第一个发光管闪烁7.尝试设计出流水灯程序====================================================== lesson2第一个发光管以间隔200ms闪烁8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。

8个发光管来回流动,第个管亮100ms,流动时让蜂鸣器发出“滴滴”声。

用8个发光管演示出8位二进制数累加过程。

8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。

重复此过程。

间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。

间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。

================================================================= 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.利用动态扫描方法在六位数码管上显示出稳定的654321.2.用动态扫描方法和定时器1在数码管的前三位显示出秒表,精确到1%秒,即后两位显示1%秒,一直循环下去。

3.利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“HELLO”。

到此保持住。

lesson5数码管前三位显示一个跑表,从000到999之间以1%秒速度运行,当按下一个独立键盘时跑表停止,松开手后跑表继续运行。

(用定时器设计表)。

在上题的基础上,用另外三个独立键盘实现按下第一个时计时停止,按下第二个时计时开始,按下第三个是计数值清零从头开始。

按下16个矩阵键盘依次在数码管上显示1-16的平方。

如按下第一个显示1,第二个显示4...================================================================= lesson71.由上位机发送1给单片机时,蜂鸣器以400ms频率发声,发2时以200ms 频率发声,发3时以100ms频率发声,发4时关闲蜂鸣器。

1.以2400bps从计算机发送任一字节数据,当单片机收到该数据后,在此数据前加上一序号然后连同此数据一起发送至计算机,当序号超过255时归零。

2.以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来,波特率自定。

3. 用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<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明void main() //主函数{led1=0; //将单片机P1.0口清零while(1); //程序停止在这里,在后面会讲到为什么这样写。

}2/ 用总线操作点亮第一个发光管.// 适用 TX-1C单片机实验板// 晶振为11.0592M/*********************************************************/#include<reg52.h> //52单片机头文件void main() //主函数{P1=0xfe; //将单片机P1口的8个口由高到低分别赋值为11111110 while(1); //程序停止在这里,在后面会讲到为什么这样写。

}3 / / 用位操作点亮最后一个发光管.// 适用 TX-1C单片机实验板// 晶振为11.0592M/*********************************************************/#include<reg52.h> //52单片机头文件sbit led8=P1^7; //单片机管脚位声明void main() //主函数{led8=0; //将单片机P1.7口清零while(1); //程序停止在这里,在后面会讲到为什么这样写。

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

}5 // 用位操作点亮1,3,5,7发光管.// 适用 TX-1C单片机实验板// 晶振为11.0592M/*********************************************************/#include<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明sbit led3=P1^2; //单片机管脚位声明sbit led5=P1^4; //单片机管脚位声明sbit led7=P1^6; //单片机管脚位声明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单片机实验板/*********************************************************/#include<reg52.h> //52单片机头文件void main() //主函数{P1=0xaa; //将单片机P1口的8个口由高到低分别赋值为10101010 while(1); //程序停止在这里,在后面会讲到为什么这样写。

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

相关文档
最新文档