C51频率计数器实验原理图程序设计

合集下载

单片机C51数字频率计程序

单片机C51数字频率计程序

单片机C51数字频率计程序**//头文件部分,文件名:plj.h/**************************************************#include<reg52.h>#include<absacc.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charextern const uchar NoDisp=0; //无显示extern const uchar NoCur=1; //有显示无光标extern const uchar CurNoFlash=2; //有光标但不闪烁extern const uchar CurFlash=3; //有光标且闪烁extern void LcdPos(uchar,uchar); //确定光标位置extern void LcdWd(uchar); //写字符extern void LcdWc(uchar); //送控制字(检测忙信号)extern void LcdWcn(uchar ); //送控制字子程序(不检测忙信号)extern void mDelay(uchar ); //延时,毫秒数由j决定extern void WaitIdle(void); //正常读写操作之前检测LCD控制器状态extern void RstLcd(void); //复位LCD控制器extern void WriteChar(uchar c,uchar xPos,uchar yPos);//在指定的行与列显示指定的字符,xpos:行,ypos:列,c:待显示字符extern void WriteString(uchar *s,uchar xPos,uchar yPos);extern void SetCur(uchar Para); //设置光标extern void ClrLcd(void); //清屏命令extern void WaitIdle(void); // 正常读写操作之前检测LCD控制器状态extern void mDelay(uchar j);/**************************************************/**************************************************//液晶1602子程序,文件名:1602.c/**************************************************;连线图:; DB0---DPROT.0 DB4---DPROT.4 RS-------------P3.5 ; DB1---DPROT.1 DB5---DPROT.5 RW-------------P3.6 ; DB2---DPROT.2 DB6---DPROT.6 E--------------P3.7 ; DB3---DPROT.3 DB7---DPROT.7 VLCD接10K可调电阻到GND*; 需要11根单片机口线;80C51的晶振频率为12MHz;液晶显示程序;**************************************************/#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit RS = P3^5;sbit RW = P3^6;sbit EN = P3^7;#define DPORT P1void LcdPos(uchar,uchar); //确定光标位置void LcdWd(uchar); //写字符void LcdWc(uchar); //送控制字(检测忙信号)void LcdWcn(uchar ); //送控制字子程序(不检测忙信号)void mDelay(uchar ); //延时,毫秒数由j决定void WaitIdle(); //正常读写操作之前检测LCD控制器状态//在指定的行与列显示指定的字符,xpos:行,ypos:列,c:待显示字符void WriteChar(uchar c,uchar xPos,uchar yPos){LcdPos(xPos,yPos);LcdWd(c);}void WriteString(uchar *s,uchar xPos,uchar yPos){ uchar i;if(*s==0) //遇到字符串结束return;for(i=0;;i++){if(*(s+i)==0)break;WriteChar(*(s+i),xPos,yPos);xPos++;if(xPos>=15) //如果XPOS中的值未到15(可显示的最多位)break;}}void SetCur(uchar Para) //设置光标{ mDelay(2);switch(Para){ case 0:{ LcdWc(0x08); //关显示break;}{ LcdWc(0x0c); //开显示但无光标break;}case 2:{ LcdWc(0x0e); //开显示有光标但不闪烁break;}case 3:{ LcdWc(0x0f); //开显示有光标且闪烁break;}default:break;}}void ClrLcd() //清屏命令{ LcdWc(0x01);}// 正常读写操作之前检测LCD控制器状态void WaitIdle(){ uchar tmp;RS=0;RW=1;EN=1;_nop_();for(;;){ tmp=DPORT;tmp&=0x80;if( tmp==0)}EN=0;}void LcdWd(uchar c) //写字符子程序{ WaitIdle();RS=1;RW=0;DPORT=c; //将待写数据送到数据端口EN=1;_nop_();_nop_();EN=0;}void LcdWc(uchar c) //送控制字子程序(检测忙信号){ WaitIdle();LcdWcn(c);}void LcdWcn(uchar c) //送控制字子程序(不检测忙信号){ RS=0;RW=0;DPORT=c;EN=1;_nop_();EN=0;}void LcdPos(uchar xPos,uchar yPos) //设置第(xPos,yPos)个字符的DDRAM地址{ unsigned char tmp;xPos&=0x0f; //x位置范围是0~15yPos&=0x01; //y位置范围是0~1if(yPos==0) //显示第一行tmp=xPos;elsetmp=xPos+0x40;tmp|=0x80;LcdWc(tmp);}void RstLcd() //复位LCD控制器{ mDelay(15); //如果使用12M或以下晶振,此数值不必改,如用24M晶振,须用30LcdWc(0x38); //显示模式设置LcdWc(0x08); //显示关闭LcdWc(0x01); //显示清屏LcdWc(0x06); //显示光标移动位置LcdWc(0x0c); //显示开及光标设置}void mDelay(uchar j) //延时,毫秒数由j决定{ uint i=0;for(;j>0;j--){ for(i=0;i<124;i++){;}}}//主函数:/*===================================== ========================================= ====公司名称:河海大学电气工程学院 *模块名:AT89C52单片机系统,全国电子设计大赛 *创建人:南东亮日期:2007。

基于C51单片机数字频率计课程设计资料

基于C51单片机数字频率计课程设计资料

(华)课程设计(论文)目录摘要................................................. .....错误!未定义书签。

1 引言 (2)1.1数字频率计概述 (2)1.2频率测量仪的设计思路与频率的计算 (2)1.3 基本设计原理 (3)2 数字频率计(低频)的硬件结构设计 (4)2.1 系统硬件的构成 (4)2.2 系统工作原理图 (4)2.3 AT89C51单片机及其引脚说明 (5)2.4 信号调理及放大整形模块 (7)2.5 时基信号产生电路 (7)2.6显示模块 (9)3软件设计 (13)3.1量程转换 (13)3.2 BCD转换 (13)3.3 LCD显示的功能 (13)4模块电路仿真 (14)5 结束语 (16)参考文献 (17)附录汇编源程序代码 (18)1 引言本应用系统设计的目的是通过在“单片机原理及应用”课堂上学习的知识,以及查阅资料,培养一种自学的能力。

并且引导一种创新的思维,把学到的知识应用到日常生活当中。

在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。

全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。

1.1数字频率计概述数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。

它是一种用十进制数字显示被测信号频率的数字测量仪器。

它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。

在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。

本数字频率计将采用定时、计数的方法测量频率,采用一个1602A LCD 显示器动态显示6位数。

测量范围从1Hz —10kHz 的正弦波、方波、三角波,时基宽度为1us ,10us ,100us ,1ms 。

第4讲 C51基本结构程序设计(6)

第4讲   C51基本结构程序设计(6)

(a)
例4.1: 输入两个整数,输出其中的大数。 void main( ) { int a,b,max; // 定义数据类型 printf(“\n input two numbers: ”);
//在屏幕上打印(显示)“input two numbers ”,提示用户输入两个数 字
scanf(“%d%d”,&a,&b); // 输入两个数字(如a=3,b=7) max=a; // 赋值(max=3) if (max<b) max=b; //判别大小,满足条件则,赋值(max=7) printf(“max=%d”,max); //打印输出: max=7 }
3.第三种形式为if-else-if形式


前二种形式的if语句一般都用于两个分支的情况。 当有多个分支选择时, 可采用if-else-if语句,其一般形式为: if(表达式1) 语句1; K=? else if(表达式2) K=0 K=1 …… K=n … 语句2; else if(表达式3) 语句3; A0 A1 An … else if(表达式m) 语句m; else ( c) 语句n; 其语义是:依次判断表达式的值,当出现某个值为真时, 则执行其对应 的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均 为假,则执行语句n 。然后继续执行后续程序。
1.
2.
另一种是循环次数未知,这时可根据给定 的问题条件来判断是否继续。
4.3.1 while语句
while语句的一般形式为: while(表达式) 语句; 其中表达式是循环条件,
语句为循环体。
while语句的语义是:计
算表达式的值,当值为真(非
0)时, 执行循环体语句。其 执行过程可用图 (a)表示。

单片机C51语言及程序设计

单片机C51语言及程序设计
1)将SFR的绝对位地址定义为位变量名



C51编译器在头文件“REG51.H”中定义了全部sfr/sfr16和sbit变量。 用一条预处理命令#include <REG51.H>把这个头文件包含到C51程序中,无需重新定义即可直接使用它们的名称。
应用举例:
片内数据存储器,片外数据存储器和程序存储器。
通常下划线开头的标识符是编译系统专用的,因此在编写C语言源程序时一般不使用以下划线开头的标识符,而将下划线用作分段符。C51编译器规定标识符最长可达255个字符,但只有前32个字符在编译时有效,因此标识符的长度一般不要超过32个字符。
关键字是一种已被系统使用过的具有特定含义的标识符。用户不得再用关键字给变量等命名。C语言关键字较少,ANSI C标准一共规定了32个关键字,见表
变量名具有字母大小写的敏感性,如SUM和sum代表不同的变量。
【存储类别】 数据类型 【存储器类型】 变量名
变量名不得使用标准C语言和C51语言的关键字。
unsigned char data system_status = 0;
//定义system_status为无符号字符型自动变量,该变量位于data区中且初值为0。
sfr或sfr16型 51MCU中有21个SFR,如何定义与这些单元相关的变量?
例如,sfr P0 = 0x80; //定义P0口地址80H sfr PCON = 0x87; //定义PCON地址87H sfr16 DPTR=0x82; //定义DPTR的低端地址82H
单精度浮点数
for
程序语句
构成for循环结构
goto
程序语句
构成goto转移结构
if
程序语句

C51单片机原理图

C51单片机原理图

GND SW1/51 3 SW2/AVR
HEADER 5X2
四位共阴数码管
R1 1K GND
P2.7 P2.6 P2.5 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 P2.4 P2.3 P2.2
P2.7 12 12 9 8 6 9 8 6
D
GND VCC KT1/10K
IC8 位控制 A B C D E F G H P2.6 1 2 3 4 5 6 7 15
VCC
PR2 470-5.1K都可以
GND 1 2 3 4 1 3 5 7
8位LED发光管
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 NTC1 温度电阻 22P C8 X1 20 19 18 17 16 15 14 13 IO 11 10 9 8 7 6 5 4 3 2 1 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 LED1 红色 P2.7 P3.7 1 P3.6 2 P3.5 3 P3.4 4 P3.3 5 P3.2 6 TXD P3.1 7 RXD P3.0 8 STR P1.7 1 P1.6 2 P1.5 3 P1.4 4 P1.3 5 P1.2 6 P1.1 7 P1.0 8 VCC LED2 红色 LED3 黄色 P2.5 LED4 黄色 LED5 红色 P2.3 LED6 红色 LED7 绿色 P2.1 LED8 绿 1 2 3 R4 1K STR
A P5 2 1 SPEK RL1
标准AT ISP下载接口
P1.5 RESET P1.7 P1.6 VCC 1 2 1 3 5 7 9 2 4 6 8 10 VCC R5 10K

基于C51单片机的000-999计数器

基于C51单片机的000-999计数器
[1]李任青.单片机原理与应用.江西:南昌大学共青学院工程技术系,2011(1):86-88。
[2]迟忠君.单片机应用技术.北京:北京邮电大学出版社,2016(6):3-5。
三、设计执行过程(请根据以下内容填写对该设计项目用到的理论知识)
1、总体设计框图(画出总体设计框图,并结合设计框图简述工作原理,写不下可另附页)
五、项目结题评审(请根据以下内容做好记录,并提交完整的项目设计报告给老师打分)
1、项目答辩记录(请将老师提的问题和答案记录下来)
问题一:
问题二:
记录人:年月日
2、结题答辩组评审意见(以下由老师填写)
成绩专家组:、年月日
3、项目成绩评定(请将老师提的问题和答案记录下来)
项目教学活页成绩:。
答辩成绩:。
若干
12MHz晶振
1个
0.8mm焊锡
若干
30pF瓷片电容
2个
10uF电解电容
1个
10k电阻
1个
5、焊接图纸和说明(用铅笔或专业软件画出详细的焊接布局设计图,元件引脚标注详细清晰。)
说明:使用ProtellDXP画出pcb布线图,布线图采用双层布线模式,蓝色导线位于底层,红色导线位于顶层。
6、实物效果照片和功能说明(用高清相机拍出实物的效果照片,此页彩色打印,要体现出任务书中的功能效果,图片高清,并附有功能效果的文字说明,可另附页。)
说明:考虑到数码管位置的摆放问题,故将程序的P1和P0对调,P0控制十位数显示,P1口控制百位数显示,其余不变。
四、项目总结(请根据以下内容做工作总结,并提交完整的项目设计报告)
1、学习小结(对学习到的知识点进行总结、归纳)
通过这次000-999计数器的设计,总体来说,我的收获很大。无论是在培养自己的实验动手能力还是在自己独立思考能力方面。在此次点阵设计的过程中,更进一步的熟悉了proteus软件和DXP软件的使用以及加深了对芯片结构的了解和掌握,加强了对c语言的认识,学会了如何拆分数字的百位,十位以及个位,并将其传送到单片机的各个端口,了解了数码管的内部结构,在以后的学习中会有很大的帮助。

基于51单片机数字频率计的设计

基于51单片机数字频率计的设计

基于51单片机数字频率计的设计在电子技术领域中,频率计是一种常见的测试仪器,它可以用来测量信号的频率。

在本文中,我们将通过介绍基于51单片机数字频率计的设计实现来了解它的工作原理和设计流程。

1. 确定设计需求在进行任何项目之前,我们需要明确自己的设计需求。

对于频率计而言,它的主要需求就是准确地测量信号的频率。

因此,我们需要确定我们需要测量的频率范围和精确度。

2. 确定硬件设计在确定了设计需求之后,我们需要确定硬件设计。

对于数字频率计而言,它需要一个计数器来计算信号的脉冲数量。

在本设计中,我们采用74LS90计数器芯片来实现计数功能。

我们还需要一个51单片机来读取计数器的计数值,并将其转换为对应的频率值。

另外,我们还需要硬件板、LCD显示屏、按键等元件来搭建数字频率计的电路结构。

3. 确定软件设计硬件设计完成后,我们需要开发相应的软件来实现我们的需求。

在本设计中,我们使用KEIL C51软件来编写51单片机的程序。

编写软件的主要步骤是读取计数器计数值、计算出对应的频率值、将频率值显示在LCD屏幕上,并实现按键控制。

我们需要将这些步骤按照程序流程依次实现。

4. 进行测试在软件编写完成后,我们需要对数字频率计进行测试,以确保其满足我们的需求。

我们可以使用信号发生器给数字频率计输入不同频率的信号,然后观察LCD屏幕上显示出来的相应频率值是否准确。

如果测试结果不满足我们的需求,则需要对硬件或软件进行优化或调试,直到数字频率计能够正常工作为止。

总之,基于51单片机的数字频率计设计是一个较为简单的电子设计项目。

通过上述步骤的详细介绍,我们了解了数字频率计的设计流程和工作原理,并明确了设计中需要注意的细节和注意事项。

希望能够对大家理解数字频率计的设计过程有所帮助。

基于AT89C51单片机的频率计设计

基于AT89C51单片机的频率计设计

基于AT89C51单片机的频率计设计频率计是一种测量信号频率的仪器。

在工业自动化、仪器仪表和电子实验等领域广泛应用。

本文将基于AT89C51单片机设计一个简单的频率计。

一、设计原理频率计的工作原理是通过计数单位时间内输入信号的脉冲数量,并将其转化为频率进行显示。

本设计使用AT89C51单片机作为控制核心,采用外部中断引脚INT0作为计数脉冲输入口,通过对计数器的计数值进行处理,最终转化为频率并在LCD1602液晶屏上进行显示。

二、硬件设计硬件电路主要包括AT89C51单片机、LC1602液晶显示屏、脉冲输入引脚INT0,以及供电电路等。

其中,AT89C51单片机的P0口用于与LC1602液晶屏的数据口连接,P2口用于与液晶屏的控制口连接。

脉冲输入引脚INT0连接到外部信号源,通过中断请求实现计数器的计数功能。

液晶显示屏的VDD和VDDA引脚接5V电源,VSS和VSSA引脚接地,RW引脚接地,RS引脚接P2.0,E引脚接P2.1,D0-D7引脚接P0口。

三、软件设计软件设计主要包括初始化设置、中断服务程序、计数器计数和频率转换、液晶屏显示等模块。

1.初始化设置:首先设置P0和P2为输出端口,中断引脚INT0为外部触发下降沿触发中断,计数器为初始值0。

2.中断服务程序:中断服务程序负责处理外部脉冲输入引脚INT0的中断请求。

每当INT0引脚检测到下降沿时,计数器加13.计数和频率转换:在主函数中,通过读取计数器的值并根据单位时间计算频率。

通过AT89C51单片机的定时器模块,我们可以设置一个单位时间进行计数。

在单位时间结束后,将计数器的值除以单位时间得到频率。

4.液晶屏显示:通过P0口向液晶屏的数据口发送频率值,并通过P2口向液晶屏的控制口发送控制信号,完成频率的显示。

四、测试结果将生成的二进制固件烧录到AT89C51单片机中,将脉冲信号输入到INT0引脚,即可在LCD1602液晶显示屏上看到实时的频率值。

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

实验报告
课程名称C51单片机实习
专业班级电子1142
姓名赵宜琳
学号1104451209
电气与信息学院
和谐勤奋求是创新
实验教学考核和成绩评定办法
1.课内实验考核成绩,严格按照该课程教学大纲中明确规定的比重执行。

实验成绩不合格者,不能参加课程考试,待补做合格后方能参加考试。

2.单独设立的实验课考核按百分制评分,考核内容应包括基本理论、实验原理和实验。

3.实验考核内容包括:1)实验预习;2)实验过程(包括实验操作、实验记录和实验态度、表现);3)实验报告;权重分别为0.2 、0.4 、0.4;原则上根据上述三个方面进行综合评定。

学生未取得1)和2)项成绩时,第3)项成绩无效。

4.实验指导教师应严格按照考核内容分项给出评定成绩,并及时批改实验报告,给出综合成绩,反馈实验中出现的问题。

实验成绩在教师手册中有记载。

实验报告主要内容
一.实验目的
二.实验仪器及设备
三.实验原理
四.实验步骤
五.实验记录及原始记录
六.数据处理及结论
七.实验体会(可选项)
注:1. 为了节省纸张,保护环境,便于保管实验报告,统一采用A4纸,实验报告建议双面打印(正文采用宋体五号字)或手写,右侧装订。

2. 实验类别指验证、演示、综合、设计、创新(研究)、操作六种类型实验。

3. 验证性实验:是指为了使学生巩固课程基本理论知识而开设的强调演示和证明,注重实验结果(事
实、概念或理论)的实验。

4. 综合性实验:是指实验内容涉及本课程的综合知识或本课程相关的课程知识的实验。

5. 设计性实验:是指给定实验目的、要求和实验条件,由学生自行设计实验方案并加以实现的实验。

实验题目单片机控制的花样流水灯设计
实验室电子实验室实验时间年月日实验类别同组人数
成绩指导教师签字:姜航
一、实验目的
1)掌握51系列单片机的基本硬件结构及工作原理
2)掌握51系列单片机的C语言及基本程序设计方法
3)学习并掌握使用51系列单片机开发控制系统的基本步骤
二、实验装置
Proteus软件,keil软件
三、实验内容
1.proteus图
2.根据实验目的,画出程序流程图。

子程序如图:
外部中断0服务如图:
定时中断服务程序外部中断1服务程序
3.根据程序流程图,编写程序。

#include<stdio.h>
sbit P10=P1^0;//定义位变量
sbit P11=P1^1;
unsigned char a;//定义a位流水灯变化状态
int flag=0; //记录流水灯变化标志位
int timecout=0; //定时次数
int cout=1; //定时次数判断
unsigned char m=5;//
unsigned char funcl(unsigned char a, int n) //左移n位{unsigned char y,z;
y=a>>(8-n);
z=a<<n;
a=y|z;
return a;
}
unsigned char flashhalf(unsigned char a) //半闪{ a=~a;
return a;
}
unsigned char funcr(unsigned char a,n) //右移n位{ unsigned char y,z;
y=a<<(8-n);
z=a>>n;
a=y|z;
return a;
}
unsigned char flashall(unsigned char a) //全闪
{ a=~a;
return a;
}
void main()
{ TCON=TCON|0x15; //中断初始化
TMOD=0x01; //设置定时器T0模式1
IE=0x87; //开中断
a=0x01;
while(1)
{cout=m*100+1 ;
if(timecout==cout)
{P0=~a;
timecout=0;
switch(flag)
{case 0:a=funcl(a,1); break; //调用1个LED闪动右移方式子程序
case 1:a=funcl(a,2); break; //调用2个LED闪动右移方式子程序
case 2:a=funcl(a,3); break; //调用3个LED闪动右移方式子程序
case 3:a=flashall(a); break;//调用半闪子程序
case 4:a=funcr(a,1); break; //调用1个LED闪动右移方式子程序
case 5:a=funcr(a,2); break; //调用2个LED闪动右移方式子程序
case 6:a=funcl(a,3); break; //调用3个LED闪动右移方式子程序
case 7:a=flashall(a); break;//调用全闪子程序
default:{flag=0;a=0x01;}break;}
}
}
}
//外部中断0服务程序
void interrupt0() interrupt 0 using 0
{
{flag=flag+1; //下一个状态变化
switch(flag)
{ case 0:a=0x01;break; //流水灯变化初值
case 1:a=0x03;break;
case 2:a=0x07;break;
case 3:a=0x0f;break;
case 4:a=0x80;break;
case 5:a=0xc0;break;
case 6:a=0x70;break;
case 7:a=0xff;break;
default:{flag=0;a=0x01;}break;
}
}
}
//外部中断1服务程序
void interrupt1() interrupt 2 using 2
{ P1=0xff;
if(P10==0) //减速
{m=m+1;}
if(P11==0) //加速
{m=m-1;}
}
//定时中断服务程序
void time0() interrupt 1 using 1
{ TH0=(65536-5000)/255;//定时TH0,TL0装值
TL0=(65536-5000)%255;
timecout=timecout+1 ;
}
4.把程序导入proteus,运行得到结果。

正序流水灯1个正序流水灯2个正序流水灯3个半闪
反序流水灯1个反序流水灯2个
反序流水灯3个全闪
四、实验总结
本次的单片机实习的课题是花样流水灯设计,通过查找相关资料,然后对老师所给的程序不断的修改,最终做出了符合要求的电路原理图及有条理的程序。

在这个过程中,不但可以使自己的动手能力和分析能力得到了增强;而且还使自己的专业知识得到了丰富;并且还让自己学习单片机必须加强动手,要理论与实践相结合。

在做事上也要认真细心不可马马虎虎,一小小的失误都会影响整个实验结果。

相关文档
最新文档