单片机课设 函数发生器.docx

上传人:b****6 文档编号:8358261 上传时间:2023-01-30 格式:DOCX 页数:18 大小:421.93KB
下载 相关 举报
单片机课设 函数发生器.docx_第1页
第1页 / 共18页
单片机课设 函数发生器.docx_第2页
第2页 / 共18页
单片机课设 函数发生器.docx_第3页
第3页 / 共18页
单片机课设 函数发生器.docx_第4页
第4页 / 共18页
单片机课设 函数发生器.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

单片机课设 函数发生器.docx

《单片机课设 函数发生器.docx》由会员分享,可在线阅读,更多相关《单片机课设 函数发生器.docx(18页珍藏版)》请在冰豆网上搜索。

单片机课设 函数发生器.docx

单片机课设函数发生器

单片机课程设计

 

题目:

函数发生器

姓名:

学号:

系别:

专业:

年级:

起讫日期:

2010.10.21~2010.11.19

指导教师:

目录

1.课程设计目的1

2.课程设计题目和实现目标1

3.设计方案1

4.Proteus仿真原理图2

5.程序流程3

6.程序代码4

7.调试总结15

8.设计心得体会17

9.参考文献18

1.课程设计目的

《MCS-51单片机课程设计》是与《MCS-51单片机》课程相配套的实践教学环节。

《MCS-51单片机》是一门实践性很强的专业基础课,通过课程设计,达到进一步理解单片机的硬件、软件和综合应用方面的知识,培养实践能力和综合应用能力,开拓学习积极性、主动性,学会灵活运用已经学过的知识,并能不断接受新的知识。

培养大胆发明创造的设计理念,为今后就业打下良好的基础。

通过课程设计,掌握以下知识和技能:

1).单片机应用系统的总体方案的设计;

2).单片机应用系统的硬件设计;

3).单片机应用系统的软件程序设计;

4).单片机开发系统的应用和调试能力

2.课程设计题目和实现目标

课程设计题目:

函数发生器

实现目标:

1.键盘输入产生需要的波形,包括三角波,正弦波,矩形波等

 2.频率和幅值可调,并显示频率和幅值的档位。

3.设计方案

为实现设计的目标,设计方案的总体思路是这样的:

用三个按键1、2、3,4分别用来波形选择,变量增加,变量减少,选择改变幅值或者频率。

按键“1”有按下之后来选择输出波形键。

只有在按下“4”号键后才能通过按“2”键或“3”键来实现幅值或者频率的改变。

在有波形输出的过程中,实现所按下键对应的功能,改变幅值、频率或进行波形选择。

所有的按键都在按下并且放开后才能实现相应的功能。

4.Proteus仿真原理图

5.程序流程

6.程序代码

#include

#include

sbitscl=P2^0;

sbitsda=P2^1;

sbitk1=P2^4;

sbitk2=P2^5;

sbitk3=P2^6;

sbitk4=P1^0;

charflag=0;

charb=0;

bita=1;

intv=20;

intt=20;

ints=1;

#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};

voidqiebo();

voidkey(void);

voidkey1(void);

voidkey2(void);

voidkey3(void);

voidtiaozheng(void);

voidstart(void);

voiddelays(void);

voiddelay_ms(unsignedchart);

voidtack(void);

voiddizhi(void);

voidkongzhi(void);

unsignedcharcodesin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5

0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5

0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd

0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda

0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99

0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51

0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16

0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00

0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15

0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e

0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};

voiddizhi(void)

{unsignedinti;

unsignedchard;

d=0x90;

for(i=0;i<8;i++)

{if(d&0x80)sda=1;

elsesda=0;

scl=1;

delayNOP();

scl=0;

sda=0;

d=d<<1;

_nop_();

_nop_();

}

}

voidkongzhi(void)

{unsignedinti;

unsignedchard;

d=0x40;

for(i=0;i<8;i++)

{if(d&0x80)sda=1;

elsesda=0;

scl=1;

delayNOP();

scl=0;

sda=0;

d=d<<1;

_nop_();

_nop_();

}

}

voidstart(void)

{

sda=1;

scl=1;

delayNOP();

sda=0;

delayNOP();

scl=0;

}

voidtack(void)

{

sda=1;

scl=1;

_nop_();

_nop_();

a=sda;

scl=0;

sda=0;

_nop_();

}

voiddelays(void)

{

unsignedchari,j;

for(i=0;i<10;i++)

for(j=0;j<33;j++);

}

voiddelay_ms(unsignedchart)

{

unsignedchari=0;

while(t--)for(i=0;i<120;i++);

}

voidkey()

{k4=1;

if(k4==1)

return;

delays();

k4=1;

if(k4==1)

return;

qiebo();

while(b)

{

if(b==1)

{

key1();

}

if(b==2)

{

key2();

}

if(b==3)

{

key3();

}

}

}

voidqiebo()

{

if(k4==0)

{

delay_ms(5);

if(k4==0)

{

while(!

k4);

b++;

delay_ms(5);

}

}

if(b>3)

{

b=1;

}

}

voidtiaozheng()

{

if(k3==0)

{

delay_ms(5);

if(k3==0)

{

while(!

k3);

flag++;

delay_ms(5);

}

}

if(flag>2)

{

flag=1;

}

if(k1==0)

{

delay_ms(5);

if(k1==0)

{

while(!

k1);

if(flag==1)

{

t=t+10;

s++;

s=1/s;

}

if(flag==2)

{

v=v+10;

}

}

}

if(k2==0)

{

delay_ms(5);

if(k2==0)

{

while(!

k2);

if(flag==1)

{

t=t-10;

s++;

}

if(flag==2)

{

v=v-10;

}

}

}

}

voidkey1(void)

{unsignedinti,j;

unsignedcharhh;

start();

do

{

dizhi();

tack();

}while(a==1);

do

{

kongzhi();

tack();

}while(a==0);

do{qiebo();

tiaozheng();

for(i=0;i<256;i++)

{hh=sin[i]/s;

for(j=0;j<8;j++)

{scl=0;

if(hh&0x80)sda=1;

elsesda=0;

scl=1;

_nop_();

_nop_();

_nop_();

scl=0;

sda=0;

_nop_();

hh=hh<<1;

_nop_();

_nop_();

_nop_();

}

tack();

}

}while(b==1);

}

voidkey2(void)

{

unsignedintd=0,j;

unsignedcharfang;

start();

dizhi();

tack();

kongzhi();

tack();

P3=1;

do{qiebo();

tiaozheng();

for(d=0;d

{fang=0x00;

for(j=0;j<8;j++)

{scl=0;

if(fang&0x80)sda=1;

elsesda=0;

scl=1;

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

scl=0;

sda=0;

_nop_();

_nop_();

fang=fang<<1;

_nop_();

}

tack();

}

for(d=t/2;d

{

fang=v;

for(j=0;j<8;j++)

{scl=0;

if(fang&0x80)sda=1;

elsesda=0;

scl=1;

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

scl=0;

sda=0;

_nop_();

_nop_();

fang=fang<<1;

_nop_();

}

tack();

}

}while(b==2);

}

voidkey3(void)

{

unsignedintd=0,j,n;

unsignedintfang,c=128;

start();

dizhi();

tack();

kongzhi();

tack();

for(n=0;n

do

{qiebo();

tiaozheng();

if(d==1)c++;

if(c==v)d=0;

fang=c*2;

for(j=0;j<8;j++)

{

scl=0;

if(fang&0x80)sda=1;

elsesda=0;

scl=1;

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

scl=0;

sda=0;

_nop_();

_nop_();

fang=fang<<1;

_nop_();

}

tack();

for(n=0;n

if(d==0)c--;

if(c==0){d=1;c++;}

}

while(b==3);

}

voidmain()

{

while

(1)

{key();

}

}

7.调试总结

这次的课程设计,我们要设计的是函数发生器,能够产生三角波、矩形波和正弦波,并且要求幅值和频率可调。

在设计过程中,主要做了以下工作:

1)、原理框图的设计

2)、根据框图连接硬件图

3)、由框图和硬件图编写程序代码

4)、调试工作

在老师的耐心指导下,经过长时间紧张而艰苦的奋斗,最终达到了预期想要实现的目标。

能过连续产生想要的波形,并且幅值和频率有三个档次,分别通过按键来改变,正在输出波形的幅值、频率档位则由数码管显示出来。

 

调试产生的三角波:

 

矩形波:

 

正弦波:

8.设计心得体会

在本次课设过程中,首先是对于硬件的了解。

对于PCF8591我们都是新接触的。

我们就开始查找相关资料,最后在我们几个人的努力下,终于知道它的各管脚的作用,及其内部结构有了一定的了解。

其中我们的通信方式用到了IIC,其中的通信原则我们也只是懂的不多,但在我们深入了解后还是知道其中的规则了。

在对硬件工作原理理解的基础上,我们开始编程,我们选用了C语言来编程。

并且我们作出了我们的程序仿真图。

在仿真的时候,我们并没有刚开始想的那么顺利,很多地方还是非常的粗心。

终于我们实现了我们的波形仿真。

最后,我们在完成老师提供的板后,我们的原有程序并不是很适应这块板的工作。

我们只好再一次耐心的更改我们的程序,使我们的程序适应板。

终于我们完成了本次的课设全部内容。

看到用我们的程序而产生的波形时,我们都为我们的这两周辛苦而感到非常的值得。

这次课设我作了个人总结如下几点:

1.在设计程序之前,务必要对所用单片机的内部结构有一个系统的了解,知道该单片机片内有哪些资源.

2.设计程序采用什么编程语言并不是非常重要,关键要有一个清晰的思路和一个完整的软件流程图.

3.在设计程序时,不能妄想一次就将整个程序设计好,"反复修改,不断改进"是程序设计的必经之路.

4.要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便.

5.在设计程序过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题.

9.参考文献

[1].网络资源

[2]李光才.单片机课程设计实例指导.北京:

北京航空航天大学出版社2004.

[3]李群芳,肖看.单片机原理、接口及应用——嵌入式系统技术基础.北京:

清华大学出版社,2005.3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 韩语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1