南邮综合设计报告(课程设计)proteus和Keil

更新时间:2024-04-25 06:23:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

电子科学综合设计

目录

一、课题1:数码管学号滚动显示 ........................................................................................ 4 1.课题任务要求及技术指标 ................................................................................................ 4 1.1设计任务 ..................................................................................................................... 4 1.2设计要求 ..................................................................................................................... 4 2.课题分析及设计思路 ........................................................................................................ 4 2.1功能分析 ..................................................................................................................... 4 2.2实现思路 ..................................................................................................................... 4 2.3难点描述 ..................................................................................................................... 4 3.系统设计(建模) ............................................................................................................ 4 3.1硬件框图 ..................................................................................................................... 4 3.2软件框图 ..................................................................................................................... 4 3.3电路图 ......................................................................................................................... 5 3.4元件清单 ..................................................................................................................... 5 3.5源程序 ......................................................................................................................... 6 4.仿真结果与结果分析 ........................................................................................................ 7 二、课题2:LED8彩灯花样显示 ........................................................................................... 7 1.课题任务要求及技术指标 ................................................................................................ 7 1.1设计任务 ..................................................................................................................... 7 1.2设计要求 ..................................................................................................................... 7 2.课题分析及设计思路 ........................................................................................................ 7 2.1功能分析 ..................................................................................................................... 8 2.3难点描述 ..................................................................................................................... 8 3.系统设计(建模) ............................................................................................................ 8 3.1硬件框图 ..................................................................................................................... 8 3.2软件框图 ..................................................................................................................... 8

1

电子科学综合设计

3.3电路图 ......................................................................................................................... 8 3.4元件清单 ..................................................................................................................... 9 3.5源程序 ......................................................................................................................... 9 4.仿真结果与结果分析 ...................................................................................................... 10 三、课题3:数字电子钟 ...................................................................................................... 11 1.课题任务要求及技术指标 .............................................................................................. 11 1.1设计任务 ................................................................................................................... 11 1.2设计要求 ................................................................................................................... 11 2.课题分析及设计思路 ...................................................................................................... 11 2.1功能分析 ................................................................................................................... 11 2.2实现思路 ................................................................................................................... 12 2.3难点描述 ................................................................................................................... 12 3.系统设计(建模) .......................................................................................................... 12 3.1硬件设计 ................................................................................................................... 12 3.2软件设计流程图 ....................................................................................................... 13 3.3电路图 ....................................................................................................................... 14 3.4元件清单 ................................................................................................................... 15 3.5源程序 ....................................................................................................................... 15 4.仿真结果与结果分析 ...................................................................................................... 19 四、课题6:函数发生器 ...................................................................................................... 20 1.课题任务要求及技术指标 .............................................................................................. 20 1.1设计任务 ................................................................................................................... 20 1.2设计要求 ................................................................................................................... 20 2.课题分析及设计思路 ...................................................................................................... 20 2.1功能分析 ................................................................................................................... 20 2.2实现思路 ................................................................................................................... 20 2.3难点描述 ................................................................................................................... 20

2

电子科学综合设计

3.系统设计(建模) .......................................................................................................... 20 3.1硬件设计 ................................................................................................................... 20 3.2软件流程图 ............................................................................................................... 21 3.3电路图 ....................................................................................................................... 26 3.4源程序 ....................................................................................................................... 26 4.仿真结果与结果分析 ...................................................................................................... 32 五、课题12:简易温度计 .................................................................................................... 34 1.课题任务要求及技术指标 .............................................................................................. 34 1.1设计任务 ................................................................................................................... 34 1.2设计要求 ................................................................................................................... 34 2.课题分析及设计思路 ...................................................................................................... 34 2.1功能分析 ................................................................................................................... 34 2.2实现思路 ................................................................................................................... 34 2.3难点描述 ................................................................................................................... 34 3.系统设计(建模) .......................................................................................................... 34 3.1硬件设计 ................................................................................................................... 34 3.2软件流程图 ............................................................................................................... 35 3.3电路图 ....................................................................................................................... 37 3.4源程序 ....................................................................................................................... 37 4.仿真结果与结果分析 ...................................................................................................... 46 六、课程设计小结 ................................................................................................................. 47

3

电子科学综合设计

一、课题1:数码管学号滚动显示

1.课题任务要求及技术指标 1.1设计任务:

要求学生在六个数码管滚动显示自己的学号(六位),每隔一定时间循环移位一次,学号为奇数则左移,学号为偶数则右移。间隔时间可由开关选择1秒,2秒,3秒和4秒。 1.2设计要求:

(1)给出正确的原理图;

(2)给出正确的程序,并结合原理图给出相应结果。 2.课题分析及设计思路 2.1功能分析:

数码管滚动显示学号,可控制间隔时间。 2.2实现思路:

1、动态数码显示技术;如何进行动态扫描,由于一次只能让一个数码管显示,因此,要显示6位的数据,必须经过让数码管一个一个轮流显示才可以,同时每个数码管显式的时间大约在1ms到4ms之间,所以为了保证正确显示,必须每隔1ms,就得刷新一个数码管。而这刷新时间我们采用单片机的定时/计数器来控制,每定时1ms对数码管刷新一次。

2、在进行数码显示的时候,要对显示单元开辟6个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。 2.3难点描述:

对延时的精度要求比较高。 3.系统设计(建模) 3.1硬件框图

震荡

3.2软件框图

4

复位电 路 STC 89C51 键盘 数码管显示 电 路 电子科学综合设计

3.3电路图

开 始 数码管显示学号 读取键值 根据键值命令数码管延时滚动 执行结束

3.4元件清单 器材 单片机 数码管 按键 晶振 瓷片电容 电解电容 电阻 电阻

规格 AT89C51 7SEG-MPX6-CA-BLUE Button 12MHz 22pF 10uF 220Ω 10K 数量 1 1 2 1 2 1 2 9 5

电子科学综合设计

3.5源程序

#include #define uint unsigned int #define uchar unsigned char

uchar code DIS_SEG7[]={0xc0,0xa4,0xc0,0xa4,0xc0,0xf9};//设置学号,共阳字形码 uchar code DIS_BIT[6]={0x3e,0x3d,0x3b,0x37,0x2f,0x1f};//六位数码管位选 sbit k1=P1^0; sbit k2=P1^1; void delay1ms(uint i) { }

void main(void) {

uchar cnt, ttt;

uchar DISP[] = {0, 1, 2, 3, 4, 5,}; while(1) {

for(ttt = 0; ttt < 100; ttt++)

for(cnt = 0; cnt < 6; cnt++) { //点亮数码管0-5 }

P2 = 0;

P0 = DIS_SEG7[DISP[cnt]]; P2 = ~DIS_BIT[cnt]; if(k1==1&&k2==1) else{ }

if(k1==0&&k2==1) else{ }

if(k1==1&&k2==0) else{ }

if(k1==0&&k2==0)

delay1ms(4);

delay1ms(3);

delay1ms(2);

delay1ms(1);

uint j;

while(i--) for(j = 0; j < 110; j++);

6

电子科学综合设计

}

}

ttt = DISP[0]; DISP[0] = DISP[1]; DISP[1] = DISP[2]; DISP[2] = DISP[3]; DISP[3] = DISP[4]; DISP[4] = DISP[5]; DISP[5] = ttt;

4.仿真结果与结果分析

当按键K1、K2弹起时,学号延时1s滚动;当K1按下,K2弹起时,学号延时2s滚动;当K1弹起,K2按下时,学号延时3s滚动;当K1、K2按下时,学号延时4s滚动。

二、课题2:LED8彩灯花样显示

1.课题任务要求及技术指标 1.1设计任务:

要求学生设计出LED8彩灯在两个拨码开关的控制下每隔1秒,2秒,3秒和4秒间隔点亮。 1.2设计要求:

(1)给出正确的原理图;

(2)给出正确的程序,并结合原理图给出相应结果。 2.课题分析及设计思路

7

电子科学综合设计

2.1功能分析:

彩灯流水显示,间隔时间可控。 2.2实现思路:

当51单片机的P2口有高电平输出时,相应的发光二极管就会点亮。应用这一原理我们可以容易的点亮一个数码管,例如令P2口输出0000 0001时D1就会点亮。若再把0000 0001向左循环一位,利用P2口输出,就会点亮D2。在发光二极管两次点亮的间隔中加延时程序,让每次点亮停留一段时间,像这样人眼就可以看到“流水” 的现象。 2.3难点描述:

移位与延时之间的关联。 3.系统设计(建模) 3.1硬件框图

震荡 3.2软件框图

3.3电路图

8

复位电 路 STC 89C51 键盘 流水灯电 路 电 路 开 始 数码管显示学号 读取键值 根据键值命令数码管延时滚动 执行结束 电子科学综合设计

3.4元件清单 器材 单片机 发光二极管 播码开关 晶振 瓷片电容 电解电容 电阻 电阻

3.5源程序 #include #include

#define uchar unsigned char #define uint unsigned int sbit k1=P1^0; sbit k2=P1^1; //延时

void DelayMS(uint x) {

9

规格 AT89C51 蓝+红+黄+绿 DIPSW_2 11.0592MHz 22pF 10uF 220Ω 10K 数量 1 2 1 1 2 1 8 1 电子科学综合设计

}

uchar i; while(x--) { }

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

//主程序 void main() { }

4.仿真结果与结果分析

uchar i; P2=0x80; while(1) { }

for(i=0;i<7;i++) { }

P2=_crol_(P2,1); //P2 的值向左循环移动 if(k1==1&&k2==1) else{ }

if(k1==0&&k2==1) else{ }

if(k1==1&&k2==0) else{ }

if(k1==0&&k2==0)

DelayMS(1600);

DelayMS(1200);

DelayMS(800);

DelayMS(400);

10

电子科学综合设计

启动程序,二极管由D1到D8逐个点亮。播码开关播向1,1时,点亮间隔为1s;播码开关播向0,1时,点亮间隔为2s;播码开关播向1,0时,点亮间隔为3s;播码开关播向0,0时,点亮间隔为4s。

三、课题3:数字电子钟

1.课题任务要求及技术指标 1.1设计任务:

运用单片机的中断技术,LED显示技术和键盘扫描技术,设计一实用的多功能电子钟。 1.2设计要求:

(1)给出正确的原理图;

(2)给出正确的程序,并结合原理图给出相应结果。 2.课题分析及设计思路 2.1功能分析:

数字电子钟是一个将“ 时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,另外还有校时功能。

11

电子科学综合设计

2.2实现思路:

8个数码管的段选接到单片机的P0口,位选接到单片机的P2口。数码管按照数码管动态显示的工作原理工作,将标准秒信号送入“秒单元”,“秒单元”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分单元”的时钟脉冲。“分单元”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时单元”。“时单元”采用24进制计时器,可实现对一天24小时的累计。显示电路将“时”、“分”、“秒”通过七段显示器显示出来。校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整,按一下S,秒单元就加1 ,按一下M,分就加1,按一下H,时就加1。 2.3难点描述:

按键校对时间时容易抖动,抖动问题不解决就会引起对闭合键的识别。 3.系统设计(建模) 3.1硬件设计 (1)最小系统设计

单片机的最小系统是由电源、复位、晶振、/EA=1组成 (2)数码管显示电路

12

电子科学综合设计

数码管使用条件:

a、段及小数点上加限流电阻

b、使用电压:段:根据发光颜色决定; 小数点:根据发光颜色决定。 (3)键盘控制电路

当用手按下一个键时,如图3-8所示,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也回会出现类似的情况。这就是抖动。抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。很容易想到,抖动问题不解决就会引起对闭合键的识别。用软件方法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,这之后,在读入键盘码。 3.2软件设计流程图

13

电子科学综合设计

N 开始 一秒时间到?

3.3电路图 Y 秒单元加1 N 60秒时间到? Y 秒单元清零,分单元加 1 N 60分钟到? Y 分单元清零,时单元加 1 N 24小时到? Y 时单元清零 时间显示 中断返回 14

电子科学综合设计

3.4元件清单 器材 单片机 数码管 按键 晶振 瓷片电容 电解电容 电阻

3.5源程序

#include sbit ksec=P3^0; sbit kmin=P3^1; sbit khour=P3^2;

15

规格 AT89C51 7SEG-MPX8-CC-BLUE Button 11.0592MHz 22pF 10uF 10K 数量 1 1 3 1 2 1 8

电子科学综合设计

unsigned char secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0; unsigned int num=0,sec=0,min=0,hour=0;

unsigned char code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay(unsigned int); void keyscan(); void display(); main() { TMOD=0x01;

TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1; ET0=1; TR0=1; while(1) { display(); keyscan();

}

}

void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

//定时器中断程序 void time0()interrupt 1 { num++;

TH0=(65536-50000)/256; TL0=(65536-50000)%6; }

//LED显示程序 void display() { if(num==20)

{

16

电子科学综合设计

num=0; sec++; if(sec==60) { sec=0; min++; if(min==60) { }

}

}

secge=sec; secshi=sec/10; minge=min; minshi=min/10; hourge=hour; hourshi=hour/10; P2=0xfe; P0=table[secge]; delay(5); P2=0xfd; P0=table[secshi]; delay(5); P2=0xfb; P0=0x40; delay(5); P2=0xf7; P0=table[minge]; delay(5); P2=0xef;

min=0; hour++; if(hour==24) { hour=0; min=0; sec=0;

}

17

电子科学综合设计

P0=table[minshi]; delay(5); P2=0xdf; P0=0x40; delay(5); P2=0xbf; P0=table[hourge]; delay(5); P2=0x7f;

P0=table[hourshi]; delay(5);

}

//按键控制子程序 void keyscan() { if(ksec==0) { delay(10); if(ksec==0) { sec++; if(sec>=60)

sec=0;

}

while(ksec==0)

display(); }

if(kmin==0) { delay(10); if(kmin==0) { min++; if(min>=60)

min=0;

}

while(kmin==0)

display();

18

电子科学综合设计

}

}

if(khour==0) { }

delay(10); if(khour==0) { }

while(khour==0)

display(); hour++; if(hour>=24)

hour=0;

4.仿真结果与结果分析

走时:默认为走时状态,按24小时制分别显示“时时-分分-秒秒”,有2个“-”动态

19

电子科学综合设计

显示,时间会按实际时间以秒为最少单位变化。

走时调整:按S对秒进行调整,按一下加一秒;按M对分进行调整,按一下加一分;按H对时进行调整,按一下加一小时,从而达到快速设定时间的目的。

四、课题6:函数发生器

1.课题任务要求及技术指标 1.1设计任务:

采用数字合成技术和D/A转换器件,实现多种信号波形的输出,设计一台实用的函数信号发生器。 1.2设计要求:

(1)给出正确的原理图;

(2)给出正确的程序,并结合原理图给出相应结果。 2.课题分析及设计思路 2.1功能分析:

系统能产生方波、锯齿及正弦信号;能提供信号的频率的显示,能改变频率。 2.2实现思路:

以89C51为核心,结合DAC0832实现程序控制产生正弦波、锯齿波及方波等常用的低频信号。可以通过键盘选择波形及增减频率。 2.3难点描述:

波形的产生,数模转换 3.系统设计(建模) 3.1硬件设计 (1)放大电路

20

电子科学综合设计

DAC0832与反相比例放大器相连,实现电流到电压的转换,因此输出模拟信号的极性与参考电压的极性相反,数字量与模拟量的转换关系为VOUT1??VREF????数字量??? 256??若D/A转换器输出为双极性,如图3-6所示。运算放大器B的作用是把运算放大器A的单向输出电压转换成双向输出电压。其原理是将B的反向输入端通过电阻R2与参考电压VREF相连,VREF经R2向B提供一个偏流I1,其电流方向与I2相反,因此运算放大器B的输入电流为I1、I2的代数和。则D/A转换器的总输出电压为:

VOUT2?R3R3??-??VOUT1?VOUT1?VREF?。 ??VREF。 因R5= R6=2 R7,所以VOUT2?-?2RR2??1(2)显示模块 1602液晶器件

3.2软件流程图 (1)主程序流程图

主程序开始 开转换器的DAC 寄存器 关闭输入输入寄存器 初始显示子程序 21

电子科学综合设计

初始waveform=0 设置定时器0和外 部中断

While(1)循环等待 主程序主要设置了D/A转换器件DAC0832的工作模式,定义了DAC0832数据端口。调用了显示初始子程序,设置了定时器工作模式及定时中断和外部中断。 (2)定时中断程序流程图

定时中断的作用是用来改变相应波形的频率,通过改变TH,TL的值就可以改变定时时间,从而改变相应波形的频率。Waveform的值代表不同的波形,Waveform=0代表正弦波,Waveform=1代表锯齿波,Waveform=2代表方波,根据Waveform值调用对应的波形输出子程序。

22

定时器中断程序开始 设置TH,TL寄存器 Waveform=0 是 正弦波输出子程序 否 Waveform=1 否

Waveform=2 锯齿波输出子程序 方波输出子程序 返回 电子科学综合设计

(3)外部中断按键子程序流程图

外部中断是由按键引起的P3.2引脚下降沿触发的,波形切换、频率增减都是通过外部中断和定时中断相结合完成的,外部中断程序中只是改变了相应的参数或中间值(如波形形式waveform及相应波形频率wavefreq[waveform]和定时器0的定时初值寄存器的中间值T_temp)另外外部中断程序还对波形的频率做了数据处理并送到液晶屏显示。

(4)正弦波子程序流程图

23

外部中断程序开始 关总中断 获取P3口高四位 否 P3.4=0 是 是 Waveform++ P3.5=0 是 wavefreq[waveform]++ 设定T_temp取值方式 否 P3.6=0 wavefreq[waveform]-- 求得当前频率值 显示当前率值及对应的波形开总中断与定时器中断 返回

电子科学综合设计

正弦波子程序 DAdate=sine_tab[Wavecount] Wavecount++ Wavecount>255 否 是 Wavecount=0 开DAC0832输入寄存器 关DAC0832输入寄存器 返回 正弦波主要是通过单片机向D/A转换器DAC0832输送8位二进制数产生的,本方案选取的256个8位二进制数存放在数组sine_tab[],中wavecount的作用就是抽点计数范围是0~255,本方案中DAC0832工作在单缓冲状态,DAC寄存器处于直通状态,只要在相应的时间打开和关闭输入寄存器就能完成数据输送。 (5)三角波子主程序流程图

Wavecount=0 Wavecount>63 是 开DAC0832输入寄存器 否 Wavecount++ DAdate=sawtooth_tab[Wavecount] 三角波子程序 24

电子科学综合设计

关DAC0832输入寄存返回 三角波的产生方法以正弦波类似都是通过取点来产生的,本方案取了64个点,全部存

放在sawtooth_tab[Wavecount]中。 (6)方波子程序流程图

(7)初始显示子程序流程图

返回 在第二行显示press No.1 key! 在第一行显示select wave 初始化LCD

初始显示子程序 返回 关DAC0832输入寄存器 开DAC0832输入寄存器 DAdate=0x00 DAdate=0xff judge=1 否 Judge=~judge 方波子程序

25

电子科学综合设计

3.3电路图

3.4源程序 #include

#define uchar unsigned char #define uint unsigned int #define DAdata P0 sbit DA_S1= P2^0; sbit DA_S2= P2^1; sbit key= P3^2; uchar wavecount; uchar THtemp,TLtemp; uchar judge=1; uchar waveform;

uchar code freq_unit[3]={10,50,200}; uchar idata wavefreq[3]={1,1,1}; Wave: \

uchar idata lcd_hang2[16]={%uchar code waveTH[]={

0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xf9,0xfc,0xfd,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff, 0xf6,0xfb,0xfd,0xfb,0xfe,0xff,0xff,0xff,0xff,0xff};

uchar code lcd_hang1[]={\

uchar code waveTL[]={

26

电子科学综合设计

0x79,0x3d,0x7e,0x9e,0xbe,0xbf,0xc8,0xcf,0xd4,0xd9, //正弦波频率调整中间值

uchar code sawtooth_tab[]={ c,

0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x550x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x10x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x00x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x20x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x6

,0x51,0x4e,0x4c,0x48,0x45,0x43, e,0x1c,0x1a,0x18,0x16 ,0x15,0x13, 2,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 08,0x09,0x0a,0x0b,0x0d,0x0e,0x10, e,0x30,0x33,0x35,0x38,0x3a,0x3d,

0x80,0x84,0x88,0x8c,0x90,0x94,0x98,0x9c,0xa0,0xa4,0xa8,0xac,0xb0,0xb4,0xb0xc4,0xc8,0xcc,0xd0,0xd4,0xd8,0xdc,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc, };

0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,00xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0x0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0x0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96

8,0xbc,0xc0,

0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c,0x20,0x24,0x28,0x2c,0x30,0x34,0x30x44,0x48,0x4c,0x50,0x54,0x58,0x5c,0x60,0x64,0x68,0x6c,0x70,0x74,0x78,0x7

8,0x3c,0x40,

0xe8,0xf4,0xf8,0x7a,0xc7,0xfc,0x23,0x3d,0x53,0x64, //锯齿波频率调整中间值 0x3c,0x1e,0x8f,0x32,0xc7,0x63,0xb1,0xd8,0xec,0xf6}; //方波频率调整中间值

uchar code sine_tab[256]={ ,0xae,0xb1,0xb4,0xb7,0xba,0xbc, xe3,0xe5,0xe7,0xe9,0xea,0xec, ff,0xff,0xff,0xff,0xff,0xff, f4,0xf2,0xf1,0xef,

1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2, ,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,

27

电子科学综合设计

9,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80}; void delay(uchar z) {

uint x,y; }

/*void sawtooth_out() {

uchar i;

for(i=255;i>0;i--) {DAdata=i; }*/

void sawtooth_out() { }

void sine_out() { }

void square_out() {

judge=~judge;

if(judge==1) DAdata=0xff; }

/************1602液晶的相关函数*************/

else DAdata=0x00; DA_S1=0; DA_S1=1;

DA_S1=0; DA_S1=1;

DAdata=sine_tab[wavecount++];

if(wavecount>64) wavecount=0; DA_S1=0; DA_S1=1;

DA_S1=0; DA_S1=1;

} for(x=z;x>0;x--) for(y=110;y>0;y--);

DAdata=sawtooth_tab[wavecount++];

28

电子科学综合设计

#define lcd_ports P1 sbit rs=P2^2; sbit rw=P2^3; sbit lcden=P2^4;

void write_com(uchar com) { }

void write_date(uchar date) { }

void disp_lcd(uchar addr,uchar *temp1) { }

void init_lcd() {

uchar num; write_com(addr);

delay(1); //延时一会儿??? for(num=0;num<16;num++) { }

write_date(temp1[num]);//或者这样写write_date(*(temp1+num)); delay(1);

rs=1; //置1,表示写数据(在指令所指的地方写数据) lcden=0; lcd_ports=date; delay(5); lcden=1; delay(5); lcden=0;

rs=0; //置零,表示写指令 lcden=0; lcd_ports=com; delay(5); lcden=1; delay(5); lcden=0;

29

电子科学综合设计

lcden=0;

rw=0; //初始化一定要设置为零,表示写数据 write_com(0x38); //使液晶显示点阵,为下面做准备 write_com(0x0c); //初始设置 write_com(0x06); //初始设置 write_com(0x01); //清零

write_com(0x80); //使指针指向第一行第一格

disp_lcd(0x80,&lcd_hang1[3*16]); //在第一行显示 disp_lcd(0xc0,&lcd_hang1[4*16]); //在第二行显示 }

/********************1602液晶函数声明结束*********************/ void main() { } { }

void key_int0() interrupt 0

TH0=THtemp; TL0=TLtemp;

if(waveform==0) sine_out(); else if(waveform==1) sawtooth_out(); else if(waveform==2) square_out(); DA_S2=0; DAdata=0; DA_S1=1; init_lcd();

TMOD=0x01; //设置定时器0方式1为16位工作方式 IT0=1; //设置外部中断0为下降沿触发 ET0=1; //开定时器中断 EX0=1; EA=1; while(1) { }

waveform=0;

void timer0() interrupt 1

30

电子科学综合设计

{

uchar keytemp; 位)

uint total_freq; //总频率

EA=0; TR0=0; //关总中断与定时器 delay(10); //延时够吗???

if(key==0) //确实有按键按下而引发中断 {

lcd_hang2[5]=total_freq+0x30; //在液晶中显示个位,(0x30 在液 total_freq/=10; lcd_hang2[4]=total_freq+0x30; //在液晶中显示时十位 total_freq/=10; lcd_hang2[3]=total_freq+0x30; //在液晶中显示时百位 total_freq/=10; lcd_hang2[2]=total_freq+0x30; //在液晶中显示时千位 disp_lcd(0x80,&lcd_hang1[waveform*16]); //在第一行显示 disp_lcd(0xc0,lcd_hang2); //在第二行显示

keytemp=P3&0xf0; //获取P3口高四位的值 switch(keytemp) {

case 0xe0: //选择波形

waveform++;

break;

if(waveform>2) waveform=0;

case 0xd0: //频率按规定单位依次增加

wavefreq[waveform]++;

if(wavefreq[waveform]>10) wavefreq[waveform]=1; // /*这 break;

边要用\,因为它比\可靠

// 性更高,使加数有个上限,不会一直加下去*/

case 0xb0: //频率按规定单位依次衰减

wavefreq[waveform]--; }

if(wavefreq[waveform]<1) wavefreq[waveform]=10; //这边 break;

要用\,因为它比\可靠性更高

THtemp=waveTH[waveform*10+(wavefreq[waveform]-1)]; //方括号中选取TLtemp=waveTL[waveform*10+(wavefreq[waveform]-1)];

第几个数后,并把该值赋给T_temp

total_freq= wavefreq[waveform] * freq_unit[waveform]; //求输出频率(个数*单

晶显示中表示数字0)

31

电子科学综合设计

}

}

EA=1; TR0=1; //开启总中断与定时器

4.仿真结果与结果分析

图1 锯齿波

32

电子科学综合设计

图2 方波

图3 正弦波

33

电子科学综合设计

系统可以改变频率的大小,方波的频率区间为200Hz至2000Hz,锯齿波的频率区间是10Hz至100Hz,正弦波的频率区间为10Hz至100Hz,利用定时中断并改变相应的定时时间即可改变频率的大小。

五、课题12:简易温度计

1.课题任务要求及技术指标 1.1设计任务:

采用温度传感器,采集和显示室温,实现数字温度计功能。 1.2设计要求:

(1)给出正确的原理图;

(2)给出正确的程序,并结合原理图给出相应结果。 2.课题分析及设计思路 2.1功能分析:

多点测量温度,并在数码管上显示,另加报警系统。 2.2实现思路:

2基于AT89C51单片机的测温系统,并采用了数字温度传感器DS1621和IC串行总线通

信系统。 2.3难点描述:

温度的采集以及转化显示。 3.系统设计(建模) 3.1硬件设计

(1)数字温度传感器

斜坡累加电路

温度低敏感振荡器 计数器 =0 34

重预置 计数 比较器 温度低敏感振荡器 重预置电路 温度寄存器 电子科学综合设计

DS1621的构成原理框图如图所示,在测量温度时使用了独有的在线温度测量技术。它通过在一个由对温度高度敏感的振荡器决定的计数周期内对温度低敏感的振荡器时钟脉冲的计数值的计算来测量温度。DS1621在计数器中预置了一个初值,它相当于-50摄氏度。如果计数周期结束之前计数器达到0,已预置了此初值的温度寄存器中的数字就会增加,从而表明温度高于-55摄氏度。与此同时,计数器斜坡累加电路被重新预置一个值,然后计数器重新对时钟计数,直到计数值为0。通过改变增加的每1s内的计数器的计数,斜坡累加电路可以补偿振荡器的非线性误差,以提高精度,任意温度下计数器的值和每一斜坡累加电路的值对应的计数次数须为已知。

DS1621通过计算可以得到0. 5摄氏度的精度,温度输出为9位,在发出读温度值请求后还会输出两位补偿值。表2给出了所测的温度和输出数据的关系。这些数据可通过2线制串行口连续输出,MSB在前,LSB在后。 (2)七段LED数码显示电路

3.2软件流程图 (1)主程序的设计

35

电子科学综合设计

主程序的主要功能是负责多点温度数据的实时采集、传输,处理和显示。其程序流程如图所示。

初始化 生成地址字节1001000,循环次数3

(2)温度计算模块设计

向设置/状态寄存器设置为连续工作方式 启动转换 地址字节加02H 循环次数减1为0? N 延时1S以上等待结生成地址字节1001000,循环次数读温度数据并存储 地址字节加02H 循环次数减1为0? N N 读温度数据并存储及显示 计算温度子程序将从DS1621中读取的温度值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图5-2所示。

36

电子科学综合设计

开始 N 温度零下? Y 温度值取补码置“—”标志 置“+”标

3.3电路图

计算小数位温度BCD计算整数位温度BCD 结束

3.4源程序 #include #include

#define uchar unsigned char #define uint unsigned int

#define DiSdata P0 //七段码数据输出口

37

电子科学综合设计

#define discan P2 //扫描数据输出口 sbit DIN=P0^7; //小数点控制 sbit Scl=P3^0; //串行时钟 sbit

Sda=P3^1;

//串行数据

sbit alarm1=P1^7; sbit alarm2=P1^6; uint i; uint h; uint temp;

uchar dath[2]; //温度输入口 uchar ff2,ff1=0,t3=0;

uchar code dis_7[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; //共阴LED段码表 \灭%uchar code scan_con[5]={0xfd,0xfb,0xf7,0xef,0xdf}; //LED显示控制,对应0的LED有效

uchar data display[5]={0x00,0x00,0x00,0x00,0x002}; //显示单元数据,共6个数据和一个运算暂用

uchar data display1[5]={0x01,0x02,0x03,0x04,0x052}; uchar data DD[4]={0x90,0x92,0x94}; //

void delay_us(uint t) //延时函数 {

for (;t>0;t--); } //

scan() //LED扫描函数 {

uchar k; for(k=0;k<5;k++) }

{ }

discan=scan_con[k]; //控制位送P2口 DiSdata=dis_7[display[k]]; //数据位送P0口 if (k==3){DIN=1;} else

DIN=0; //小数点显示

delay_us(150);

38

电子科学综合设计

//

void delay(void) //延时函数 { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();

} //

void i_start(void) // 开始 { Sda=1; Scl=1; delay(); Sda=0; delay(); Scl=0; } //

void i_stop(void) // 终止 { Sda=0; Scl=1; delay(); Sda=1; delay(); Scl=0; Sda=0; } //

bit i_clock(void) //应答信号 { bit sample; Scl=1; delay();

sample=Sda;

39

电子科学综合设计

_nop_(); _nop_(); Scl=0; delay(); return(sample);

} //

void i_ack(void) { Sda=0; i_clock(); Sda=1;

} //

bit i_send(uchar i_data) // 发送 { uchar i; for(i=0;i<8;i++) { Sda=(bit)(i_data & 0x80); i_data=i_data<<1;

i_clock();

} Sda=1;

return(~i_clock()); } //

uchar i_receive(void) //I2C接收 { uchar i_data=0; uchar i; for(i=0;i<8;i++) { i_data<<=1; Scl=0;delay(); Scl=1;delay() ; i_data|=Sda;

}

40

电子科学综合设计

} //

Scl=0; delay(); return(i_data);

bit start_temperature_T(unsigned char d) //开始转换命令 { { } { } } //

bit read_temperature_T(unsigned char *p,unsigned char d) {

unsigned char t1,t2; t1=DD[d]; t2=DD[d]+0x01; i_start();

i_stop(); delay(); return(0);

else

if(i_send(0xee)) { } else { }

i_stop(); delay(); return(0); i_stop(); delay(); return(1);

uchar t1; t1=DD[d]; i_start(); if(i_send(t1))

41

电子科学综合设计

if(i_send(t1)) { if(i_send(0xaa)) { i_start(); if(i_send(t2)) { *(p+1)=i_receive(); } else {

} }

i_ack(); *p=i_receive(); i_stop(); delay(); i_send(t1); i_send(0x22); delay(); return(1);

} else { i_stop(); delay(); return(0);

}

} else { i_stop(); delay(); return(0); }

i_stop(); delay(); return(0); 42

电子科学综合设计

bit ds1621(unsigned char d) { unsigned char t1; t1=DD[d]; i_start(); if(i_send(t1)) { } else

{

} } //

if(i_send(0xac)) { i_start(); if(i_send(0x0a)) { i_stop(); delay(); return(1);

} else { i_stop(); delay(); return(0); }

} else { i_stop(); delay(); return(0); }

i_stop(); delay(); return(0);

43

电子科学综合设计

void chuli_temp(unsigned char d) { if(t) else else

f=0;

if((datah&0x80)!=0) {f=1; display[1]=10; datah=datah+1; datah=~datah; datah=datah+2; //修改 display[2]=((datah/10)); display[3]=datah; if((datal&0x80)==0x80) else } else {

display[1]=datah/100; display[2]=((datah/10)); display[3]=datah; display[4]=0; display[4]=5; alarm2=0;

display[0]=d;

alarm1=0;

alarm2=1; //温度高于80时,D2亮

if(datah>80)

{read_temperature_T(dath,d);f=0;} delay_us(20); }

datah=dath[1];datal=dath[0];

alarm1=1;

unsigned char datah,f=1,datal,t; while(f)

{t=start_temperature_T(d);

if(datah<20) //温度低于20时,D1亮

44

电子科学综合设计

{ } }

}

if((datal&0x80)==0x80) else

display[4]=0; display[4]=5;

if(!display[1]) //符号位显示判断 { }

if(f==1)display[1]=0x0b; //负温度时最高位显示\

display[1]=0x0a; //最高位为0时不显示 if(!display[2])

display[2]=0x0a;

if(f) {display[2]=0x0b;f=2;} //次高位为0时不显示

void ex_int0() interrupt 0 { } //

void ex_int1() interrupt 2 { } //

main() //主函数 {

uchar d=0,t4=1;

DiSdata=0xff; //初始化端口 discan=0xff; alarm1=0; EA=1; EX0=1; EA=0; ff1=1; ff2=0; EA=1; ff2=1; ff1=0;

45

电子科学综合设计

{ }

EX1=1; IT0=1;IT1=1;

for(h=0;h<5;h++) //开机显示\

display[h]=0;

scan(); delay_us(3); for(d=0;d<3;d++) { { }

4.仿真结果与结果分析

}

} scan();

t3=t3+ff2; if(t3==3) ff2=0;

t3=0;

chuli_temp(t3);

} if(ff2)

chuli_temp(d); for(h=0;h<100;h++) d++; if(d==3)

d=0; scan();

{ ds1621(d);} d=0; {

if(ff1)

while(1)

46

电子科学综合设计

不断调整三路DS1621的温度值,发现LED显示器上的数值和DS1621屏幕上的标准值相差无几,在误差允许的范围之内。当某一路的温度低于20°时,ledD1发光,当某一路的温度高于80°时,ledD2发光,表示告警信息。

六、课程设计小结

我在这一次综合设计过程中,很是受益匪浅。通过对自己在大学四年时间里所学的知识的回顾,并充分发挥对所学知识的理解和对课程设计的思考及书面表达能力,最终完成了。这为自己今后进一步深化学习,积累了一定宝贵的经验。

想课设第一天,我们做点电脑前,不知道自己能干点什么,对于指导老师的讲解也是云里雾里的。因为头一回接触Proteus和Keil这两个软件。但是我相信,只要自己用心了,没有办不成的事。于是,我静下心来,仔细研究老师下发的题目。我珍惜每一次的上机机会,勤加练习,课下积极研究手册和相关书籍。两天过后,才算有点眉目了。到这时心里才算稍微安稳了一些,再加上以前学过名为Protel的电路设计软件,所以我的自信心加强了。

在这次设计过程中,体现出自己单独设计电路的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。

通过这次课程设计我发现,只有理论水平提高了;才能够将课本知识与实践相整合,

47

电子科学综合设计

理论知识服务于教学实践,以增强自己的动手能力。这个实验十分有意义我获得很深刻的经验。通过这次课程设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性,,也从中得知了很多书本上无法得知的知识。

我们的学习不但要立足于书本,以解决理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,解决问题即课程研究,学生自己就是一个专家,通过自己的手来解决问题比用脑子解决问题更加深刻。学习就应该采取理论与实践结合的方式,理论的问题,也就是实践性的课题。这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的能力。

48

本文来源:https://www.bwwdw.com/article/37gp.html

Top