第一篇:单片机课程设计报告——智能数字频率计
单片机原理课程设计报告
题目:智能数字频率计设计
专业: 信息工程 班级:信息111 学号:*** 姓名:*** 指导教师:***
北京工商大学计算机与信息工程学院
1、设计目的
(1)了解和掌握一个完整的电子线路设计方法和概念;
(2)通过电子线路设计、仿真、安装和调试,了解和掌握电子系统研发产品的一个基本流程。
(3)了解和掌握一些常见的单元电路设计方法和在电子系统中的应用: 包括放大器、滤波器、比较器、计数和显示电路等。
(4)通过编写设计文档与报告,进一步提高学生撰写科技文档的能力。
2、设计要求
(1)基本要求
设计指标:
1.频率测量:0~250KHz; 2.周期测量:4mS~10S; 3.闸门时间:0.1S,1S;
4.测量分辨率:5位/0.1S,6位/1S; 5.用图形液晶显示状态、单位等。
充分利用单片机软、硬件资源,在其控制和管理下,完成数据的采集、处理和显示等工作,实现频率、周期的等精度测量方案。在方案设计中,要充分估计各种误差的影响,以获得较高的测量精度。
(2)扩展要求
用语音装置来实现频率、周期报数。
(3)误差测试
调试无误后,可用数字示波器与其进行比对,记录测量结果,进行误差分析。
(4)实际完成的要求及效果
1.测量范围:0.1Hz~4MHz,周期、频率测量可调; 2.闸门时间:0.05s~10s可调; 3.测量分辨率:5位/0.01S,6位/0.1S; 4.用图形液晶显示状态、单位(Hz/KHz/MHz)等。
3、硬件电路设计
(1)总体设计思路 本次设计的智能数字频率计可测量矩形波、锯齿波、三角波、方波等信号的频率。系统共设计包括五大模块: 主芯片控制模块、整形模块、分频模块、档位选择模块、和显示模块。设计的总的思想是以AT89S52单片机为核心,将被测信号送到以LM324N为核心的过零比较器,被测信号转化为方波信号,然后方波经过由74LS161构成的分频模块进行分频,再由74LS153构成的四选一选择电路控制档位,各部分的控制信号以及频率的测量主要由单片机计数及控制,最终将测得的信号频率经LCD1602显示。
各模块作用如下: 1.主芯片控制模块: 单片机AT89S52 内部具有2个16位定时/计数器T0、T1,定时/计数器的工作可以由编程来实现定时、计数和产生计数溢出时中断要求的功能。利用单片机的计数器和定时器的功能对被测信号进行计数。以AT89S52 单片机为控制核心,来完成对各种被测信号的精确计数、显示以及对分频比的控制。利用其内部的定时/计数器完成待测信号周期/频率的测量。
2.整形模块:整形电路是将一些不是方波的待测信号转化成方波信号,便于测量。本设计使用运放器LM324连接成过零比较器作为整形电路。
3.分频模块: 考虑单片机利用晶振计数,使用11.0592MHz 时钟时,最大计数速率将近500 kHz,因此需要外部分频。分频电路用于扩展单片机频率测量范围,并实现单片机频率测量使用统一信号,可使单片机测频更易于实现,而且也降低了系统的测频误差。本设计使用的分频芯片是74LS161实现4分频及16分频。
4.档位选择模块:控制74LS161不分频、4分频 或者 16分频,控制芯片是74LS153。5.显示模块:编写相应的程序可以使单片机自动调节测量的量程,并把测出的频率数据送到显示电路显示,本设计选用LCD1602。
(2)测频基本设计原理
所谓“频率”,就是周期性信号在单位时间(1s)内变化的次数。若在一定时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表示为f=N/T(右图3-1所示)。其中脉冲形成电路的作用是将被测信号变成脉冲信号,其重复频率等于被测频率fx。利用单片机的定时/计数T0、T1的定时、计数功能产生周期为1s的时间脉冲信号,则门控电路的输出信号持 图3-1 续时间亦准确地等于1s。闸门电路由标准的秒脉冲信号进行控制,当秒脉冲信号来到时,闸门开通,被测脉冲信号通过闸门送到计数译码显示电路。秒脉冲信号结束时闸门关闭,计数器停止计数。由于计数器计得的脉冲数N是在1秒时间内的累计数,所以被测频率fx=NHz。
(2)系统框图
本智能数字频率计系统框图如图3-2所示
图3-2智能数字频率计系统框图
(3)单片机部分
P0口经上拉后做LCD数据接口 P2.1~P2.3作为LCD控制端口 P2.4~P2.5作为分频选择端口 P3.5作为被测信号输入端口
P3.2~P3.4作为开关控制端口(对应电路图中K1,K2,SET)
图3-3 89D52单片机部分电路
(4)分频部分
74HC161与74ls161功能兼容,是常用的四位二进制可预置的同步加法计数器,他可以灵活的运用在各种数字电路,以及单片机系统中实现分频器等很多重要的功能。
其管脚图如图3-4所示:
图3-4 74HC161 图3-5 74HC153管脚图
74HC153是一个双4选1数据选择器,其管脚图如图3-5所示:
74LS161对整形后的防波信号进行分频,Q1为四分频输出,Q3为16分频输出。未经分频、经过四分频和经过16分频的三路信号作为74LS153的一个4选1数据选择器低三位输入,由单片机控制选择分频数,然后再送单片机内部计数器T1(如图3-6)。
图3-6 分频、选择分频档位电路图
(5)LCD显示部分
LCD显示,1602的八位数据I/O口与单片机的P0口相连,读写控制端接P2.0-P2.2口。三个按键中,设置键接P3.2单片机按外部中断0接口,当按键按下后,置P3.2口低电平,单片机中断。S1、S2为频率/周期、闸门时间加/减选择按键(如图3-7)。
图3-7 LCD显示部分电路图
4、软件设计
(1)主程序流程图设计
本次程序设计采用的是C语言程序设计,其设计流程图4-1所示:
图4-1主程序流程图
(2)子程序流程图设计
<1>显示程序:
LCD显示程序设计流程如图4-2所示:
图4-2显示程序流程图 <2>频率测量程序框图:
频率测量程序的整体架构如图4-3所示:
图4-3频率测量框架图
(3)中断服务流程图
INT0中断流程图如图4-4所示:
图4-4INT0中断流程图
(4)程序代码
#include
//频率 float p;
//周期 float sj;
//闸门时间 char idata buff[20];char flag=0;
//频率、周期选择标志位
char xs=0;//设置闸门时间结束后是否显示结果的标志位
unsigned char m=0,n=0,yichu=0,fenpin;
//m定时中断次数 n计数中断次数 yichu判断是定时
//器还是计数器溢出
#define Key_Set P3 #define K1 0xf7
//11110111
P33 #define K2 0xef
//11101111
P34 #define NO_Set 0xff #define Freq 0 #define Peri 1
sbit B153=P2^4;sbit A153=P2^3;sbit P17=P3^4;sbit P16=P3^3;sbit P35=P3^5;sbit Set=P3^2;unsigned char LCD_Wait(void);void LCD_Write(bit style, unsigned char input);void LCD_SetDisplay(unsigned char DisplayMode);void LCD_SetInput(unsigned char InputMode);void LCD_Initial();void GotoXY(unsigned char x, unsigned char y);void Print(unsigned char *str);void C52_Initial();void Delay(unsigned int t);void display(float f);void cepin();void panduan();void timedisplay(float sj);void Time_Set1();void Time_Set2();void t0();void t1();
/*****模块名称 LCD1602显示程序******/
/***********************端口定义 ***********************************/
sbit LcdRs= P2^0;sbit LcdRw= P2^1;sbit LcdEn= P2^2;sfr DBPort= 0x80;
//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口 /************************内部等待函数********************************/
unsigned char LCD_Wait(void){
LcdRs=0;
//寄存器选择输入端 1:数据 0:指令
LcdRw=1;
_nop_();//RW:为0:写状态;为1:读状态;
LcdEn=1;
_nop_();
//使能输入端,读状态,高电平有效;写状态,下降沿有效
LcdEn=0;
return DBPort;
} /**********************向LCD写入命令或数据***************************/
#define LCD_COMMAND 0
// Command #define LCD_DATA 1
// Data #define LCD_CLEAR_SCREEN
0x01
// 清屏 #define LCD_HOMING
0x02
// 光标返回原点 void LCD_Write(bit style, unsigned char input){
LcdEn=0;
LcdRs=style;
LcdRw=0;
_nop_();
DBPort=input;
_nop_();//注意顺序
LcdEn=1;
_nop_();//注意顺序
LcdEn=0;
_nop_();
LCD_Wait();} /********************设置显示模式*********************************/
#define LCD_SHOW
0x04
//显示开 #define LCD_HIDE
0x00
//显示关
#define LCD_CURSOR
0x02
//显示光标
#define LCD_NO_CURSOR
0x00
//无光标
#define LCD_FLASH
0x01
//光标闪动 #define LCD_NO_FLASH
0x00
//光标不闪动 void LCD_SetDisplay(unsigned char DisplayMode){
LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
} /*********************设置输入模式***********************************/ #define LCD_AC_UP 0x02 #define LCD_AC_DOWN 0x00
// default #define LCD_MOVE 0x01
// 画面可平移 #define LCD_NO_MOVE 0x00
//default void LCD_SetInput(unsigned char InputMode){
LCD_Write(LCD_COMMAND, 0x04|InputMode);} /******************初始化LCD**************************************/
void LCD_Initial(){
LcdEn=0;
LCD_Write(LCD_COMMAND,0x38);
//8位数据端口,2行显示,5*7点阵
LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);
//开启显示, 无光标
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);
//清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);
//AC递增, 画面不动 }
/************************************************************************/ void GotoXY(unsigned char x, unsigned char y){ if(y==0)
LCD_Write(LCD_COMMAND,0x80|x);if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40));} void Print(unsigned char *str){
while(*str!=' ')
{
LCD_Write(LCD_DATA,*str);
str++;
} }
/*************************************************************************** *
模块名称:
频率测量程序
* *
测量范围:0.1Hz~4MHz,闸门时间:0.05s~10s可调。
* ***************************************************************************/ /***************************89c52初始化************************************/ void C52_Initial(){ sj=1000000.00;Key_Set=0xff;TMOD=0x51;
// 01010001 T1为计数器,T0为定时器
EA=1;ET0=1;ET1=1;EX0=1;
PX0=1;
//外部中断0设置为高优先级
IT0=0;
//电平触发方式 } /**************************延时子程序**************************************/ void Delay(unsigned int t)
//t随着数值越大,误差趋于平衡.{
unsigned char i;
while(t--)
{
for(i=0;i<123;i++){;}
} } /*************************计数中*********************************/ void t1(void)interrupt 3
//计数器1溢出,yichu=1 { n++;yichu=1;TH1=0;TL1=0;} /***********************定时中断****************************/ void t0(void)interrupt 1
{ m++;yichu=2;
//定时器0溢出,yichu=2 TH0=0x3c;
//定时50ms TL0=0xb0;} /***********************频率显示*****************************/ void Fdisplay(float f){
if(f>999400.00)
{
if(f<4000400.00)
{sprintf(buff,“ F=%2.4fmHz ”,(f/1000000.00));}
}
else
{
if(f>1040.00)
{sprintf(buff,“ F=%4.2fkHz ”,(f/1000.00));}
else
{
if(f>0.06)
{sprintf(buff,“ F=%3.2fHz
”,f);}
}
}
GotoXY(0,1);
Print(buff);} /***********************周期显示**********************************/ void Pdisplay(float p){
if(p>999400.00)
{
if(p<10004000.00)
{sprintf(buff,“ Cycle:%2.4fs ”,(p/1000000.00));}
else
{sprintf(buff,“error(Time or F)”,p);}
}
else
{
if(p>9950.00)
{sprintf(buff,“ Cycle:%4.2fms ”,(p/1000.00));}
else
{
if(p>0.248)
{sprintf(buff,“ Cycle:%3.3fus ”,p);}
else
{sprintf(buff,“error(Time or F)”,p);}
}
}
GotoXY(0,1);
Print(buff);}
/*********************测试频率**************************/ void cepin(){ unsigned char a;unsigned long js;m=0;n=0;TMOD=0x51;TH0=0x3c;
//定时50ms TL0=0xb0;TH1=0;TL1=0;a=sj/50000.00;TCON=0x50;
//启动定时器和计数器 while(m!=a);TCON=0;js=TH1*256+n*65536+TL1;f=(js/(sj/1000000.00))*fenpin;p=sj/(js*fenpin);if(xs==0)
//设置结束后第一次不显示结果 { if(flag==Freq)Fdisplay(f);else Pdisplay(p);} }
/*********************判断频率******************************/ void panduan(){ xs=0;
//设置结束后第二次循环显示结果 B153=1;
//选择16分频 A153=0;yichu=0;TMOD=0x51;
TH0=0xff;
TL0=0x38;TH1=0xff;
TL1=0x9c;TR0=1;
TR1=1;while(yichu==0);
TR0=0;
TR1=0;
if(yichu==1)
(f>500khz)
{fenpin=16;
cepin();} else
频数
{
yichu=0;
B153=0;
A153=1;
TH0=0xfc;
TL0=0x18;
TH1=0xff;
TL1=0x9c;
TR0=1;
TR1=1;
while(yichu==0);
TR0=0;
TR1=0;
if(yichu==1)
(1khz {fenpin=4; //定时器0 200us //计数器1 100脉冲 //启动定时器0和计数器1 //如果没有溢出一直循环 //已经溢出关闭定时器0和计数器1 //计数器先溢出:在200ms内测得的脉冲过多,说明频率较高 //转为测16分频后的频率 //定时器先溢出:100个脉冲的时间比较短,即频率较低,可以减少分 //定时器0 1ms //计数器1 100个脉冲 //启动定时器0和计数器1 //如果没溢出一直循环 //已经溢出关闭定时器0和计数器1 //计数器先溢出:在1ms内测得的脉冲过多,说明频率较高 //转为测4分频后测频率 cepin();} else //定时器先溢出:100个脉冲的时间比较短,即频率较低 { fenpin=1; B153=0; A153=0; cepin();} } } /*************************显示闸门时间***********************************/ void timedisplay(float GTime){ sprintf(buff,“GTime=%7.0fus ”,GTime);GotoXY(0,1);Print(buff);Delay(50);} /***************************减按键*******************************/ void Time_Set2(){ Delay(1000);if(P17==1) { sj=sj-50000.00; if(sj>50000.00)timedisplay(sj); else {sj=50000.00; timedisplay(sj);} } else {while(P17==0) { Delay(500); sj=sj-500000.00; if(sj>50000.00)timedisplay(sj); else {sj=50000.00; timedisplay(sj);} } } } /***************************加按键**********************************/ void Time_Set1(){ Delay(1000)if(P16==1) { sj=sj+50000.00; if(sj<10000000.00)timedisplay(sj); else {sj=10000000.00; timedisplay(sj);} } else {while(P16==0) { Delay(500); sj=sj+500000.00; if(sj<10000000.00)timedisplay(sj); else {sj=10000000.00; timedisplay(sj);} //按住1s快加0.5s } } } /************************闸门时间设置***********************************/ void Time_Set()interrupt 0 { EA=0; //防止无限中断 Delay(100);if(Set==0) { Delay(1000); //判断处于哪种设置状态 if(Set==1) { GotoXY(0,1); Print(“ Press Button ”); GotoXY(0,0); Print(“ T Settings ”); while(Set==1) { switch(Key_Set) { case K1: Time_Set1();break; case K2: Time_Set2();break; default: break; } } } else //选择测试频率或周期 { GotoXY(0,1); Print(“ 1.Freq 2.Cycle”); GotoXY(0,0); Print(“ Select ”); while(Set==0); //等待设置按键松开 while(Set==1) { switch(Key_Set) { case K1: flag=Freq;GotoXY(0,1);Print(“ ---Freq--- case K2: flag=Peri;GotoXY(0,1);Print(” ---Cycle--- default: break; } } } } GotoXY(0,0);Print(“---Cymometer---”); GotoXY(0,1);Print(“ Waiting...”);while(Set==0); //防止再次进入中断 EA=1;xs=1; //不显示此次结果.} /**************************主程序****************************/ void main(){ LCD_Initial(); //LCD初始化 GotoXY(0,0);Print(“---Cymometer---”);GotoXY(0,1);Print(“ Huixi && Xia”);Delay(1000);GotoXY(0,1);Print(“ Waiting...”); “);break;”);break; C52_Initial(); //89c52初始化 while(1) { panduan(); } } 5、调试过程 程序的设计及调试过程中离不开89C52的开发系统板电路图,起初忽视了开发板上的K3键用到的P35引脚也是定时器T1的信号输入引脚。后来在其他管脚的分配也曾出现错误,不过通过调试、修改都一一改正。仿真的时候默认晶振是12MHz,故程序编写的时候按12MHz设计的定时,以至于在实体时候测量不是很准确,后通过重新计算、修改程序达到了较高的准确率。但最终在实体系统演示中犯了一个极其幼稚的错误,未拿掉短接帽,以至于起初LCD未任何显示,浪费了不少时间去找程序的问题,还是自己不够认真细心。 6、实验结果 (1)最终实物图 最终实体电路系统如图6-1。 图6-1最终实物图 该课程设计验收时结果符合设计要求,可测量矩形波,方波,三角波,锯齿波等信号的频率;测量范围为0.1Hz~4MHz;闸门时间为0.05s~10s可调。 (2)电路仿真分析 由于实物演示不方便,这里用仿真图进行说明: 如下图,开关K1、K2、SET分别代表实物单片机最小系统上的开关K5、K4、K6。SET为确认键,K1可以选择频率输出,K2可以选择周期输出。K1、K2配合还可以调节阀门时间。 下图为开关仿真图和结果显示图: 开关K1,K2选择测周、测频及闸门时间的增减,SET键用于功能切换及确认 初始显示 选择测频率或测周期 频率显示 周期显示 改变阀门时间 7、总结与感悟 本设计通过运用单片机AT89S52,Proteus 仿真软件以及Kell 仿真软件的相关知识,成功地实现了数字频率计的设计。综合调试结果表明,本文提出的设计与传统测频系统相比,具有体积小、成本低、低功耗、精度高等优点,适用于各种测量电路。 本次设计的低频测量部分及高频测量部分分别采用测频、测周的测量方法,并通过计算精确计数,故测量误差很小,再加上智能分频使单片机的测量带宽提高了一千倍以上,仅用几个芯片搭成的低成本简单电路,使该频率计拥有了不错的性价比,且完全可以满足一般的测量需求。本次课程设计由前期自己查资料、想设计思路、写代码及画电路图,然后在实验室多半天基本完成。总体来说还算顺利,所以前期做足准备工作很重要。通过本次课设,我们复习了老师所讲的C51知识,通过将所学的课本知识用于实践,即体会到了知识运用所得成果的快乐,又加深了我对知识的理解,印象更加深刻。通过参加竞赛及此次课设,我深刻体会到无论设计什么,首先要分析需求,根据所学设计构思,只要思路出来了编程的大致方向确定,问题就解决一半。另外,很多东西都是有前人经验的,并不是要我们只会盲目埋头自己苦干,要学会搜集资料,总结前人经验教训用于自己的设计,达到事半功倍的效果。在电路设计及编程、仿真以及最后的搭建实体电路系统中,任何一个环节中细节都不容忽视,比如焊接前外围电路板的排版布局,拿到新的洞洞板要先看构造,综合考虑电路需要,想好布局再焊,尽量避免错误焊接,吸掉重焊。这样既影响美观,又可能损坏电路板。另外,仿真只是初步的检验设计构思是否满足设计需要,仿真效果完美在实体系统调试运行中还是会遇到各种各样的问题亟待解决。总的来说,做任何设计要有清楚的头脑,做好准备工作,还要有耐心、细心,以及团队合作意识。每次的动手设计都能让我学到很多,有知识有心态,实践中的学习总会印象深刻! 单片机课程设计 题 目: 专 业: 班 级: 组长 成员 成员 成员 成员 智能小车设计 计算机科学与技术 14级2班 姓名 学号 年 12 月 23 日 2016 打开命令行终端的快捷方式: ctr+al+t:默认的路径在家目录 ctr+shift+n:默认的路径为上一次终端所处在的路径.linux@ubuntu:~$ linux:当前登录用户名.ubuntu:主机名 :和$之间:当前用户所处在的工作路径.windows下的工作路径如C:IntelLogs linux下的工作路径是:/.../..../ ~:代表的是/home/linux这个路径.(家目录).ls(list):列出当前路径下的文件名和目录名.ls-a(all):列出当前路径下的所有文件和目录名,包括了隐藏文件..:当前路径..:上一级路径 ls-l:以横排的方式列出文件的详细信息 total 269464(当前这个路径总计所占空间的大小,单位是K)drwxr-xr-x 3 linux linux 4096 Dec 4 19:16 Desktop chmod u-或者+r/w/x 文件名 chmod g-或者+r/w/x 文件名 chmod o-或者+r/w/x 文件名(3).cd /home/linux 进入到1目录里并创建一个2普通文件,再退回上一级,并且删除1目录 6.拷贝文件.cp(copy)路径1/源文件 路径2:把路径1下的文件拷贝到路径2下 cp 路径1/源文件 路径2/目标文件:把路径1下的文件拷贝到路径2下并且重命名位目标文件.cp(copy)-r 路径1/目录名 路径2:把路径1下的目录拷贝到路径2下 7.剪切文件 mv(move)路径1/源文件 路径2:把路径1下的文件剪切到路径2下 mv 路径1/源文件 路径2/目标文件:把路径1下的文件剪切到路径2下并且重命名位目标文件 mv 源文件 目标文件:重命名文件 mv 路径1/目录名 路径2:把路径1下的目录剪切到路径2下 8.clear:清屏 9.exit 退出终端 vi编辑器.vi 文件名:如果文件不存在则创建并打开 如果文件已存在,则直接打开 VI编辑器的三种模式 1.命令行模式:刚进入编辑器的时候,默认处在这种模式下 2.编辑模式(插入模式):输入a/i/o即可进入,按下esc键退回命令行模式,再输入冒号 ,即可进入底行模式.3.底行模式下:w(保存),q(退出),wq(保存并退出),q!(强制退出不保存)按下退格键,删除冒号,即可进入命令行模式.终极保存法;w!sudo tee %d回车再回车即可 命令行模式下的快捷操作: 1.整行复制:光标移动想要复制的那一行,输入yy即可,再把光标移动到你想要粘贴位置的上一行,输入p即可 2.多行复制:光标移动想要复制的那几行的 6.多行剪切:光标移动想要剪切的那几行的 再编译一个c应用程序,在程序中来调用库里实现的函数 gcc 应用程序名-l库名(注意是去掉lib和.so的库名) 文件IO linux系统下一切设备皆文件 操作文件: open():打开一个文件 read()://从文件里边读出数据 write()//向文件里写入数据 close()//关闭文件 man手册: man 2 函数名 open: 头文件 #include 1.int open(const char *pathname, int flags);//仅限于打开一个已存在文件 参数1:文件的路径 参数2:打开方式的标志 O_RDONLY,//只读方式打开 O_WRONLY,//只写方式打开 O_RDWR.//可读可写方式打开 返回值: 打开成功:返回一个正数(文件描述符)打开失败:-1 2.int open(const char *pathname, int flags, mode_t mode);//可以打开一个不存在的文件 参数1:文件的路径 参数2:打开方式的标志 O_RDONLY,//只读方式打开 O_WRONLY,//只写方式打开 O_RDWR.//可读可写方式打开 如果文件不存在必须|O_CRAET,创建该文件 参数3:权限 数 比如:0666 返回值: 打开成功:返回一个正数(文件描述符)打开失败:-1 write: 头文件: #include typedef int ssize_t ssize_t write(int fd, const void *buf, size_t count);参数1:就是open函数的返回值,文件描述符 参数2:你想要写入的数据 参数3:你想要写入的数据的字节大小 返回值: 写入成功:返回的是写入的字节大小 写入失败:-1 strlen:实际长度 sizeof:数组的大小 arduino viod setup(){ 端口的配置;} void loop(){ 任务的执行; } arduino之呼吸灯实验: int led=13;void setup(){ pinMode(led,OUTPUT);} void loop(){ digitalWrite(led,HIGH);delay(1000);digitalWrite(led,LOW);delay(1000);} 渐变灯: 暗->亮->暗 PWM波:可调脉冲宽度波.3,5,6,9,10,11这几个端口可以输出pwm波 analogWrite(pin, value)//输出pwm波 pin:管脚号:3,5,6,9,10,11中的任意一个 value:0~255中的任何一个数: 0:占空比为0% 255:占空比位100% 远程视频监控步骤: 1.将jpegsrc.v8b.tar.gz(图片库)和mjpg-streamer-code-182.tar.gz(视频查看软件)拷贝到ubuntu的家目录 2.解压缩 tar xvf jpegsrc.v8b.tar.gz 3.cd jpeg-8b 4../configure //创建Makefile文件 5.make 6.sudo make install //安装 程序运行时,默认寻找的头文件的路径在/usr/include,库文件的路径/lib cd /usr/local/include sudo cp * /usr/include cd /usr/local/lib sudo cp libjpeg* /lib 7.切换到家目录:cd 移植查看视频的软件: tar xvf mjpg-streamer-code-182.tar.gz cd mjpg-streamer-code-182 cd mjpg-streamer make clean //清除已经编译过的程序 make 运行查看视频的软件:sudo./start.sh 打开火狐浏览器 在地址栏输入127.0.0.1:8080 若发现视频绿屏 先强制结束程序运行:ctl+c.解决方法: 修改start.sh 将 要对uboot环境信息进行设置 首先把拨码开关拨到0000位置.选择uboot的启动方式.uboot从外存启动.1.找到自己的COM端口号;打开putty 2.选中Serial,把波特率改为115200,端口号改为自己的端口号,Flow contrlo选择none 3.开启电源,会出现一个倒计时,在倒计时完成之前,随便敲一个键盘.4.输入命令print可以显示uboot的打印信息 确保: ipaddr=192.168.1.100//代表开发板的ip地址 serverip=192.168.1.200//代表ubuntu的IP地址 bootargs=root=nfs nfsroot=192.168.1.200:/source/rootfs ip=192.168.1.100 init=/linuxrc console=ttySAC0,115200// 打开虚拟机: 1.进入到/tftpboot目录下.把zImage拖到虚拟机,前加cp ,后加./ 使用ls查看一下是否出现zImage 2.cd /source 把rootfs这个压缩包拖到虚拟机,前加cp ,后加./ 使用ls查看一下是否出现rootfs.tgz 3.解压命令: sudo tar-xvf rootfs.tgz 要让你输入密码;输入1回车即可,密码是不可见的.再用ls查看是否多了一个蓝色的文件rootfs.4.修改ubuntu的ip地址.找到wiffi图标,点击选中edit connection->IPV4 seting->manual->add ip netmask gateway 192.168.1.200 255.255.255.0 192.168.1.1 点击保存.关闭窗口.再打开图标选中wired connection1 再看ip是否改回来了.5.网线连接开发板和电脑 在putty界面输入:ping 192.168.1.200 如果host 192.168.1.200 is alive,这是挂载系统很好的征兆.not alive的话需要关闭电脑的无线网 输入boot或者重启开发板不要再按下任何键了,如果出现 ####很快就要挂载成功了 如果出现TTTTTTTTTTTTTT 在ubuntu输入命令:sudo service tftpd-hpa restart 其中sudo的作用是暂时将用户的权限提升到超级用户(root)的权限.如果出现Please press Enter to activate this console.代表系统挂载成功.通过gcc编译生成的程序不能在开发板上运行.通过命令file a.out看到文件的格式为intel 30386,说明这是X86格式的程序,只能PC上运行 而不能在arm板上运行,解决措施,使用交叉编译器来编译.交叉编译器的配置: 将arm-cortex_a8-linux-gnueabi.tar.bz2拖到ubuntu的家目录 解压命令tar-xvf arm-cor+tab键自动补齐,用ls查看是否生成arm-cortex_a8个目录.配置交叉编译器: sudo vi /etc/bash.bashrc文件 在最后一行添加export PATH=$PATH:/home/linux/arm-cortex_a8/bin 保存并退出文件 保存完成后重启文件:source /etc/bash.bashrc 重启成功后输入arm-cor+tab键会自动补齐成arm-cortex_a8-linux-gnueabi-代表交叉编译器配置成功.利用交叉编译器编译程序: arm-cortex_a8-linux-gnueabi-gcc 文件名,并将生成的可执行程序拷贝到/source/rootfs下 然后再到putty上执行./a.out就可以在开发板上运行程序了. 相关代码 Che.c #include “cgic.h” #include void zigbee_serial_init(int fd){ struct termios options; tcgetattr(fd, &options);options.c_cflag |=(CLOCAL | CREAD);options.c_cflag &= ~CSIZE;options.c_cflag &= ~CRTSCTS;options.c_cflag |= CS8;options.c_cflag &= ~CSTOPB;options.c_iflag |= IGNPAR;options.c_iflag &= ~(BRKINT | INPCK | ISTRIP | ICRNL | IXON); //options.c_cc[VTIME] = 2;options.c_cc[VMIN] = 12; options.c_oflag = 0;options.c_lflag = 0; cfsetispeed(&options, B115200);cfsetospeed(&options, B115200); tcsetattr(fd,TCSANOW,&options); } int cgiMain(){ int fd;char a='1';cgiHeaderContentType(“text/htmlnn”);fprintf(cgiOut,“n”);fprintf(cgiOut,“第二篇:智能小车单片机课程设计报告
fprintf(cgiOut,“
n”);fprintf(cgiOut,“n”);
fd=open(“/dev/ttyUSB0”,O_RDWR);if(-1==fd)
fprintf(cgiOut,“open usart failedn”);
}
zigbee_serial_init(fd);if(cgiFormSuccess==cgiFormSubmitClicked(“up”)){ a='2';write(fd,&a,1);} if(cgiFormSuccess==cgiFormSubmitClicked(“down”)){ a='1';write(fd,&a,1);} if(cgiFormSuccess==cgiFormSubmitClicked(“right”)){ a='4';write(fd,&a,1);} if(cgiFormSuccess==cgiFormSubmitClicked(“left”)){ a='3';write(fd,&a,1);} if(cgiFormSuccess==cgiFormSubmitClicked(“stop”)){ a='0';write(fd,&a,1);} fprintf(cgiOut,"
第三篇:课程设计----数字频率计
电子课程设计报告
设计课题: 数字频率计 作 者:
李成赞≦
专 业: 08信息工程 班 级:(2)班
学 号: 3081231201 日 期 2009年6月5日——2009年6月17日
指导教师: 廖 东 进
设计小组其他成员:叶昕瑜 史海镔 陈福青 姚闽 梁芳芳
衢州职业技术学院信息与电力工程系
前 言
一、频率计的基本原理:
频率计又称为频率计数器,是一种专门对被测信号频率进行测量的电子测量仪器。其最基本的工作原理为:当被测信号在特定时间段T内的周期个数为N时,则被测信号的频率f=N/T。
频率计主要由四个部分构成:时基(T)电路、输入电路、计数显示电路以及控制电路。在一个测量周期过程中,被测周期信号在输入电路中经过放大、整形、微分操作之后形成特定周期的窄脉冲,送到主门的一个输入端。主门的另外一个输入端为时基电路产生电路产生的闸门脉冲。在闸门脉冲开启主门的期间,特定周期的窄脉冲才能通过主门,从而进入计数器进行计数,计数器的显示电路则用来显示被测信号的频率值,内部控制电路则用来完成各种测量功能之间的切换并实现测量设置。
二、频率计的应用范围:
在传统的电子测量仪器中,示波器在进行频率测量时测量精度较低,误差较大。频谱仪可以准确的测量频率并显示被测信号的频谱,但测量速度较慢,无法实时快速的跟踪捕捉到被测信号频率的变化。正是由于频率计能够快速准确的捕捉到被测信号频率的变化,因此,频率计拥有非常广泛的应用范围。
在传统的生产制造企业中,频率计被广泛的应用在产线的生产测试中。频率计能够快速的捕捉到晶体振荡器输出频率的变化,用户通过使用频率计能够迅速的发现有故障的晶振产品,确保产品质量。
在计量实验室中,频率计被用来对各种电子测量设备的本地振荡器进行校准。在无线通讯测试中,频率计既可以被用来对无线通讯基站的主时钟进行校准,还可以被用来对无线电台的跳频信号和频率调制信号进行分析。
目 录
1、设计要求
数字频率计
2、第一章 系统概述
3、第二章单元电路设计与分析 3.1 数字频率计的基本原理 3.2 数字频率的设计 3.2.1 放大整形电路
3.2.2 时基电路
3.2.3 逻辑控制电路 3.2.4 输出实现器
4、第三章 总结设计
附录A 系统电路原理图
附录B 元件清单
附录C 参考文献
设 计 要 求
电子课程设计报告格式:
每人必须写出一份4000字以上设计总结报告,总结报告应包括以下内容:
题目名称、前言、目录、鸣谢、元器件明细表、附图、参数文献。
其中,前言应包含设计题目的主要内容、资料收集工作的简介。正文参考格式如下:
第一章 系统概述
简单介绍系统设计思路与总体解决的可行论证,各功能块的划分与组成,全面介绍总体工作或工作原理。
第二章 单元电路设计与分析
详细介绍个单元电路的选择、设计及工作原理分析,并介绍有关参数的计算及元件参数的选择等。
第三章 总结
简单介绍对设计题目的结论性意见,进一步完善或改进的意向性说明,总结设计课程的收获与体会。
元器件明细表主要用于列出本次课程设计中所用到的全部元器件。
附图要求用2#以上图纸画出总原理接线图,参考文献格式如下:
序号 作者名 书刊名 出版社 出版时间(刊号)
数字频率计(设计要求):
数字频率计是用来测量正弦信号、矩形信号等波形上工作频率的仪器,其测量结果直接用十进制数字显示。本题要求采用中、小规模集成芯片设计集成有下列功能的数字频率测量计:
被测信号的频率范围为1Hz—100KHz,分成两个频段,即1—999Hz、1—100KHz,用三位数码管显示测量数据,测量误差小于5%。
数字频率计
第一章 系统概述
为了使计数器被测信号的频率范围为1—999Hz、,用三位数码管显示测量数据。
第二章 单元电路设计与分析
一、数字频率计测频率的基本原理
所谓频率,就是周期性信号在单位时间(1s)内变化的次数。若在一定时间间隔T秒内测得 这个周期性信号的重复变化次数为N,则其频率可表示为:
f=N/T
图1——数字频率计的组成框图和波形图
图1是数字频率计的组成框图。被测信号v x 经放大整形电路变成计数器所要求的脉冲信号I,其频率与被测信号的频率f x 相同。时基电路提供标准时间基准信号II,其高电平持续时间t1=1 秒,当l秒信号来到时,闸门开通,被测脉冲信号通过闸门,计数器开始计数,直到l秒信号结束时闸门关闭,停止计数。若在闸门时间1s内计数器计得的脉冲个数为N,则被测信号频率f 逻辑控制电路的作用有两个:一是产生锁存脉冲IV,使显示器上的数x =NHz。字稳定;二是产生清“0”脉冲V,使计数器每次测量从零开始计数。
各信号之间的时序关系如图1所示。
二、数字频率计的电路设计
基本电路设计
数字频率计的基本框图如图1所示,各部分作用如下。
①放大整形电路
图2——放大整形电路图
放大整形电路由晶体管3DG100与74LS00等组成,其中3DGl00组成放大器将输入频率。为f 三角波等进行放大,与非门74LS00构成施密特触发器,它对放 x 的周期信号如正弦波、大器的输出信号进行整形,使之成为矩形脉冲。
②时基电路
图3——时基电路
时基电路的作用是产生一个标准时间信号(高电平持续时间为 1s),由定时器555构成的多谐振荡器产生。若振荡器的频率 f0 1/(t1 t 2)0.8Hz,则振荡器的输出波形如图1中的波形II所示,其中t1=1s,t2=0.25s。由公式t1=0.7(R1+R2)C和t2=0.7R2C,可计算出电阻R1、R2及电容C的值如图。
③逻辑控制电路
图4——逻辑控制电路
根据图1所示波形,在计数信号II结束时产生锁存信号IV,锁存信号IV 结束时产生 清“0”信号 V。脉冲信号IV和V可由两个单稳态触发器74LS123产生,它们的脉冲宽度由电路的时间常数决定。
设所存信号IV和清“0”信号V的脉冲宽度tw相同,如果要求tw=0.02s,则得:
tw=0.45RextCext=0.02s
若取 Rext=10kΩ,则 Cext=tw/0.45Rext=4.4μ
F。
由74LS123的功能(见下表1)可得,当 1R 1B 1 触发脉冲从1A端输入时,在触D
发脉冲的负跳变作用下,输出端1Q可获得一负脉冲,其波形关系正好满足图1所示的波形IV和V的要求。手动复位开关S按下时,计数器清“0”。
表1——74LS123功芯片能表
④输出实现器
图5——频率计算器
表2——74LS90的不同接线方法
锁存器的作用是将计数器在1s结束时所计得的数进行锁存,使显示器上能稳定地显示 此时计数器的值。如图所示,1s计数时间结束时,逻辑控制电路发出锁存信号IV,将此时计数器的值送译码显示器,选用两个8位锁存器74L273可以完成上述功能。当时锁存信号CP的正跳变来到时,锁存器的输出等于输入,从而将计数器的输出值送到锁存器的输出端。
高电平结束后,无论D为何值,输出端的状态仍保持原来的状态不变,所以在计数期间内,计数器的输出不会送到译码显示器。
表3——74LS273功能表
表4——74LS4
第三章 结束语
①设计总结
简易的数字频率计基本完成,各Vcc接电源正极,各开关控制电路的各个部分。整个电路综合使用了与门、非门、555定时器、显示器、74LS48译码器、74LS273锁存器、74LS90计数器等等的逻辑器件和施密特、可重触发器等模拟电子器件。
②设计心得、体会
本次课程设计由李成赞同学总设计,在廖东进老师辅导下顺利完成啦。通过本次的课程设计,加深了我对数字电子技术模拟电子两门课程的理解,强化了我对相关知识的记忆,提高了我对所学知识的应用。这极大扩展了我的视野,更加激发了我对这门课程的热爱,在设计的过程中,由于综合应用了各种学习、应用软件,例如:word、auto CAD、Multisim等,不但体改了技能,还能从中获得了成就感。通过这次设计,我完全知道了团队合作的所带来的快乐,集体的力量的强大性!我定位了我自己,发现自己的优势和不足,并且勉励自己不断进步,并对未来充满信心。
再此感谢给与指导的廖东进老师、李培江老师、黄云龙老师的指导。对本课程设计的的大力支持。
附录A
:
系
统
电
路
原
理
附录B:元件清单
附录C:参考文献
第四篇:单片机课程设计报告格式
《单片机课程设计》报告格式
一、封面(注明:单片机课程设计报告、课题名称、班级、姓名、指导教师、日期)
二、摘要(课题简要说明)
三、课题设计目标(功能、性能指标)、方案论证(要求作两种以上方案比较)
四、设计过程(关键电路工作原理、元器件参数选用、程序流程图、程序)
五、软硬件的安装、调试方法
六、完整电路图、性能参数测试
七、存在的问题和改进方向
八、参考文献资料
第五篇:单片机课程设计报告格式
单片机课程设计报告格式要求
统一的A4纸打印。每页约44行,每行约34字;打印正文用宋体小四号字;版面页边距上空2.5cm,下空2cm,左空2.5cm,右空2cm;页码用小五号字,底端居中。
A、封面;B、课程设计任务书;C、摘要; D、目录; E、正文;F、参考文献;G、附录(源程序代码);H、有关图纸(系统的总体原理图)
摘要(内容提要)
摘要是论文内容的简要陈述,应尽量反映主要信息,内容包括研究目的、方法、成果和结论,不含图表,不加注释,具有独立性和完整性,‚摘要‛字样位置居中。
目录
目录按三级标题编写,要求层次清晰,且要与正文标题一致。主要包括绪论、正文主体、结论、主要参考文献及附录等。
题序层次大致有以下几种格式:
1、绪论
1.1课题背景
ˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ
1.2交会对接技术发展概况
ˉˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ
1.2.1俄罗斯空间交会对接发展概况
ˉˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ
1.2.2美国空间交会对接发展概况
ˉˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ
2、空间飞行器
2.1引言
ˉˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ
结论
ˉˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ
主要参考文献
为了反映报告的科学依据和作者尊重他人研究成果的严肃态度,同时向读者提供有关信息的出处,正文之后一般应列出主要参考文献(只限于那些作者亲自阅读过的,最重要的且发表在公开出版物上的文献或网上下载的资料)。报告中被引用的参考文献序号置于所引用部分的右上角。参考文献所列著作按报告中引用顺序排列,著作按如下格式著录:序号、著作者、书名、出版地、出版社、出版日期。
例1(著作):1.宋尚桂.大学通识教育的理论和模式.青岛:中国海洋大学出版社,2007年9月
例2(文章):2.朱晓刚.以人为本----美国大学通识教育理念和实践的解读.民办教育研究,2005(5)
设计报告装订顺序
(一)课程设计封面
(二)课程设计任务书
(三)摘要
(四)目录
例:
1、绪论ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ
11.1课题背景ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ1
1.2交会对接技术发展概况ˉˉˉˉˉˉˉˉˉˉˉˉˉ
31.2.1俄罗斯空间交会对接发展概况ˉˉˉˉˉˉˉˉˉ
51.2.2美国空间交会对接发展概况ˉˉˉˉˉˉˉˉˉˉ72、空间飞行器ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ20
2.1引言ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ20
2.2空间飞行器姿态表示ˉˉˉˉˉˉˉˉˉˉˉˉˉˉ23 结论ˉˉˉˉˉˉˉˉˉˉˉˉ ˉˉˉˉˉˉˉˉˉˉ50 主要参考文献ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ
51(五)正文
(六)参考文献
(七)附录
(八)有关图纸
撰写设计报告的几点要求
1、文字
设计中汉字应采用《简化汉字总表》规定的简化字,并严格执行汉字的规范,所有文字字面清晰,不得涂改。
第一层次(章)题序和标题居中放置,其余各层次(节、条、款)题序和标题一律沿版面左侧边线顶格排列。第一层次(章)题序和标题距下文双倍行距。段落开始后缩两个字。行与行之间,段落和层次标题以及各段落之间均为单倍行距。
第一层次(章)题序和标题用小二号黑体字。题序和标题之间空两个字,不加标点,下同。
第二层次(节)题序和标题用小三号黑体字。
第三层次(条)题序和标题用四号黑体字。
第四层次及以下层次题序及标题一律用小四号黑体字。
结论(结束语)作为单独一章排列,但标题前不加‚第XXX‛字样。结论是整个设计的总结,应以简练的文字说明所做的工作。
2、表格
设计中的表格可以统一编序,也可以逐章单独编序,方式应与插图及公式的编序方式统一。表序必须连续,不得重复或跳跃。表格的结构应简洁,各栏都应标注量和相应的单位。表格内数字须上下对齐,相邻栏内的数值相同时,不能用‘同上’、‘同左’和其它类似用词,应一一重新标注。表序和表题置于表格上方中间位置,无表题的表序置于表格的左上方或右上方(同一篇论文位置应一致)。
3、插图
插图要精选,图序可以连续编序,也可以逐章单独编序,方式应与表格、公式的编序方式统一,图序必须连续,不得重复或跳跃。仅有一图时,在图题前加‘附图’字样。设计中的插图以及图中文字符号应打印,无法打印时一律用钢笔绘制和标出。由若干个分图组成的插图,分图用a,b,c,……标出。图序和图题置于图下方中间位置。
4、公式
设计中重要的或者后文中须重新提及的公式应注序号并加圆括号,序号一律用阿拉伯数字连续编序或逐章编序,序号排在版面右侧,且距右边距相等。公式与序号之间不加虚线。
5、数字用法
公历世纪、年代、年、月、日、时间和各种计数、计量,均用阿拉伯数字。年份不能简写(如1999年不能写成99年)。数值的有效数字应全部写出,如:0.50∶20.0不能写作0.5∶20。
6、软件
软件流程图和原程序清单要按软件文档格式附在报告后面,特殊情况可在答辩时展示,不附在报告内。
7、计量单位的定义和使用方法按国家计量标准执行。
文档为doc格式
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。
单片机课程设计报告
《单片机原理与接口技术》 课程设计报告 设计题目: 基于80C51单片机系统实验板的制作 与程序设计专业:应用电子专业班级: 11应电班姓名: 丁文俊指导教师: 余静老师2013 年 5 月2......
单片机课程设计报告
课程设计报告 题 目: 自动滴灌系统设计 课程名称: 单片机原理及应用 学 院: 信息工程学院专 业: 计算机科学与技术 班 级: 2014 级计本 1 班学生姓名: *** 学 号: 201403031......
单片机课程设计报告
单片机课程设计报告题目:小直流电机调速实验教学单位: 机 电 工 程 系专业: 机械设计制造及其自动化班级: 0803班学号: 0811050342姓名: 程怀虎2011 年 11月(以下内容用宋体,五号,单......
单片机课程设计报告(范文)
片 机 课 程 设 计 报学号、姓名:年级、专业:培养层次:课程名称:授课学时学分:考试成绩:授课或主讲教师签字:单 告1 单片机最小系统功能说明单片机的最小系统是由组成单片机系统必......
单片机课程设计报告
单片机课程设计报告 课程名称:单片机原理及接口课程设计 题目:基于 学院:电气信息学院 专业班级:测控技术与仪器 姓名:江让 学号: 指导老师:刘升老师 时间: C51单片机的ADC0809数模......
单片机课程设计报告
DS18B20测温及按键控制 课 程 设 计 课程名称 单片机基础课程设计 题目名称 18B20测温及按键控制 学生学院 **** 专业班级 **** 班号 **** 学生组员 ****** 指导教师 *****......
简易数字频率计(数字电路课程设计)
数字电路课程设计报告1)设计题目简易数字频率计2)设计任务和要求要求设计一个简易的数字频率计,测量给定信号的频率,并用十进制数字显示,具体指标为:1)测量范围:1HZ—9.999KHZ,闸......
简单单片机数字频率计设计(优秀范文五篇)
课程设计报告 简易频率计的设计 电子科学XX学院 姓名:专业:通信工程学号:2013 2015年12月 摘要 1 本系统基于单片机来实现核心的频率计数功能,并能够实现测量中的量程自动切换......