1462是谁2的平方根根是什么

谁知道什么是平方根_百度知道
谁知道什么是平方根
我才开始学习平方根,但我不知道什么是平方根
负数有两个共轭虚平方根;0只有一个平方根平方根,表示为〔√ ̄〕,就是0本身,对于非负实数来说,又叫二次方根:有时我们说的平方根指算术平方根。 例,其中属于非负实数的平方根称算术平方根,是指某个自乘结果等于的实数:9的平方根是±3 .注,-9的平方根是±3i。一个正数有两个平方根
其他类似问题
按默认排序
其他5条回答
方根,而且各自的符号表示意义学生不是很容易区分,分析特点归纳总结出平方根的一般规律.平方根的定义如果一个数的平方等于a、性质,有利于学生理解知识的来源,注意数字要简单,要让学生真正理解有一定的困难,各知识点间的类比学生易于记忆.3,在讲清平方根的基础上,又叫二次方根,由于是本节的难点,与其他运算相比较对数有些条件限制.对于平方根运算不仅数有限制,列出两者概念,而且结果有两个,也叫二次方根,这是与以前学过的数的运算很大的区别.有特殊到一般归纳总结,是学生从整体认识开放运算.平方根和算术平方根的区别与联系,非算术根也要转化为算术根.本节难点是平方根与算术平方根的区别于联系.首先这两个概念容易混淆.开方与平方互为逆,平方根是平方的逆运算,教学中要抓住算术平方根式平方根中正的那个,其中属于非负实数的平方根称算术平方根,了解数学的归纳思想.2,区分两种表示的不同,那么这个数叫做a的平方根,得出平方根的概念后.三.教法建议1,也是今后数学学习的重点.在后面学习的根式运算中,关键让学生理解概念.另外在文字叙述时注意语言的严谨规范.四,对于非负实数来说.本节主要内容是平方根和算术平方根,讲清各自符号的意义。正整数的平方根通常是无理数,而且直接影响到二次根式的学习,归根结底是算术根的运算。有时我们说的平方根指算术平方根. 算术根的教学不但是本章教学的重点,是正确求平方根运算的前提、符号等间的区别,是引入无理数的准备知识.平方根概念的正确理解有助于符号表示的理解,表示为(√),是指某个自乘结果等于的实数,让学生观察具体数的平方关系,对比讲解算术平方根、运算。讲解知识教案平方根一.知识结构二.教学重点与难点分析本节重点是平方根和算术平方根的概念.平方根是开方运算基础
算术平方根教学目标1.说出正数a的算数平方根的定义,记住零的算术平方根;会用 表示一个非负数的算术平方根;知道非负数的算术平方跟是非负数(a 0时 0);2.能说出算术平方跟`负平方根`平方根三者之间的联系与区别;能依据算术平方根的定义,求完全平方数的算术平方根,求某些代数值(如已知a、b的值,求c= )  此外,教科书在讲算术平方根的概念时,提醒了非负数的概念( 表示a的算术平方根时,a是非负数,  也是非负数)引导性材料1.如果一个正方形桌面的面积是2平方米,那么它的边长是多少米?2.想一想,当a 时, 所表示的意义有什么区别?(正平方根、负平方根、平方根)说明和建议:上述材料1,有助于学生感受学习算术平方根的必要性;材料2则是引导学生区分算术平方根、负平方根和平方根这三个相互联系又有区别的概念。同时鉴别于正数的两个平方根互为相反数,平方根问题可以转化成算术平方根问题来进行研究。教学设计问题1:(1)正数的平方根有几个?它们之间有什麽关系?
(2)0的平方根有几个?负数有平方根吗?说明和建议:在复习提问的基础上强调指出一个正数有两个平方根,由此引出正数的正平方根叫算术平方根,零的算术平方根是零;并指出如何用根号来表示算术平方根。在提出算术平方根的概念后,可指出三点:
1.当已知一个数的算数平方根时,由于其两个平方根互为相反数,可以立刻写出其负平方根。2. 表示非负数a的算术平方根,如果a是负数,那么 无意义。3. 在理解算术平方根的概念时,要注意定义仅仅给出 “正数a的正的平方根叫算术平方根”是不够的,必须补充规定“零的算术平方根是零”。强调这一点可以防止学生错误地认为:“算术平方根一定是正的”。要反复指出:当用记号 表示a的算术平方根时,a是非负数, 也是非负数。练一练:课本例3后练习第1、2题(练习后可强调指出:在判断一个带有根号的式子是否有意义时,要把根号内的被开方数看成一个数,如果它是非负数,相应的式子有意义;如果它是负数,相应的式子无意义。)
问题2:下面的说法对不对?为什么?题目:求16的平方根。解:设x是16的平方根,则x2=16得x=
所以16的平方根是4或-4。说明和建议:上述解法结果正确,但过程是错误的。1.
X是表示16的平方根,而x= 是16的算术平方根,所以不应该得x=  ;2.
 表示16的算术平方根,不应该得  =±4  例题解析例1:(即课本例2)建议:为了便于学生弄清算术平方根、负平方根、平方根三者间的关系与区别,讲授时可变换例题的设法,比如问:‘‘求下列个数的平方根’;“求下列个数的负平方根”。例2:(即课本例3)说明:本例设问的方法与前面的例题不同,未指出是求一个数的什么平方根,而是求带根号的式子的值。这实际上是要根据式子的特点先判断是求一个数的哪种平方根,然后求解。因此要注意讲好教科书上这个例题的“分析”课堂练习1.课本例3后练习第2、3、4题。2.  的平方根是什么?算术平方根是什么?(深化对算术平方根概念上理解,  的算术平方根是± ,算术平方根是  。避免 的平方根是± ,或±3这类错误)小结1.再学习了平方根概念之后在来研究算术平方根,是很必要的;着是因为算术平方根应用范围广泛(例如根椐面积求边长实际上是求一个数的算术方根)。因此建立这个概念对研究问题带来方便。2.本节课的重点是会区分算术平方根、负平方根、平方根三者之间的联系与区别;能依据算术平方根的定义,求完全平方数的算术平方根。3.数的平方根和算术平方根的性质。平方根的个数 算术平方根个数 正数 2(两平方根互为相反数) 1 0 1(平方根是它本身) 1 负数 0(负数没有平方根) 0
如果a的平方=b,那么a就称为b的平房根。在实数范围内,正数有两个平房根,负数没有平房根,0的平房根为0。特别的,将一个数的正的平房根叫做算术平房根,并且规定0的算术平房根是0。算术平房根的符号是“√”,叫作根号,例如a的算术平房根就是 “√a”(a上面应该还有一横和符号相连,具体你可以看你的课本),读作“根号a”。而如果要表示一个数的平房根,则要这样写:±√a。取一个数的平房根的运算叫做开平方。
用计算器。初一些特殊的以外,如4的平方根等于2等。
如果一个数的平方等于a,那么这个数就是a的平方根。
平方根的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁《平方根》+《姐姐》(快乐男声广州唱区)_贾盛强_其他现场高清视频在线观看_MTV歌曲_乐视网
《平方根》+《姐姐》(快乐男声广州唱区)
下载到电脑
缓存至手机
转存到云盘
收藏成功!同时能自动追剧。
方式B免费发短信到手机
方式C下载APP到本机
英雄,快来抢沙发!
英雄,快来抢沙发!
乐视集团旗下网站
乐视网频道
乐视网旗下产品
乐视推荐:
京公网安备:
Copyright &
乐视网()All rights reserved.有谁知道平方根要怎么算?手算平方根要怎么算,有那位高手知道?_百度作业帮
有谁知道平方根要怎么算?手算平方根要怎么算,有那位高手知道?
/question/.html?si=2
我今天手算过√13...好象很小儿科...不过不是用的正统方法...先算出36^2=很接近由于发现只小一点点于是算了361^2=130321大于130000于是估算13的平方根为3.61如果要求精度不高推荐这样算正统的方法差不多也是这样,不断减去最大的平方数,用的是辗转相除的想法...很麻烦....
我们数学老师说:要用逐步逼近法!就跟
展翅★翱翔
说的差不多
可以真接算的,主要就是从后往前每两位分开比如
先分开 3和00 。3开方可上1 余下2 再把00拖下来(组成200),再把1乘以2(每一步都要把前面开方出的结果乘以2) 以下用*代表一个未知数上面组成200后,2*乘*〈=200,
即27乘以7=189余下11 (200-189)。再把后两位00拖下来(300可以表...
述求平方根的方法,称为笔算开平方法,用这个方法可以求出任何正数的算术平方根,它的计算步骤如下: 1.将被开方数的整数部分从个位起向左每隔两位划为一段,用撇号分开(竖式中的11'56),分成几段,表示所求平方根是几位数; 2.根据左边第一段里的数,求得平方根的最高位上的数(竖式中的3); 3.从第一段的数减去最高位上数的平方,在它们的差的右边写上第二段数组成第一个余数(...msp430单片机c语言,一个按键控制三个流水灯 - 叫阿莫西中心 - 中国网络使得骄傲马戏中心!
msp430单片机c语言,一个按键控制三个流水灯
& 51单片机C语言编程一学就会
作  者: &&
出 版 社:
书  号: 4
页  数: 277 页
出版日期:
定  价: ¥45 元 &&&&&&家园会员价: ¥36 元 &&
51单片机C语言编程一学就会简介
本书以STC89C52(AT89S52)为例,介绍了51单片机的结构和特点、入门和提高所需的C语言知识,51单片机的输入/输出、定时器、中断、串行通信、A-D和D-A转换、交流和直流电动机及步进电动机的驱动。所有内容围绕着密切联系实际的典型应用(开发)示例而进行和展开。本书充分考虑初学者的特点,对程序可能存在的疑难点进行了详细解释。
本书适合单片机的初学者作自学教材,也适合职业院校电类专业作培训教材,还适合作中职单片机技能大赛的辅导用书。
  第1篇入门篇
  第1章学习单片机的必备基础
  1.1单片机的基本概念
  1.1.1初步了解单片机
  1.1.2熟悉51单片机的引脚功能
  1.1.3理解单片机的最小系统
  1.2不同数制及相互转换简介
  1.2.1十进制数
  1.2.2二进制数
  1.2.3十六进制数
  1.2.4八进制数
  1.2.5各种数制之间相互转换的方法
  1.3搭建51单片机开发环境
  1.3.1硬件开发系统
  1.3.2搭建软件开发环境(Keil&μVision)
  1.3.3Keil&μVision4的最基本应用——第一个C51工程
  第2章花样流水灯和电动机的控制
  2.1花样流水灯电路精讲
  2.1.1花样流水灯电路原理图
  2.1.2单片机控制花样流水灯工作原理简介
  2.2相关的C51语言知识精讲
  2.2.1数据类型概述
  2.2.2常量和变量
  2.2.3标识符和关键字
  2.2.4C51的函数简介
  2.2.5单片机C语言程序的基本结构
  2.2.6再论局部变量与全局变量
  2.2.7C语言的算术运算符和算术表达式
  2.2.8关系运算符和关系表达式
  2.2.9自增减运算符
  2.2.10单片机的几个周期介绍
  2.2.11while循环语句和for循环语句
  2.2.12不带参数和带参数函数的写法和调用
  2.3“位操作”控制流水灯
  2.3.1编程思路
  2.3.2参考程序
  2.3.3部分程序代码详解
  2.4字节控制(即并行I/O口控制)流水灯
  2.4.1编程思路
  2.4.2参考程序
  2.5使用移位运算符控制流水灯
  2.5.1逻辑运算符和位运算符
  2.5.2使用移位运算符控制流水灯的编程示例
  2.6使用库函数实现流水灯
  2.6.1循环移位函数
  2.6.2使用循环移位函数实现流水灯
  2.7使用条件语句实现流水灯
  2.7.1条件语句
  2.7.2使用if语句实现流水灯
  2.8使用swtich语句控制流水灯
  2.8.1switch语句介绍
  2.8.2使用swtich语句控制流水灯
  2.9使用数组控制流水灯
  2.9.1C51的数组
  2.9.2使用数组控制流水灯
  2.10使用指针控制流水灯
  2.10.1指针的概念和用法
  2.10.2使用指针控制流水灯
  2.11开关与灯的灵活控制
  2.11.1钮子开关控制单片机
  2.11.2轻触按键控制单片机
  2.12按钮控制电动机的起动、停止、顺序起动、正反转、PWM调速
  2.12.1按钮控制直流电动机和交流电动机的起动和停止
  2.12.2按键控制交流电动机的顺序起动和正反转
  2.13典型训练任务
  第3章数码管数字钟
  3.1数码管的显示原理
  3.2数码管的静态显示
  3.3数码管的动态显示
  3.3.1YL236单片机实训台数码管显示电路
  3.3.2数码管动态显示入门示例
  3.4数码管24h时钟
  3.4.1单片机的中断系统
  3.4.2定时器T0和T1工作方式1应用示例
  3.4.3独立按键调时的数字钟
  3.5典型训练任务
  第4章综合应用之物料传送机模拟装置
  4.1物料传送机模拟装置
  4.1.1物料传送机模拟装置简介
  4.1.2硬件连接
  4.1.3程序代码示例
  4.2典型训练任务
  第2篇提高篇
  第5章单片机的串行通信
  5.1串行通信的基础知识
  5.1.1串行通信标准和串行通信接口
  5.1.2波特率
  5.1.3同步通信与异步通信简介
  5.1.4硬件连接
  5.1.5读写串行口数据
  5.1.6串行控制与状态寄存器
  5.1.7串行口的工作方式
  5.2串口通信设置
  5.2.1计算机端串口通信设置
  5.2.2单片机端串口通信的设置
  5.3单片机串口通信的基础程序范例
  5.4串口通信应用示例(用串口校准时间的数字钟)
  第6章自动恒温箱
  6.1自动恒温箱介绍
  6.2LED点阵显示屏的应用
  6.2.1LED点阵显示屏基础
  6.2.2YL236单片机实训台LED点阵显示屏
  6.2.3LED点阵显示屏的编程
  6.3DS18B20温度传感器
  6.3.1DS18B20简介
  6.3.2DS18B20的控制方法
  6.3.3DS18B20的编程方法示例
  6.4自动恒温箱的实现
  6.5典型训练任务
  第7章温度及市电电压监测仪
  7.1温度及市电电压监测仪介绍
  7.2AD转换
  7.2.1AD和DA转换简介
  7.2.2典型AD转换芯片ADC0809介绍
  7.2.3ADC0809应用示例(I/O口方式编程)
  7.3LM35温度传感器的认识和使用
  7.3.1LM35的外形及特点
  7.3.2LM35的典型应用电路分析
  7.3.3LM35的应用电路连接及温度转换编程
  7.4LCD1602液晶显示器的认识和使用
  7.4.1LCD1602液晶显示器引脚功能
  7.4.2LCD1602模块内部结构和工作原理
  7.4.3LCD1602的时序
  7.4.4LCD1602指令说明
  7.4.5LCD1602的编程
  7.5电压源介绍
  7.6电子温度计及市电电压监测仪的程序代码示例及分析
  7.7知识链接——DA转换芯片DAC0832及应用
  7.7.1DAC0832的内部结构和引脚功能
  7.7.2YL236实训台DA转换模块介绍
  7.7.3ADC0832采用I/O方式编程示例
  7.7.4ADC0832采用扩展地址方式编程示例
  7.8典型训练任务
  第8章电子密码锁(液晶显示器、矩阵键盘的综合应用)
  8.1电子密码锁简介
  8.2矩阵键盘的应用方法
  8.2.1矩阵键盘的结构
  8.2.2矩阵键盘的编程方法——扫描法和利用二维数组存储键值
  8.3LCD12864
  8.3.1LCD12864的引脚说明
  8.3.2YL236单片机实训台LCD12864模块介绍
  8.3.3LCD12864的读写时序和指令说明
  8.3.4LCD12864的点阵结构
  8.3.5LCD12864的指令说明
  8.3.6LCD12864字模的获取
  8.3.7LCD12864的应用示例
  8.4电子密码锁的实现
  8.4.1硬件连接及编程思路和技巧
  8.4.2程序代码示例及讲析
  8.5拓展
  8.5.1LCD12864的跨屏显示
  8.5.2带字库的LCD12864的显示编程
  8.6典型训练任务
  第9章步进电动机的控制
  9.1步进电动机简介
  9.2步进电动机的参数
  9.3YL236实训台的步进电动机模块介绍
  9.3.1步进电动机及驱动器
  9.3.2步进电动机位移装置与保护装置
  9.4步进电动机的控制示例
  9.4.1步进电动机模块游标的归零
  9.4.2步进电动机的定位
  9.5典型训练任务
  第10章单片机I/O口的扩展
  10.1&8255芯片的认识及应用
  10.1.1&8255芯片的认识
  10.1.2&8255芯片的典型应用示例
  10.2&74LS245芯片及其应用
  10.3端口复用的一些经验
  10.3.1端口复用的一些具体策略
  10.3.2使用8255芯片时单片机及8255芯片的端口分配建议
  第3篇综合应用篇
  第11章方便面生产线控制系统模拟
  11.1方便面模拟生产线任务书
  11.2方便面模拟生产线的实现
  11.2.1方便面模拟生产线硬件模块接线和编程思路
  11.2.2程序代码示例
  11.3模块化编程
  第12章煤矿自动运输车模拟控制系统
  12.1煤矿自动运输车模拟装置系统说明
  12.2煤矿自动运输车模拟系统的实现
  12.2.1煤矿自动运输车模拟系统硬件接线
  12.2.2煤矿自动运输车模拟系统的程序代码示例及解释
  附录C51中的关键字
Copyright &
All Rights Reserved单片机c语言节日彩灯控制器设计_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
7页免费20页免费6页免费1页¥0.5021页4下载券 9页7下载券2页免费13页2下载券4页免费24页2下载券
喜欢此文档的还喜欢174页2下载券196页3下载券34页1下载券11页2下载券187页1下载券
单片机c语言节日彩灯控制器设计|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢《单片机C语言程序设计实训&100&例—基于&8051+Proteus仿真》案例
《单片机C语言程序设计实训 100 例—基于
8051+Proteus仿真》案例
第 01& 篇 基础程序设计
01&& 闪烁的
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit LED=P1^0;
void DelayMS(uint x)
while(x--)
for(i=0;i&120;i++);
void main()
LED=~LED; DelayMS(150);
02&& 从左到右的流水灯
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint x)
while(x--)
for(i=0;i&120;i++);
void main()
P0=_crol_(P0,1); //P0 的值向左循环移动
DelayMS(150);
8 只 LED 左右来回点亮
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint x)
while(x--)
for(i=0;i&120;i++);
void main()
P2=0x01; while(1)
for(i=0;i&7;i++)
P2=_crol_(P2,1); //P2 的值向左循环移动
DelayMS(150);
for(i=0;i&7;i++)
P2=_cror_(P2,1); //P2 的值向右循环移动
DelayMS(150);
04&& 花样流水灯
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int uchar code
Pattern_P0[]=
0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,
0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,
0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,
0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,
0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff
uchar code Pattern_P2[]=
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,
0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,
0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,
0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,
0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff
void DelayMS(uint x)
while(x--)
for(i=0;i&120;i++);
void main()
//从数组中读取数据送至 P0 和 P2 口显示
for(i=0;i&136;i++)
P0=Pattern_P0[i]; P2=Pattern_P2[i]; DelayMS(100);
05&& LED 模拟交通灯
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int
RED_A=P0^0;&&&&&
//东西向灯
sbit YELLOW_A=P0^1;
sbit GREEN_A=P0^2;
RED_B=P0^3;&&&&&&
//南北向灯
sbit YELLOW_B=P0^4;
sbit GREEN_B=P0^5;
uchar Flash_Count=0,Operation_Type=1; //闪烁次数,操作类型变量
void DelayMS(uint x)
while(x--) for(i=0;i&120;i++);
//交通灯切换
void Traffic_Light()
switch(Operation_Type)
//东西向绿灯与南北向红灯亮 RED_A=1;YELLOW_A=1;GREEN_A=0;
RED_B=0;YELLOW_B=1;GREEN_B=1; DelayMS(2000);
Operation_Type=2;
//东西向黄灯闪烁,绿灯关闭 DelayMS(300); YELLOW_A=~YELLOW_A;GREEN_A=1;
if(++Flash_Count!=10) //闪烁 5 次 Flash_Count=0;
Operation_Type=3;
//东西向红灯,南北向绿灯亮 RED_A=0;YELLOW_A=1;GREEN_A=1;
RED_B=1;YELLOW_B=1;GREEN_B=0; DelayMS(2000);
Operation_Type=4;
4:&&& //南北向黄灯闪烁
5 次 DelayMS(300); YELLOW_B=~YELLOW_B;GREEN_B=1;
if(++Flash_Count!=10) Flash_Count=0;
Operation_Type=1;
void main()
while(1) Traffic_Light();
06&& 单只数码管循环显示
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
uchar code
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
void DelayMS(uint x)
while(x--) for(t=0;t&120;t++);
void main()
uchar i=0; P0=0x00; while(1)
P0=~DSY_CODE[i]; i=(i+1); DelayMS(300);
8 只数码管滚动显示单个数字
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
uchar code
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void DelayMS(uint x)
while(x--) for(t=0;t&120;t++);
void main()
uchar i,wei=0x80;
for(i=0;i&8;i++)
//关闭显示
wei=_crol_(wei,1);
P0=DSY_CODE[i];&&&
//发送数字段码
//发送位码 DelayMS(300);
8 只数码管动态显示多个不同字符
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
uchar code
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void DelayMS(uint x)
while(x--) for(t=0;t&120;t++);
void main()
uchar i,wei=0x80;
for(i=0;i&8;i++)
P0=DSY_CODE[i];&&&
//发送段码
wei=_crol_(wei,1);
P2=&&&&&&&&&&&&&
//发送位码
DelayMS(2);
8 只数码管闪烁显示数字串
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int
uchar code
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code
DSY_IDX[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void DelayMS(uint x)
while(x--) for(t=0;t&120;t++);
void main()
uchar i,j;
for(i=0;i&30;i++)
for(j=0;j&8;j++)
P0=DSY_CODE[j];&&&
//发送段码
P2=DSY_IDX[j];&&&&
//发送位码 DelayMS(2);
P2=0x00;&&&
//关闭所有数码管并延时
DelayMS(1000);
8 只数码管滚动显示数字串
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
uchar code
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//下面数组看作环形队列,显示从某个数开始的 8 个数(10 表示黑屏)
uchar Num[]={10,10,10,10,10,10,10,10,2,9,8};
void DelayMS(uint x)
while(x--) for(t=0;t&120;t++);
void main()
uchar i,j,k=0,m=0x80;
//刷新若干次,保持一段时间的稳定显示
for(i=0;i&15;i++)
for(j=0;j&8;j++)
//发送段码,采用环形取法,从第 k 个开始取第 j 个
P0=0 P0=DSY_CODE[Num[(k+j)]];
m=_crol_(m,1);
P2=m;&&&&&
//发送位码
DelayMS(2);
k=(k+1); &//环形队列首支针 k 递增,Num 下标范围
0~10,故对 11 取余
K1-K4 控制 LED 移位
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint x)
while(x--)
for(i=0;i&120;i++);
// 根据 P1 &口的按键移动
void Move_LED()
if&&&&&&&&
((P1&0x10)==0)
P0=_cror_(P0,1);&&&&&&
&& //K1 else
if((P1&0x20)==0)
P0=_crol_(P0,1);&&
& //K2 else if((P1&0x40)==0)
P2=_cror_(P2,1);&&&&&&&&
//K3 else if((P1&0x80)==0)
P2=_crol_(P2,1);&&&&&&&&
void main()
uchar Recent_K //最近按键
P0=0 P2=0 P1=0
Recent_Key=0
if(Recent_Key!=P1)
Recent_Key=P1;&&&&&&&
//保存最近按键
Move_LED(); DelayMS(10);
K1-K4 按键状态显示
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit LED1=P0^0;
sbit LED2=P0^1; sbit LED3=P0^2; sbit LED4=P0^3;
sbit K1=P1^0; sbit K2=P1^1; sbit K3=P1^2; sbit K4=P1^3;
void DelayMS(uint x)
while(x--) for(i=0;i&120;i++);
void main()
P0=0 P1=0 while(1)
LED1=K1; LED2=K2; if(K3==0)
while(K3==0); LED3=~LED3;
while(K4==0); LED4=~LED4;
DelayMS(10);
K1-K4 分组控制 LED
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint x)
while(x--) for(i=0;i&120;i++);
void main()
uchar k,t,Key_S P0=0
if(t!=0xff)
DelayMS(10);
//取得 4 位按键值,由模式 XXXX1111(X 中有一位为 0,其他均为 1)
//变为模式 0000XXXX(X 中有一位为 1,其他均为 0)
Key_State=~t&&4;
//检查 1 所在位置,累加获取按键号 k while(Key_State!=0)
Key_State&&=1;
//根据按键号 k 进行 4 种处理
if(P0==0x00) P0=0 P0&&=1;
DelayMS(200);
K1-K4 控制数码管移位显示
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int
uchar code
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar code
DSY_Index[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
//待显示到各数码管的数字缓冲(开始仅在 0 位显示 0,其他黑屏)
Display_Buffer[]={0,10,10,10,10,10,10,10};
void DelayMS(uint x)
while(x--) for(i=0;i&120;i++);
void Show_Count_ON_DSY()
for(i=0;i&8;i++)
P0=DSY_CODE[Display_Buffer[i]];
P2=DSY_Index[i];
DelayMS(2);
void main()
uchar i,Key_NO,Key_Counts=0;
P0=0 P1=0 P2=0x00; while(1)
Show_Count_ON_DSY(); P1=0
Key_NO=P1;
//P1 口按键状态分别为 K1-0xfe,K2-0xfd,K3-0xfb
switch(Key_NO)
0xfe:&&&&&&
Key_Counts++;
if(Key_Counts&8) Key_Counts=8;
Display_Buffer[Key_Counts-1]=Key_C
0xfd:&&&&&
if(Key_Counts&0)Display_Buffer[--Key_Counts]=10;
0xfb:&&&&&
Display_Buffer[0]=0;
for(i=1;i&8;i++)
Display_Buffer[i]=10; Key_Counts=0;
//若键未释放则仅刷新显示,不进行键扫描
while(P1!=0xff) Show_Count_ON_DSY();
K1-K4 控制数码管加减演示
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
uchar code
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//待显示的 3 位缓冲
uchar Num_Buffer[]={0,0,0};
//按键代码,按键计数
uchar Key_Code,Key_Counts=0;
void DelayMS(uint x)
while(x--) for(i=0;i&120;i++);
//显示函数
void Show_Counts_ON_DSY()
uchar i,j=0x01; Num_Buffer[2]=Key_Counts/100;
Num_Buffer[1]=Key_Counts/10; Num_Buffer[0]=Key_C
for(i=0;i&3;i++)
j=_cror_(j,1); P0=0 P0=DSY_CODE[Num_Buffer[i]];
DelayMS(1);
void main()
P0=0 P1=0 P2=0x00; Key_Code=0
Show_Counts_ON_DSY(); P1=0
Key_Code=P1;
//有键按下时,数码管刷新显示 30 次,该行代码同时起到延时作用
if(Key_Code!=0xff)
for(i=0;i&30;i++)
Show_Counts_ON_DSY();
switch(Key_Code)
0xfe:&&&&&&
if(Key_Counts&255) Key_Counts++;
0xfd:&&&&&
if(Key_Counts&0) Key_Counts--;
0xfb:&&&&&
Key_Counts=0;
Key_Code=0
4X4 &矩阵键盘控制条 形 LED 显示
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
//矩阵键盘按键特征码表
uchar code
KeyCodeTable[]={0x11,0x12,0x14,0x18,0x21,
0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88};
void DelayMS(uint x)
while(x--) for(i=0;i&120;i++);
//键盘扫描
uchar Keys_Scan()
uchar sCode,kCode,i,k;
//低 4 位置 0,放入 4 行
//若高 4 位出现 0,则有键按下
if((P1&0xf0)!=0xf0)
DelayMS(2);
if((P1&0xf0)!=0xf0)
sCode=0&&&&&&&&&&&&&&&&
//行扫描码初值
for(k=0;k&4;k++)&
&//对 4 行分别进行扫描
if((P1&0xf0)!=0xf0)
kCode=~P1;
for(i=0;i&16;i++)&&&
//查表得到按键序号并返回
if(kCode==KeyCodeTable[i])
return(i);
sCode=_crol_(sCode,1);
return(-1);
void main()
uchar i,P2_LED,P3_LED;
KeyNo=-1;&&&&&&&&&
//按键序号,-1 表示无按键
KeyNo=Keys_Scan();&&&
//扫描键盘获取按键序号 KeyNo if(KeyNo!=-1)
P2_LED=0 P3_LED=0
for(i=0;i&=KeyNo;i++)
&//键值越大,点亮的 LED 越多
P3_LED&&=1; else
P2_LED&&=1;
P3=P3_LED;&&&&&&&&
//点亮条形 LED P2=P2_LED;
17&& 数码管显示
4X4 矩阵键盘按
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int
uchar code
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};
sbit BEEP=P3^7;
//上次按键和当前按键的序号,该矩阵中序号范围 0~15,16 表示无按键
uchar Pre_KeyNo=16,KeyNo=16;
void DelayMS(uint x)
while(x--) for(i=0;i&120;i++);
//矩阵键盘扫描
void Keys_Scan()
P1=0x0f; //高 4 位置 0,放入 4 行
DelayMS(1);
Tmp=P1^0x0f;//按键后 0f 变成 0000XXXX,X 中一个为 0,3 个仍为
1,通过异或把 3 个 1 变为 0,唯 一的 0 变为 1
switch(Tmp)&
&//判断按键发生于 0~3 列的哪一列
KeyNo=0; case
2:&&&&&&&&&&&&&
KeyNo=1; case 4: KeyNo=2; case
8:&&&&&&&&&&&&&
default:KeyNo=16; //无键按下
P1=0xf0;&&&&
//低 4 位置 0,放入 4 列
DelayMS(1);
Tmp=P1&&4^0x0f;//按键后
f0 变成 XXXX0000,X 中有 1 个为 0,三个仍为 1;高 4 位转移到低 4 位并 异或得到改变的值
switch(Tmp)& &//对
0~3 行分别附加起始值 0,4,8,12
case 1:&&&
KeyNo+=0; case
2:&&&&&&&&&&&&&
KeyNo+=4; case
4:&&&&&&&&&&&&&
KeyNo+=8; case
8:&&&&&&&&&&&&&
KeyNo+=12;
void Beep()
for(i=0;i&100;i++)
DelayMS(1); BEEP=~BEEP;
void main()
P0=0x00; BEEP=0; while(1)
if(P1!=0xf0)
Keys_Scan();&& //获取键序号
if(Pre_KeyNo!=KeyNo)
P0=~DSY_CODE[KeyNo]; Beep(); Pre_KeyNo=KeyNo;
DelayMS(100);
18&& 开关控制
#include&reg51.h&
sbit S1=P1^0;
sbit S2=P1^1;
sbit LED1=P0^0;
sbit LED2=P0^1;
void main()
19&& 继电器控制照明设备
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit K1=P1^0;
sbit RELAY=P2^4;
void DelayMS(uint ms)
while(ms--)for(t=0;t&120;t++);
void main()
P1=0 RELAY=1; while(1)
while(K1==0); RELAY=~RELAY; DelayMS(20);
数码管显示拨码开关编码
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
//各数字的数码管段码(共阴)
uchar code
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//显示缓冲
uchar DSY_Buffer[3]={0,0,0};
void DelayMS(uint ms)
while(ms--)for(t=0;t&120;t++);
void main()
uchar i,m,N P0=0 P2=0 while(1)
Num=P1; //读取拨码开关的值 DSY_Buffer[0]=Num/100;
DSY_Buffer[1]=Num/10; DSY_Buffer[2]=N
for(i=0;i&3;i++)&&&&
//刷新显示在数码管上
m=_crol_(m,1); P2=m; P0=DSY_CODE[DSY_Buffer[i]];
DelayMS(10);
21&& 开关控制报警器
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit SPK=P1^0;
sbit K1=P1^7;
//发声函数
void Alarm(uchar t)
uchar i,j;
for(i=0;i&200;i++)
for(j=0;j&t;j++);&&&&
//由参数 t 行成不同的频率
void main()
Alarm(90); Alarm(120);
22&& 按键发音
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit BEEP=P3^7;
sbit K1=P1^4; sbit K2=P1^5; sbit K3=P1^6; sbit K4=P1^7;
void DelayMS(uint x)
while(x--) for(t=0;t&120;t++);
//按周期 t 发音
void Play(uchar t)
for(i=0;i&100;i++)
BEEP=~BEEP; DelayMS(t);
void main()
P1=0 BEEP=0; while(1)
if(K1==0)&&&&&&
if(K2==0)&&&&&&&&&&&&&&&&&&&&
if(K3==0)&&&&&&&&&&&&&&&&&&&&
if(K4==0)&&&&&&&&&&&&&&&&&&&&
23&& 播放音乐
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit BEEP=P3^7;
//生日快乐歌的音符频率表,不同频率由不同的延时来决定
uchar code
SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,
212,212,106,126,159,169,190,119,119,126,159,142,159,0};
//生日快乐歌节拍表,节拍决定每个音符的演奏长短
uchar code
SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,
9,3,12,12,12,12,12,9,3,12,12,12,24,0};
void DelayMS(uint x)
while(x--) for(t=0;t&120;t++);
//播放函数
void PlayMusic()
uint i=0,j,k;
while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)
//播放各个音符,SONG_LONG 为拍子长度
for(j=0;j&SONG_LONG[i]*20;j++)
BEEP=~BEEP;
//SONG_TONE 延时表决定了每个音符的频率
for(k=0;k&SONG_TONE[i]/3;k++);
DelayMS(10);
void main()
PlayMusic();&
&//播放生日快乐
DelayMS(500);&&&&&
//播放完后暂停一段时间
INT0 中断计数
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int
//0~9 的段码
uchar code
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
//计数值分解后各个待显示的数位
uchar DSY_Buffer[]={0,0,0};
uchar Count=0;
sbit Clear_Key=P3^6;
//数码管上显示计数值
void Show_Count_ON_DSY()
DSY_Buffer[2]=Count/100; &//获取 3
DSY_Buffer[1]=Count0/10; DSY_Buffer[0]=C
if(DSY_Buffer[2]==0)&&&&
//高位为 0 时不显示
DSY_Buffer[2]=0x0a;
if(DSY_Buffer[1]==0)&&&&
//高位为 0,若第二位为 0 同样不显示
DSY_Buffer[1]=0x0a;
P0=DSY_CODE[DSY_Buffer[0]]; P1=DSY_CODE[DSY_Buffer[1]];
P2=DSY_CODE[DSY_Buffer[2]];
void main()
P0=0x00; P1=0x00; P2=0x00;
IE=0x81; //允许 INT0 中断
IT0=1;&&&&&&&&&&
//下降沿触发
if(Clear_Key==0) Count=0; &//清
Show_Count_ON_DSY();
//INT0 中断函数
void EX_INT0() interrupt 0
Count++;&&&&&&
//计数值递增
25&& 外部 INT0
中断控制 LED
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit LED=P0^0;
void main()
LED=1; EA=1; EX0=1; IT0=1; while(1);
//INT0 中断函数
void EX_INT0() interrupt 0
LED=~LED; &//控制 LED 亮灭
INT0 及 INT1 中断计数
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int
sbit K3=P3^4; //2 个清零键
sbit K4=P3^5;
//数码管段码与位码
uchar code
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar code
DSY_Scan_Bits[]={0x20,0x10,0x08,0x04,0x02,0x01};
//2 组计数的显示缓冲,前 3 位一组,后 3 位一组
uchar data Buffer_Counts[]={0,0,0,0,0,0};
uint Count_A,Count_B=0;
void DelayMS(uint x)
while(x--) for(t=0;t&120;t++);
//数据显示
void Show_Counts()
Buffer_Counts[2]=Count_A/100;
Buffer_Counts[1]=Count_A0/10; Buffer_Counts[0]=Count_A;
Buffer_Counts[2]==0)
Buffer_Counts[2]=0x0a;
Buffer_Counts[1]==0) Buffer_Counts[1]=0x0a;
Buffer_Counts[5]=Count_B/100;
Buffer_Counts[4]=Count_B0/10; Buffer_Counts[3]=Count_B;
Buffer_Counts[5]==0)
Buffer_Counts[5]=0x0a;
Buffer_Counts[4]==0) Buffer_Counts[4]=0x0a;
for(i=0;i&6;i++)
P2=DSY_Scan_Bits[i]; P1=DSY_CODE[Buffer_Counts[i]];
DelayMS(1);
void main()
&//中断优先
IT0=1; IT1=1; while(1)
if(K3==0) Count_A=0; if(K4==0) Count_B=0; Show_Counts();
//INT0 中断函数
void EX_INT0() interrupt 0
Count_A++;
//INT1 中断函数
void EX_INT1() interrupt 2
Count_B++;
27&& 定时器控制单只
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit LED=P0^0;
uchar T_Count=0;
void main()
TMOD=0x00;&&&&&&&&&&&&&&
//定时器 0 工作方式 0
TH0=()/32;&& //5ms
IE=0x82;&&&&&&&&&&&&&&
//允许 T0 中断
//T0 中断函数
void LED_Flash() interrupt 1
TH0=()/32;&& //恢复初值
if(++T_Count==100)&&&&
//0.5s 开关一次 LED
LED=~LED; T_Count=0;
TIMER0 控制流水灯
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
void main()
uchar T_Count=0; P0=0
TMOD=0x01;&&&&&&&&&&&&&&&&&&&&&
//定时器 0 工作方式 1
TH0=()/256;&&&&
//40ms 定时
TR0=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//启动定时器
if(TF0==1)
TH0=()/256;&&&&
//恢复初值 TL0=()%6; if(++T_Count==5)
P0=_crol_(P0,1); P2=_crol_(P2,1); T_Count=0;
29&& 定时器控制 4
个 LED 滚动闪烁
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit B1=P0^0;
sbit G1=P0^1; sbit R1=P0^2; sbit Y1=P0^3; uint i,j,k;
void main()
i=j=k=0; P0=0
TMOD=0x02;&&&&&&&&&&&&&&
//定时器 0 工作方式 2
TH0=256-200;&&&&&&&&&&&&&
//200us 定时
TL0=256-200; IE=0x82;
TR0=1;&&&&&&&&&&&&&&&&&&&&&&&
//启动定时器
//T0 中断函数
void LED_Flash_and_Scroll() interrupt 1
if(++k&35)&&&&
//定时中断若干次后执行闪烁
case 0:&&&
B1=~B1; case
1:&&&&&&&&&&&&&
G1=~G1; case
2:&&&&&&&&&&&&&
R1=~R1; case
3:&&&&&&&&&&&&&
Y1=~Y1; default:i=0;
if(++j&300)
//每次闪烁持续一段时间
//关闭显示
//切换到下一个 LED
30&& T0 控制
LED 实现二进制计数
#include&reg51.h&
void main()
TMOD=0x05; //定时器 0 为计数器,工作方式 1,最大计数值 65535
TH0=0;&&&&&&&&&
//初值为 0
TR0=1;&&&&&&&&&&&&&&&&&&&&&&&
//启动定时器
P1=TH0; P2=TL0;
TIMER0 与 TIMER1 控制条形 LED
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int uchar tc0=0,tc1=0;
void main()
TMOD=0x11; //定时器 0、定时器
1 均工作于方式 1
TH0=()/256;&&&&&&&&&&&
//定时器 0:15ms
TH1=()/256;&&&&&&&&&&&
//定时器 1:50ms
TL1=()%6; IE=0x8a;
TR0=1;&&&&&&&&&&&&&&&&&&&&&&&
//启动定时器
//T0 中断函数
void Time0() interrupt 1
TH0=()/256;&&&&&&&&&&&
//恢复定时器 0 初值
if(++tc0==10)&&&&&&&&&&&&&&&&&&&&
//150ms 转换状态
tc0=0; P0=_crol_(P0,1);
//T1 中断函数
void Time1() interrupt 3
TH0=()/256;&&&&&&&&&&&
//恢复定时器 1 初值
if(++tc1==10)&&&&&&&&&&&&&&&&&&&&
//500ms 转换状态
tc1=0; P2=_crol_(P2,1);
10s 的秒表
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit K1=P3^7;
uchar i,Second_Counts,Key_Flag_I bit Key_S
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void DelayMS(uint ms)
while(ms--) for(t=0;t&120;t++);
//处理按键事件
void Key_Event_Handle()
if(Key_State==0)
Key_Flag_Idx=(Key_Flag_Idx+1)%3;
switch(Key_Flag_Idx)
EA=1;ET0=1;TR0=1;
EA=0;ET0=0;TR0=0;
P0=0x3f;P2=0x3f;i=0;Second_Counts=0;
void main()
P0=0x3f;&&&&&&&&&&&&&&&&&&&&&
P2=0x3f; i=0; Second_Counts=0;
Key_Flag_Idx=0;&&&&&&&&&&&&&&&&
//按键次数(取值 0,1,2,3)
Key_State=1;&&&&&&&&&&&&&&&
//按键状态
TMOD=0x01;&&&&&&&&&&&&&&&&&&&&&
//定时器 0 方式 1
TH0=()/256;&&&&&&&&&&&
//定时器 0:15ms
if(Key_State!=K1)
DelayMS(10); Key_State=K1; Key_Event_Handle();
//T0 中断函数
void DSY_Refresh() interrupt 1
TH0=()/256;&&&&&&&&&&&
//恢复定时器 0 初值
if(++i==2)&&&&&&&&&&&&&&&&&&&&&&&&&&
//50ms*2=0.1s 转换状态
i=0; Second_Counts++;
P0=DSY_CODE[Second_Counts/10]; P2=DSY_CODE[Second_Counts];
if(Second_Counts==100)
Second_Counts=0;&&&&&
//满 100(10s)后显示 00
33&& 用计数器中断实现
100 以内的按键计数
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int
uchar&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
uchar Count=0;
void main()
P0=0x00; P2=0x00;
TMOD=0x06;&&&&&&&&&&&&&&&&&&&&&
//计数器 T0 方式 2
TH0=TL0=256-1;&&&&&&&&&&&&&&&
//计数值为 1
ET0=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//允许 T0 中断
EX0=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//允许 INT0 中断
EA=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//允许 CPU 中断
IP=0x02;&&&&&&&&&&&&&&&&&&&&&
//设置优先级,T0 高于 INT0
IT0=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//INT0 中断触发方式为下降沿触发
TR0=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//启动 T0 while(1)
P0=DSY_CODE[Count/10]; P2=DSY_CODE[Count];
//T0 计数器中断函数
void Key_Counter() interrupt 1
Count=(Count+1)0; //因为只有两位数码管,计数控制在 100
以内(00~99)
//INT0 中断函数
void Clear_Counter() interrupt 0
100 000s 以内的计时程序
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
uchar&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//6 只数码管上显示的数字
uchar Digits_of_6DSY[]={0,0,0,0,0,0};
sbit Dot=P0^7;
void DelayMS(uint ms)
while(ms--) for(t=0;t&120;t++);
void main()
uchar i,j; P0=0x00; P3=0 Count=0;
TMOD=0x01;&&&&&&&&&&&&&&&&&&&&&
//计数器 T0 方式 1
TH0=()/256;&&&&
//50ms 定时
TL0=()%6; IE=0x82;
TR0=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//显示 Digits_of_6DSY[5]~Digits_of_6DSY[0]的内容
//前面高位,后面低位,循环中 i!=-1 亦可写成 i!=0xff
for(i=5;i!=-1;i--)
j=_crol_(j,1);
P3=j; P0=DSY_CODE[Digits_of_6DSY[i]]; if(i==1)
Dot=1;&&&&&&&&&&&&
//加小数点 DelayMS(2);
//T0 中断函数
void Timer0() interrupt 1
TH0=()/256;&&&&
//恢复初值 TL0=()%6; if(++Count!=2)
Digits_of_6DSY[0]++; &//0.1s
for(i=0;i&=5;i++)&&&&&&&&&
//进位处理
if(Digits_of_6DSY[i]==10)
Digits_of_6DSY[i]=0;
Digits_of_6DSY[i+1]++;&&&&&
//如果 0~4 位则分别向高一位进位
&&&&&&&&&&&&
//若某低位没有进位,怎循环提前结束
定时器控制数码管动态显示
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
//段码,最后一位是“-”的段码
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
//待显示的数据:09-12-25&与
23-59-58(分两组显示)
uchar code
Table_of_Digits[][8]={{0,9,10,1,2,10,2,5},{2,3,10,5,9,10,5,8}};
uchar i,j=0;
void main()
P3=0x80;&&&&&&&&&&&&&&&&&&&&
//位码初值
TMOD=0x00;&&&&&&&&&&&&&&&&&&&&&
//计数器 T0 方式 0
TH0=()/32;&& //4ms
TL0=(; IE=0x82;
TR0=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//T0 中断函数控制数码管刷新显示
void DSY_Show() interrupt 1
TH0=()/32;&&&&&&&&&
//恢复初值
P0=0&&&&&&&&&&&&&&&&&&&&&
//输出位码和段码 P0=DSY_CODE[Table_of_Digits[i][j]]; P3=_crol_(P3,1);
j=(j+1)%8;&&&&&&&&&&&&&&&&&&&&&&&&&
//数组第 i 行的下一字节索引
if(++t!=350)//保持刷新一段时间
i=(i+1)%2;&&&&&&&&&&&&&&&&&&&&&&&&&
//数组行 i=0 时显示年月日,i=1 时显示时分秒
36&& 8X8LED 点阵显示数字
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
uchar code Table_of_Digits[]=
0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00,
0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00,
0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,
0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00,
0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00,
0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00,
0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00,
0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00,
0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,
0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00
uchar i=0,t=0,Num_I
void main()
Num_Index=0;&&&&&&&&&&&&&&&&&&&
//从 0 开始显示
TMOD=0x00;&&&&&&&&&&&&&&&&&&&&&
//T0 方式 0
TH0=()/32;&&&&&&&&&
//2ms 定时
TL0=(; IE=0x82;
TR0=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//T0 中断函数
void LED_Screen_Display() interrupt 1
TH0=()/32;&&&&&&&&&
//恢复初值
P0=0&&&&&&&&&&&&&&&&&&&&&
//输出位码和段码 P0=~Table_of_Digits[Num_Index*8+i]; P3=_crol_(P3,1);
if(++i==8)
i=0;&&&&&&&&&&&&&&&&&&&
//每屏一个数字由 8 个字节构成
if(++t==250)&&&&&&&&&&&&&&&
//每个数字刷新显示一段时间
if(++Num_Index==10) Num_Index=0; //显示下一个数字
37&& 按键控制
8X8LED 点阵屏显示图形
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
//待显示图形编码
uchar code M[][8]=
{0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00},&&&&&&&&&&
{0x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00},&&&&&&&&
{0x00,0x20,0x30,0x38,0x3c,0x3e,0x00,0x00}&&&&&&&&&&
uchar i,j;
void main()
TMOD=0x01;&&&&&&&&&&&&&&&&&&&&&
//T0 方式 1
TH0=()/256;//2ms 定时
IT0=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//下降沿触发
IE=0x83;&&&&&&&&&&&&&&&&&&&&&
//允许定时器 0、外部 0 中断
i=0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//i 的初值设为 0xff,加 1 后将从 0 开始
//T0 中断控制点阵屏显示
void Show_Dot_Matrix() interrupt 1
TH0=()/256;//恢复初值
P0=0&&&&&&&&&&&&&&&&&&&&&
//输出位码和段码
P0=~M[i][j]; P1=_crol_(P1,1); j=(j+1)%8;
//INT0 中断(定时器由键盘中断启动)
void Key_Down() interrupt 0
P0=0 P1=0x80; j=0;
i=(i+1)%3;&&&&&&&&&&&&&&&&&&&&&&&&&
//i 在 0,1,2 中取值,因为只要 3 个图形
38&& 用定时器设计的门铃
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit Key=P1^7;
sbit DoorBell=P3^0;
void main()
DoorBell=0;
TMOD=0x00;&&&&&&&&&&&&&&
//T0 方式 0
TH0=(;&&&&
//700us 定时
TL0=(; IE=0x82;
if(Key==0)&&&&&&&&&&&
//按下按键启动定时器
while(Key==0);
//T0 中断控制点阵屏显示
void Timer0() interrupt 1
DoorBell=~DoorB
if(p&400)&&&&&&&&&&&&&&&&&&&&
//若需要拖长声音,可以调整 400 和 800
TH0=(;&&&&
//700us 定时
else if(p&800)
TH0=()/32;&& //1ms
39&& 演奏音阶
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit K1=P1^0;
sbit SPK=P3^4;
i=0;&&&&&&&&&&&&&&&&&&&&&&
//音符索引
//14 个音符放在方式 2 下的定时寄存器
(TH0,TL0)
uchar code
HI_LIST[]={0,226,229,232,233,236,238,240,241,242,244,245,246,247,248};
uchar code
LO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3};
//定时器 0 中断函数
void T0_INT() interrupt 1
TL0=LO_LIST[i]; TH0=HI_LIST[i]; SPK=~SPK;
void DelayMS(uint ms)
while(ms--) for(t=0;t&120;t++);
void main()
TMOD=0x00;&&&&&&&&&&&&&&&&&&&&&
//T0 方式 0
IE=0x82; SPK=0; while(1)
while(K1==1);&&&&&&&&&&&&&
//未按键等待
while(K1==0);&&&&&&&&&&&&&
//等待释放 for(i=1;i&15;i++)
TR0=1;&&&&&&&&&&&&&&&&
//播放一个音符
DelayMS(500);&&&&&
//播放延时 TR0=0;
DelayMS(50);
按键控制定时器选播多段音乐
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
K1=P1^0;&&&&&&&&&&&&&&&&&&&&&
//播放和停止键
SPK=P3^7;&&&&&&&&&&&&&&&&&&&
Song_Index=0,Tone_Index=0;&&&
//当前音乐段索引,音符索引
//数码管段码表
uchar code
DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//标准音符频率对应的延时表
uchar code
HI_LIST[]={0,226,229,232,233,236,238,240,241,242,244,245,246,247,248};
uchar code
LO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3};
//三段音乐的音符
uchar code Song[][50]=
{1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1},
{3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,53,3,2,1,1,-1},
{3,2,1,3,2,1,1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,3,2,1,3,2,1,1,-1}
//三段音乐的节拍
uchar code Len[][50]=
{1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,-1},
{1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,-1},
{1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,-1}
//外部中断 0
void EX0_INT() interrupt 0
&//播放结束或者播放中途切换歌曲时停止播放
Song_Index=(Song_Index+1)%3; //跳到下一首的开头
Tone_Index=0;
P2=DSY_CODE[Song_Index];&&&&&&&&&&&
//数码管显示当前音乐段号
//定时器 0 中断函数
void T0_INT() interrupt 1
TL0=LO_LIST[Song[Song_Index][Tone_Index]];
TH0=HI_LIST[Song[Song_Index][Tone_Index]]; SPK=~SPK;
void DelayMS(uint ms)
while(ms--) for(t=0;t&120;t++);
void main()
P2=0xc0; SPK=0;
TMOD=0x00;&&&&&&&&&&&&&&&&&&&&&
//T0 方式 0
IE=0x83; IT0=1; IP=0x02; while(1)
while(K1==1);&&&&&&&&&&&&&
//未按键等待
while(K1==0);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//等待释放
TR0=1;&&&&
//开始播放
Tone_Index=0;&&&&&&&&&&&&
//从第 0 个音符开始
//播放过程中按下 K1 可提前停止播放(K1=0)。
//若切换音乐段会触发外部中断,导致 TR0=0,播放也会停止
while(Song[Song_Index][Tone_Index]!=-1&&K1==1&&TR0==1)
DelayMS(300*Len[Song_Index][Tone_Index]);
&//播放延时(节拍)
Tone_Index++;&&&&&&&&&&&&
//当前音乐段的下一音符索引
TR0=0;&&&&&&&&&&&&&&&&
//停止播放
while(K1==0);&&&&&&
//若提前停止播放,按键未释放时等待
41&& 定时器控制交通指示灯
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int
sbit RED_A=P0^0; //东西向指示灯
sbit YELLOW_A=P0^1;
sbit GREEN_A=P0^2;
sbit RED_B=P0^3; //南北向指示灯
sbit YELLOW_B=P0^4;
sbit GREEN_B=P0^5;
//延时倍数,闪烁次数,操作类型 变量
Time_Count=0,Flash_Count=0,Operation_Type=1;
//定时器 0 中断函数
void T0_INT() interrupt 1
TL0=-; TH0=-50000%6; switch(Operation_Type)
//东西向绿灯与南北向红灯亮 5s RED_A=0;YELLOW_A=0;GREEN_A=1;
RED_B=1;YELLOW_B=0;GREEN_B=0; if(++Time_Count!=100)
//5s(100*50ms)切换 Time_Count=0;
Operation_Type=2;
//东西向黄灯开始闪烁,绿灯关闭 if(++Time_Count!=8) Time_Count=0;
YELLOW_A=~YELLOW_A;GREEN_A=0; if(++Flash_Count!=10)
//闪烁 Flash_Count=0;
Operation_Type=3;
//东西向红灯与南北向绿灯亮 5s RED_A=1;YELLOW_A=0;GREEN_A=0;
RED_B=0;YELLOW_B=0;GREEN_B=1; if(++Time_Count!=100)
//5s(100*50ms)切换 Time_Count=0;
Operation_Type=4;
//南北向黄灯开始闪烁,绿灯关闭 if(++Time_Count!=8) Time_Count=0;
YELLOW_B=~YELLOW_B;GREEN_A=0; if(++Flash_Count!=10)
//闪烁 Flash_Count=0;
Operation_Type=1;
void main()
TMOD=0x01;&&&&&&&&&&&&&&&&&&&&&
//T0 方式 1
IE=0x82; TR0=1; while(1);
42&& 报警与旋转灯
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int sbit SPK=P3^7;
uchar FRQ=0x00;
void DelayMS(uint ms)
while(ms--) for(i=0;i&120;i++);
//INT0 中断函数
void EX0_INT() interrupt 0
TR0=~TR0;&&
//开启或停止两定时器,分别控制报警器的声音和 LED 旋转
if(P2==0x00)
P2=0xe0; //开 3 个旋转灯
P2=0x00; //关闭所有 LED
//定时器 0 中断
void T0_INT() interrupt 1
TH0=0 TL0=FRQ; SPK=~SPK;
//定时器 1 中断
void T1_INT() interrupt 3
TH1=-; TL1=-45000%6; P2=_crol_(P2,1);
void main()
P2=0x00; SPK=0x00;
TMOD=0x11;&&&&&&&
//T0、T1 方式 1
TH0=0x00; TL0=0 IT0=1;
IE=0x8b;&&&&&&&
//开启 0,1,3 号中断
IP=0x01;&&&&&&&
//INT0 设为最高优先
TR1=0;&&&&&&&&&&&&&&&&
//定时器启停由 INT0 控制,初始关闭
FRQ++; DelayMS(1);
串行数据转换为并行数据
#include&reg51.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int sbit SPK=P3^7;
uchar FRQ=0x00;
void DelayMS(uint ms)
while(ms--) for(i=0;i&120;i++);
void main()
uchar c=0x80;
SCON=0x00;&&&&&&&&
//串口模式 0,即移位寄存器输入/输出方式
c=_crol_(c,1); SBUF=c;
while(TI==0);&&&&&&&
//等待发送结束
TI=0;&&&&&&&&&&&&&&&&&&&&&&&&&&
//TI 软件置位
DelayMS(400);
并行数据转换为串行数据
#include&reg51.h&
#include&intrins.h&
#include&stdio.h&
#define uchar unsigned char
#define uint unsigned int
SPL=P2^5;&&&&&&&&&&&&
//shift/load
void DelayMS(uint ms)
while(ms--) for(i=0;i&120;i++);
void main()
SCON=0x10;&&&&&&&&
//串口模式 0,允许串口接收
SPL=0;&&&&&&&&&
//置数(load),读入并行输入口的 8 位数据
SPL=1;&&&&&&
//移位(shift),并口输入被封锁,串行转换开始 while(RI==0); //未接收 1 字节时等待
RI=0;&&&&&&&&&&&&&&&&&&&
//RI 软件置位
P0=SBUF;&&&&&&&&&&&&
//接收到的数据显示在 P0 口,显示拨码开关的值
DelayMS(20);
45&& 甲机通过串口控制乙机
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit LED1=P0^0;
sbit LED2=P0^3;
sbit K1=P1^0;
void DelayMS(uint ms)
while(ms--) for(i=0;i&120;i++);
//向串口发送字符
void Putc_to_SerialPort(uchar c)
SBUF=c; while(TI==0); TI=0;
void main()
uchar Operation_No=0;
SCON=0x40;&&&&&&
//串口模式 1
TMOD=0x20;&&&&&&&
//T1 工作模式 2
PCON=0x00;&&&&&&&&
//波特率不倍增
TH1=0 TL1=0 TI=0; TR1=1; while(1)
if(K1==0)&&&&&&
//按下 K1 时选择操作代码 0,1,2,3
while(K1==0); Operation_No=(Operation_No+1)%4;
switch(Operation_No)&& //根据操作代码发送
A/B/C 或停止发送
LED1=LED2=1;
Putc_to_SerialPort('A'); LED1=~LED1;LED2=1;
Putc_to_SerialPort('B'); LED2=~LED2;LED1=1;
Putc_to_SerialPort('C'); LED1=~LED1;LED2=LED1;
DelayMS(100);
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit LED1=P0^0;
sbit LED2=P0^3;
void DelayMS(uint ms)
while(ms--) for(i=0;i&120;i++);
void main()
SCON=0x50;&&&&&&&&
//串口模式 1,允许接收
TMOD=0x20;&&&&&&&
//T1 工作模式 2
PCON=0x00;&&&&&&&&
//波特率不倍增
TH1=0&&&&&&&&&&&
//波特率 9600
TL1=0 RI=0; TR1=1;
LED1=LED2=1;
if(RI)&&&&&
//如收到则 LED 闪烁
switch(SBUF) //根据所收到的不同命令字符完成不同动作
&LED1=~LED1;LED2=1;&&
//LED1 闪烁 case 'B':
&LED2=~LED2;LED1=1;&&&&&&&&&&&&&&&&&&&
//LED2 闪烁 case 'C':
&LED1=~LED1;LED2=LED1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&
LED1=LED2=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//关闭 LED DelayMS(100);
46&& 单片机之间双向通信
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit LED1=P1^0;
sbit LED2=P1^3;
sbit K1=P1^7;
uchar Operation_No=0; //操作代码
//数码管代码
uchar code
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void DelayMS(uint ms)
while(ms--) for(i=0;i&120;i++);
//向串口发送字符
void Putc_to_SerialPort(uchar c)
SBUF=c; while(TI==0); TI=0;
void main()
LED1=LED2=1; P0=0x00;
SCON=0x50;&&&&&&&&
//串口模式 1,允许接收
TMOD=0x20;&&&&&&&
//T1 工作模式 2
PCON=0x00;&&&&&&&&
//波特率不倍增
TH1=0 TL1=0 TI=RI=0; TR1=1;
IE=0x90;&&&&&&&
//允许串口中断
DelayMS(100);
if(K1==0)&&&&&&
//按下 K1 时选择操作代码 0,1,2,3
while(K1==0); Operation_No=(Operation_No+1)%4;
switch(Operation_No)&& //根据操作代码发送
A/B/C 或停止发送
Putc_to_SerialPort('X'); LED1=LED2=1;
Putc_to_SerialPort('A');
LED1=~LED1;LED2=1;
Putc_to_SerialPort('B'); LED2=~LED2;LED1=1;
Putc_to_SerialPort('C'); LED1=~LED1;LED2=LED1;
//甲机串口接收中断函数
void Serial_INT()
interrupt&&&
if(SBUF&=0&&SBUF&=9)
P0=DSY_CODE[SBUF];
else P0=0x00;
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int sbit LED1=P1^0;
sbit LED2=P1^3; sbit K2=P1^7; uchar NumX=-1;
void DelayMS(uint ms)
while(ms--) for(i=0;i&120;i++);
void main()
LED1=LED2=1;
SCON=0x50;&&&&&&&&
//串口模式 1,允许接收
TMOD=0x20;&&&&&&&
//T1 工作模式 2
TH1=0&&&&&&&&&&&
//波特率 9600
PCON=0x00;&&&&&&&&
//波特率不倍增
RI=TI=0; TR1=1; IE=0x90; while(1)
DelayMS(100);
while(K2==0);
NumX=++NumX;&
&//产生 0~10 范围内的数字,其中 10 表示关闭
SBUF=NumX; while(TI==0); TI=0;
void Serial_INT() interrupt 4
if(RI)&&&&&
//如收到则 LED 则动作
switch(SBUF) //根据所收到的不同命令字符完成不同动作
&LED1=LED2=1;&&&&&&
&LED1=0;LED2=1;&&&
//LED1 亮 case 'B':
&LED2=0;LED1=1;&&&&&&&&&&&&&&&&&&&&
//LED2 亮 case 'C':
&LED1=LED2=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
单片机向主机发送字符串
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int
void DelayMS(uint ms)
while(ms--) for(i=0;i&120;i++);
//向串口发送字符
void Putc_to_SerialPort(uchar c)
SBUF=c; while(TI==0); TI=0;
//向串口发送字符串
void Puts_to_SerialPort(uchar *s)
while(*s!='\0')
Putc_to_SerialPort(*s);
s++; DelayMS(5);
void main()
uchar c=0;
SCON=0x40;&&&&&&&&
//串口模式 1
TMOD=0x20;&&&&&&&
//T1 工作模式 2
TH1=0&&&&&&&&&&&
//波特率 9600
PCON=0x00;&&&&&&&&
//波特率不倍增
TI=0; TR1=1; DelayMS(200);
//向主机发送数据
Puts_to_SerialPort(&Receiving From 8051...\r\n&);
Puts_to_SerialPort(&-------------------------------\r\n&);
DelayMS(50);
Putc_to_SerialPort(c+'A'); DelayMS(100);
Putc_to_SerialPort(' '); DelayMS(100);
if(c==25) //每输出一遍后加横线
Puts_to_SerialPort(&\r\n-------------------------------\r\n&);
DelayMS(100);
if(c==0)&&&&&&&&
//每输出 10 个字符后换行
Puts_to_SerialPort(&\r\n&); DelayMS(100);
48&& 单片机与
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int
Receive_Buffer[101];&&&&&&&&
//接收缓冲
Buf_Index=0;&&&&&&&&&&&&&&&&&&&&&&&&&&
//缓冲空间索引
//数码管编码
uchar code
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
void DelayMS(uint ms)
while(ms--) for(i=0;i&120;i++);
void main()
P0=0x00; Receive_Buffer[0]=-1;
SCON=0x50;&&&&&&&&
//串口模式 1,允许接收
TMOD=0x20;&&&&&&&
//T1 工作模式 2
TH1=0&&&&&&&&&&&
//波特率 9600
PCON=0x00;&&&&&&&&
//波特率不倍增 EA=1;EX0=1;IT0=1; ES=1;IP=0x01;
for(i=0;i&100;i++)
//收到-1 为一次显示结束 if(Receive_Buffer[i]==-1)
P0=DSY_CODE[Receive_Buffer[i]]; DelayMS(200);
} DelayMS(200);
//串口接收中断函数
void Serial_INT() interrupt 4
ES=0;&&&&&&&&&&&&&&&&&&&&&&&&&
//关闭串口中断
RI=0;&&&&&&
//清接收中断标志 c=SBUF;
if(c&='0'&&c&='9')
//缓存新接收的每个字符,并在其后放-1 为结束标志 Receive_Buffer[Buf_Index]=c-'0';
Receive_Buffer[Buf_Index+1]=-1; Buf_Index=(Buf_Index+1)0;
void EX_INT0() interrupt
0&&&&&&&&&
//外部中断 0
uchar *s=&这是由 8051 发送的字符串!\r\n&;
uchar i=0;
while(s[i]!='\0')
SBUF=s[i]; while(TI==0); TI=0;
第 02 篇& 硬件应用
ADC0808 控制 PWM
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int
CLK=P2^4;&&&&&&&&&&&
//时钟信号
ST=P2^5;&&&&&&&
//启动信号
EOC=P2^6;&&&&&&&&&&&
//转换结束信号
OE=P2^7;&&&&&&
//输出使能
PWM=P3^0;&&&&&&&&&&
//PWM 输出
void DelayMS(uint ms)
while(ms--) for(i=0;i&40;i++);
void main()
TMOD=0x02;&&&&&&&
//T1 工作模式 2
TH0=0x14; TL0=0x00; IE=0x82; TR0=1; while(1)
ST=0;ST=1;ST=0;&&&&&&&
//启动 A/D 转换
while(!EOC);&&&&&&&&
//等待转换完成 OE=1;
Val=P1;&&&&&&&&&&&&&&&&&&&&&&&
//读转换值
if(Val==0)&&&&&&&&&&&&&&&&&&&&
//PWM 输出(占空比为 0%)
PWM=0; DelayMS(0xff);
if(Val==0xff)&&&&&&&&&&
//PWM 输出(占空比为 100%)
PWM=1; DelayMS(0xff);
PWM=1;&&&&&&&&&&&&&&&&&&&&&&&
//PWM 输出(占空比为 0%~100%)
DelayMS(Val); PWM=0; DelayMS(0xff-Val);
//T0 定时器中断给 ADC0808 提供时钟信号
void Timer0_INT() interrupt 1
ADC0809 数模转换与显示
#include&reg51.h&
#define uchar unsigned char
#define uint unsigned int
//各数字的数码管段码(共阴)
uchar code
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
CLK=P1^3;&&&&&&&&&&&
//时钟信号
ST=P1^2;&&&&&&&
//启动信号
EOC=P1^1;&&&&&&&&&&&
//转换结束信号
OE=P1^0;&&&&&&
//输出使能
void DelayMS(uint ms)
while(ms--) for(i=0;i&120;i++);
//显示转换结果
void Display_Result(uchar d)
P2=0xf7;&&&&&&&
//第 4 个数码管显示个位数
P0=DSY_CODE[d];
DelayMS(5);
P2=0&&&&&&&
//第 3 个数码管显示十位数
P0=DSY_CODE[d0/10]; DelayMS(5);
P2=0&&&&&&&
//第 2 个数码管显示百位数
P0=DSY_CODE[d/100]; DelayMS(5);
void main()
TMOD=0x02;&&&&&&&
//T1 工作模式 2
TH0=0x14; TL0=0x00; IE=0x82; TR0=1;
P1=0x3f;&&&&&&&
//选择 ADC0809 的通道 3(0111)(P1.4~P1.6)
ST=0;ST=1;ST=0;&&&&&&&
//启动 A/D 转换
while(EOC==0);&&&&&&&&&&
//等待转换完成 OE=1;
Display_Result(P3); OE=0;
//T0 定时器中断给 ADC0808 提供时钟信号
void Timer0_INT() interrupt 1
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。
说的太好了,我顶!
Copyright & 2014
Corporation, All Rights Reserved
Processed in 0.0740 second(s), 3 db_queries,
0 rpc_queries

我要回帖

更多关于 5的平方根 的文章

 

随机推荐