版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 武汉理工大学单片机原理与应用课程设计说明书1.设计原理单片机集成度高、功能强、可靠性高、体积小、功耗地、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。 单片机有两种基本结构形式:一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,称为普林斯顿结构。另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前的单片机以采用程序存储器和数据存储器截
2、然分开的结构为多。 本课题讨论的方波发生器的核心是目前应用极为广泛的 51系列单片机。本课程设计是设计一个方波发生器,用1602显示方波的频率和相位差。系统的整体图如下:图1系统整体图系统默认的频率为10HZ,默认的相位差为0。1.1复位电路设计如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序。由C1,R1,开关构成开关复位电路,如图2。上电后,由于电容充电,使RST持续一段高电平。当单片机在运行状态下,按下复位键也能使RST持续一段时间的高电平,从而实现上电复位和手动复位。图2 复位电路1.2振荡电路设计如图3所示,外接石英晶体或者陶瓷谐振器以及电容C2,C3接在放大器的反馈
3、电路中构成并联谐振电路。谐振器本身对外接电容C2、C3虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度以及温度的稳定性,如果使用石英晶体,推荐使用30pF,而使用陶瓷谐振器建议选择40pF。本次设计使用的是石英晶体谐振器,因此采用30pF的电容,晶振频率为12MHZ。图3 振荡电路1.3矩阵键盘设计在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多
4、出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,下图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。图4 矩阵键盘1.4液晶显示液晶如图:图5 液晶1602字符型LCD通常有14条引脚线或16条引脚线
5、的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:引脚符号功能说明1VSS一般接地2VDD接电源(+5V)3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。4RSRS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。5R/WR/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。6EE(或EN)端为使能(enable)端,写操作时,下降沿使能。读操作时,E高电平有效7DB0低4位三态、 双向数据总线
6、 0位(最低位)8DB1低4位三态、 双向数据总线 1位9DB2低4位三态、 双向数据总线 2位10DB3低4位三态、 双向数据总线 3位11DB4高4位三态、 双向数据总线 4位12DB5高4位三态、 双向数据总线 5位13DB6高4位三态、 双向数据总线 6位14DB7高4位三态、 双向数据总线 7位(最高位)(也是busy flag)15BLA背光电源正极16BLK背光 电源负极寄存器选择控制表RSR/W操作说明00写入指令寄存器(清除屏等)01读busy flag(DB7),以及读取位址计数器(DB0DB6)值10写入数据寄存器(显示各字型等)11从数据寄存器读取数据注:关于E=H脉冲
7、开始时初始化E为0,然后置E为1,再清0.busy flag(DB7):在此位为1时,LCD忙,将无法再处理其他的指令要求。2. 程序流程图图6 流程图3. 源程序#include <reg51.h>#include <math.h>#define uchar unsigned char#define uint unsigned intsbit test=P37;sbit LCDEN=P22;sbit LCDRS=P20;sbit LCDRW=P21;sbit WaveA=P30; sbit WaveB=P31; uchar Frequency,Key_Value,Fl
8、ag,a6;uint data Phase_Difference;double Control_Phase=0.000001;int data Counter_T0,Number_T0, Counter_T1,Number_T1;/*void Initial_System();uchar Scan_Keyboard();uint Get_Number_T0(uchar Frequency);uint Get_Number_T1(uchar Frequency);void Increase_Frequency();void Decrease_Frequency();void Increase_P
9、hase_Difference(uint data Step_Phase_Difference);/void Decrease_Phase_Difference(uint data Step_Phase_Difference);void Calculate_Frequency_Phase(void);void Display_Frequency_Phase();void Delay(uint);void Write_Cmd(uchar cmd);void Write_Data(uchar Data);void LCD_Init();/*void main()Initial_System();w
10、hile(1)Key_Value=Scan_Keyboard();Calculate_Frequency_Phase();Display_Frequency_Phase(); /*void Initial_System()WaveA=0;WaveB=0;Control_Phase=0.000001;Frequency=10;Phase_Difference=0;Counter_T0=0;Counter_T1=0;Number_T1=Get_Number_T1(Frequency);TMOD=0x22;TH1=0x38; /256-200TL1=0x38; /256-200TH0=0xc9; /
11、256-201TL0=0xc9;EA=1;ET1=1;TR0=1;TR1=1;LCD_Init();/*void Write_Cmd(uchar cmd) LCDEN=1; LCDRS=0; P0=cmd; Delay(5); LCDEN=0;/*void Write_Data(uchar Data) LCDEN=1; LCDRS=1; P0=Data; Delay(5); LCDEN=0;/*void LCD_Init() LCDRW=0; LCDRS=0; Write_Cmd(0x01); Write_Cmd(0x38); Write_Cmd(0x0C); Write_Cmd(0x06);
12、 Write_Cmd(0x80); Write_Data('F'); Write_Data('R'); Write_Data('E'); Write_Data(':'); Write_Cmd(0x80+0x40); Write_Data('P'); Write_Data('H'); Write_Data('A'); Write_Data(':');/*uchar Scan_Keyboard()uchar key;uchar temp1,temp2;P1=0x0f;if
13、(P1!=0x0f)temp1=P1;P1=0xf0;temp2=P1;P1=0x0f;while(P1!=0x0f)Delay(10);key=temp1|temp2;switch(key)case 0xee :return 0; break;case 0xde :return 1; break;case 0xbe :return 2; break;case 0x7e :return 3; break;case 0xed :return 4; break;case 0xdd :return 5; break;case 0xbd :return 6; break;case 0x7d :retu
14、rn 7; break;case 0xeb :return 8; break;case 0xdb :return 9; break;case 0xbb :return 10; break;case 0x7b :return 11; break;case 0xe7 :return 12; break;case 0xd7 :return 13; break;case 0xb7 :return 14; break;case 0x77 :return 15; break;default : return 16;/*uint Get_Number_T0(uchar Frequency)uint h;do
15、uble l;l=(double)Frequency;l=Control_Phase*0.5/l;l=l/0.000055;h=l;if(l-h>+0.5)h=h+1;return h;/*uint Get_Number_T1(uchar Frequency)uint h;double f;f=(double)Frequency;f=0.5/f;f=f/0.0002;h=f;if(f-h>=0.5)h=h+1;return h;/*T0void Timer0_Interrupt() interrupt 1Counter_T0+;if(Counter_T0>Number_T0)
16、Counter_T0=0;if(Flag=0)WaveB=WaveA;elseWaveB=WaveA;ET0=0;TR0=0;/*T1void Timer1_Interrupt() interrupt 3 Counter_T1+; if(Counter_T1>Number_T1)Counter_T1=0;WaveA=WaveA;ET0=1;TR0=1;/*void Increase_Frequency()if(Frequency<=256-10) Frequency=Frequency+10;else Frequency=255;Number_T1=Get_Number_T1(Fr
17、equency);/*void Decrease_Frequency()if(Frequency>10)Frequency=Frequency-10;elseFrequency=1;Number_T1=Get_Number_T1(Frequency);/*void Increase_Phase_Difference(uint data Step_Phase_Difference)Control_Phase=Control_Phase+0.00555556*Step_Phase_Difference;if(Control_Phase>=1&&Flag=1)Flag=0
18、;Control_Phase=0.000001;else if(Control_Phase>1)Flag=1;Control_Phase=Control_Phase-1; Phase_Difference+=Step_Phase_Difference;if(Phase_Difference>=360)Phase_Difference=0;void Calculate_Frequency_Phase(void)switch(Key_Value) case 0:Increase_Frequency();break; case 1:Decrease_Frequency();break;
19、case 2:Increase_Phase_Difference(10); break; case 3:Initial_System();break; default :break;Number_T0=Get_Number_T0(Frequency);void Display_Frequency_Phase()uchar i,j;a0=Frequency/100;a1=(Frequency%100)/10;a2=Frequency%10;a3=Phase_Difference/100;a4=(Phase_Difference%100)/10;a5=Phase_Difference%10;Wri
20、te_Cmd(0x80+5);for(i=0;i<=2;i+)Write_Data(ai+48);Delay(5);Write_Cmd(0x80+0x40+5);for(j=3;j<=5;j+)Write_Data(aj+48);Delay(5);test=0;void Delay(uint i)uint j,k;for(k=i;k>0;k-)for(j=110;j>0;j-);4. 仿真结果分析4.1系统初始化系统默认频率为10HZ,相位差为0.液晶显示,示波器测量如图:图7 系统初始图4.2频率100HZ,相位差0图8 频率100HZ,相位差04.3频率10HZ,相位差90图9频率10HZ,相位差904.4频率100HZ,相位差90图10频率100HZ,相位差905. 心得体会 通过本次课程设计,我对单片机和C语言的相关知识得到了进一步的,刚开始看到这个题目的时候,感觉倒计时不是很难,有对应的输入,在控制芯片的作用下,进行递减的控制,就可以达到效果。所以刚开始的时候,做的还不是很认真,当设计进行到具体环节的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 20047.1-2025光伏组件安全鉴定第1部分:结构要求
- 智能控制 课件 -第四章-专家控制系统
- 2025中学教师招聘考试题
- 内分泌科病区安全防护
- 内分泌甲状腺科普
- 新年心愿活动策划方案(3篇)
- 综合体项目管理制度(3篇)
- 兽药管理培训
- 销售合同管理制度流程模板(3篇)
- 《GAT 760.2-2008公安信息化标准管理分类与代码 第2部分:标准级别代码》专题研究报告深度
- 数字孪生方案
- 金融领域人工智能算法应用伦理与安全评规范
- 2026长治日报社工作人员招聘劳务派遣人员5人备考题库及答案1套
- 机动车驾校安全培训课件
- 河道清淤作业安全组织施工方案
- 2025年役前训练考试题库及答案
- 2024VADOD临床实践指南:耳鸣的管理课件
- 2026年七台河职业学院单招职业技能测试题库附答案
- 2021海湾消防 GST-LD-8318 紧急启停按钮使用说明书
- 烟花爆竹零售经营安全责任制度
- 方小丹建筑地基基础设计的若干问题课件
评论
0/150
提交评论