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

上传人:laozhun 文档编号:4147801 上传时间:2023-04-07 格式:DOC 页数:48 大小:1.02MB
返回 下载 相关 举报
南邮综合设计报告(课程设计)proteus和Keil.doc_第1页
第1页 / 共48页
南邮综合设计报告(课程设计)proteus和Keil.doc_第2页
第2页 / 共48页
南邮综合设计报告(课程设计)proteus和Keil.doc_第3页
第3页 / 共48页
南邮综合设计报告(课程设计)proteus和Keil.doc_第4页
第4页 / 共48页
南邮综合设计报告(课程设计)proteus和Keil.doc_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《南邮综合设计报告(课程设计)proteus和Keil.doc》由会员分享,可在线阅读,更多相关《南邮综合设计报告(课程设计)proteus和Keil.doc(48页珍藏版)》请在三一办公上搜索。

1、目录一、课题1:数码管学号滚动显示41.课题任务要求及技术指标41.1设计任务41.2设计要求42.课题分析及设计思路42.1功能分析42.2实现思路42.3难点描述43.系统设计(建模)43.1硬件框图43.2软件框图43.3电路图53.4元件清单53.5源程序64.仿真结果与结果分析7二、课题2:LED8彩灯花样显示71.课题任务要求及技术指标71.1设计任务71.2设计要求72.课题分析及设计思路72.1功能分析82.3难点描述83.系统设计(建模)83.1硬件框图83.2软件框图83.3电路图83.4元件清单93.5源程序94.仿真结果与结果分析10三、课题3:数字电子钟111.课题任

2、务要求及技术指标111.1设计任务111.2设计要求112.课题分析及设计思路112.1功能分析112.2实现思路122.3难点描述123.系统设计(建模)123.1硬件设计123.2软件设计流程图133.3电路图143.4元件清单153.5源程序154.仿真结果与结果分析19四、课题6:函数发生器201.课题任务要求及技术指标201.1设计任务201.2设计要求202.课题分析及设计思路202.1功能分析202.2实现思路202.3难点描述203.系统设计(建模)203.1硬件设计203.2软件流程图213.3电路图263.4源程序264.仿真结果与结果分析32五、课题12:简易温度计341

3、.课题任务要求及技术指标341.1设计任务341.2设计要求342.课题分析及设计思路342.1功能分析342.2实现思路342.3难点描述343.系统设计(建模)343.1硬件设计343.2软件流程图353.3电路图373.4源程序374.仿真结果与结果分析46六、课程设计小结47一、课题1:数码管学号滚动显示1.课题任务要求及技术指标1.1设计任务:要求学生在六个数码管滚动显示自己的学号(六位),每隔一定时间循环移位一次,学号为奇数则左移,学号为偶数则右移。间隔时间可由开关选择1秒,2秒,3秒和4秒。1.2设计要求:(1)给出正确的原理图;(2)给出正确的程序,并结合原理图给出相应结果。2

4、.课题分析及设计思路2.1功能分析:数码管滚动显示学号,可控制间隔时间。2.2实现思路:1、动态数码显示技术;如何进行动态扫描,由于一次只能让一个数码管显示,因此,要显示6位的数据,必须经过让数码管一个一个轮流显示才可以,同时每个数码管显式的时间大约在1ms到4ms之间,所以为了保证正确显示,必须每隔1ms,就得刷新一个数码管。而这刷新时间我们采用单片机的定时/计数器来控制,每定时1ms对数码管刷新一次。2、在进行数码显示的时候,要对显示单元开辟6个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。2.3难点描述:对延时的精度要求比较高。3.系统设计(建模)3.1硬件框图键盘复位电 路STC8

5、9C51数码管显示震荡电 路3.2软件框图开 始数码管显示学号读取键值根据键值命令数码管延时滚动执行结束3.3电路图3.4元件清单器材规格数量单片机AT89C511数码管7SEG-MPX6-CA-BLUE1按键Button2晶振12MHz1瓷片电容22pF2电解电容10uF1电阻2202电阻10K93.5源程序#include #define uint unsigned int #define uchar unsigned charuchar code DIS_SEG7=0xc0,0xa4,0xc0,0xa4,0xc0,0xf9;/设置学号,共阳字形码uchar code DIS_BIT6=0

6、x3e,0x3d,0x3b,0x37,0x2f,0x1f;/六位数码管位选sbit k1=P10;sbit k2=P11;void delay1ms(uint i) uint j;while(i-) for(j = 0; j 110; j+); 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_SEG7DISPcnt;P2 = DIS_BITcn

7、t;if(k1=1&k2=1)delay1ms(1);elseif(k1=0&k2=1)delay1ms(2);elseif(k1=1&k2=0)delay1ms(3);elseif(k1=0&k2=0)delay1ms(4);ttt = DISP0;DISP0 = DISP1;DISP1 = DISP2;DISP2 = DISP3;DISP3 = DISP4;DISP4 = DISP5;DISP5 = ttt; 4.仿真结果与结果分析当按键K1、K2弹起时,学号延时1s滚动;当K1按下,K2弹起时,学号延时2s滚动;当K1弹起,K2按下时,学号延时3s滚动;当K1、K2按下时,学号延时4s滚

8、动。二、课题2:LED8彩灯花样显示1.课题任务要求及技术指标1.1设计任务:要求学生设计出LED8彩灯在两个拨码开关的控制下每隔1秒,2秒,3秒和4秒间隔点亮。1.2设计要求:(1)给出正确的原理图;(2)给出正确的程序,并结合原理图给出相应结果。2.课题分析及设计思路2.1功能分析:彩灯流水显示,间隔时间可控。2.2实现思路:当51单片机的P2口有高电平输出时,相应的发光二极管就会点亮。应用这一原理我们可以容易的点亮一个数码管,例如令P2口输出0000 0001时D1就会点亮。若再把0000 0001向左循环一位,利用P2口输出,就会点亮D2。在发光二极管两次点亮的间隔中加延时程序,让每次

9、点亮停留一段时间,像这样人眼就可以看到“流水” 的现象。2.3难点描述: 移位与延时之间的关联。3.系统设计(建模)3.1硬件框图键盘复位电 路STC89C51流水灯电 路震荡电 路3.2软件框图开 始数码管显示学号读取键值根据键值命令数码管延时滚动执行结束 3.3电路图3.4元件清单器材规格数量单片机AT89C511发光二极管蓝+红+黄+绿2播码开关DIPSW_21晶振11.0592MHz1瓷片电容22pF2电解电容10uF1电阻2208电阻10K13.5源程序#include #include #define uchar unsigned char #define uint unsigne

10、d int sbit k1=P10;sbit k2=P11;/延时void DelayMS(uint x) uchar i; while(x-) for(i=0;i120;i+); /主程序void main() uchar i; P2=0x80; while(1) for(i=0;i7;i+) P2=_crol_(P2,1); /P2 的值向左循环移动if(k1=1&k2=1)DelayMS(400);elseif(k1=0&k2=1)DelayMS(800);elseif(k1=1&k2=0)DelayMS(1200);elseif(k1=0&k2=0)DelayMS(1600); 4.仿

11、真结果与结果分析启动程序,二极管由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秒

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

13、。2.3难点描述:按键校对时间时容易抖动,抖动问题不解决就会引起对闭合键的识别。3.系统设计(建模)3.1硬件设计(1)最小系统设计单片机的最小系统是由电源、复位、晶振、/EA=1组成(2)数码管显示电路数码管使用条件:a、段及小数点上加限流电阻 b、使用电压:段:根据发光颜色决定; 小数点:根据发光颜色决定。(3)键盘控制电路当用手按下一个键时,如图3-8所示,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也回会出现类似的情况。这就是抖动。抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。很容易想到,抖动问题不解决就会引起对闭合键的识别。用软件

14、方法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,这之后,在读入键盘码。3.2软件设计流程图N24小时到?分单元清零,时单元加1NNNYY时单元清零时间显示中断返回开始一秒时间到?60秒时间到?60分钟到?秒单元加1秒单元清零,分单元加1YY3.3电路图3.4元件清单器材规格数量单片机AT89C511数码管7SEG-MPX8-CC-BLUE1按键Button3晶振11.0592MHz1瓷片电容22pF2电解电容10uF1电阻10K83.5源程序#include sbit ksec=P30; sbit kmin=P31; sbit khour=P32; unsigned cha

15、r 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 table10=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)%256; EA=1;ET

16、0=1;TR0=1; while(1) display(); keyscan(); void delay(unsigned int z) unsigned int x,y; for(x=z;x0;x-) for(y=110;y0;y-);/定时器中断程序void time0()interrupt 1 num+; TH0=(65536-50000)/256; TL0=(65536-50000)%256; /LED显示程序void display() if(num=20) num=0; sec+; if(sec=60) sec=0; min+; if(min=60) min=0; hour+; i

17、f(hour=24) hour=0; min=0; sec=0; secge=sec%10; secshi=sec/10; minge=min%10; minshi=min/10;hourge=hour%10; hourshi=hour/10; P2=0xfe; P0=tablesecge; delay(5); P2=0xfd; P0=tablesecshi;delay(5); P2=0xfb; P0=0x40; delay(5); P2=0xf7; P0=tableminge; delay(5); P2=0xef; P0=tableminshi; delay(5); P2=0xdf;P0=0

18、x40; delay(5); P2=0xbf; P0=tablehourge;delay(5); P2=0x7f; P0=tablehourshi; 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(); if(khour=0) delay(10);if(khou

19、r=0) hour+; if(hour=24) hour=0; while(khour=0) display(); 4.仿真结果与结果分析走时:默认为走时状态,按24小时制分别显示“时时-分分-秒秒”,有2个“-”动态显示,时间会按实际时间以秒为最少单位变化。走时调整:按S对秒进行调整,按一下加一秒;按M对分进行调整,按一下加一分;按H对时进行调整,按一下加一小时,从而达到快速设定时间的目的。四、课题6:函数发生器1.课题任务要求及技术指标1.1设计任务:采用数字合成技术和D/A转换器件,实现多种信号波形的输出,设计一台实用的函数信号发生器。1.2设计要求:(1)给出正确的原理图;(2)给出正

20、确的程序,并结合原理图给出相应结果。2.课题分析及设计思路2.1功能分析:系统能产生方波、锯齿及正弦信号;能提供信号的频率的显示,能改变频率。2.2实现思路:以89C51为核心,结合DAC0832实现程序控制产生正弦波、锯齿波及方波等常用的低频信号。可以通过键盘选择波形及增减频率。2.3难点描述:波形的产生,数模转换3.系统设计(建模)3.1硬件设计(1)放大电路DAC0832与反相比例放大器相连,实现电流到电压的转换,因此输出模拟信号的极性与参考电压的极性相反,数字量与模拟量的转换关系为 若D/A转换器输出为双极性,如图3-6所示。运算放大器B的作用是把运算放大器A的单向输出电压转换成双向输

21、出电压。其原理是将B的反向输入端通过电阻R2与参考电压VREF相连,VREF经R2向B提供一个偏流I1,其电流方向与I2相反,因此运算放大器B的输入电流为I1、I2的代数和。则D/A转换器的总输出电压为: 。 因R5= R6=2 R7,所以。(2)显示模块 1602液晶器件 3.2软件流程图(1)主程序流程图主程序开始 开转换器的DAC寄存器关闭输入输入寄存器初始显示子程序初始waveform=0设置定时器0和外部中断While(1)循环等待主程序主要设置了D/A转换器件DAC0832的工作模式,定义了DAC0832数据端口。调用了显示初始子程序,设置了定时器工作模式及定时中断和外部中断。(2

22、)定时中断程序流程图定时器中断程序开始Waveform=2Waveform=2设置TH,TL寄存器Waveform=0否Waveform=1是正弦波输出子程序否是锯齿波输出子程序方波输出子程序返回定时中断的作用是用来改变相应波形的频率,通过改变TH,TL的值就可以改变定时时间,从而改变相应波形的频率。Waveform的值代表不同的波形,Waveform=0代表正弦波,Waveform=1代表锯齿波,Waveform=2代表方波,根据Waveform值调用对应的波形输出子程序。(3)外部中断按键子程序流程图外部中断程序开始关总中断P3.6=0获取P3口高四位P3.4=0否P3.5=0Wavefo

23、rm+是否是P3.6=06.6是wavefreqwaveform+wavefreqwaveform- 设定T_temp取值方式求得当前频率值显示当前率值及对应的波形形式开总中断与定时器中断 返回外部中断是由按键引起的P3.2引脚下降沿触发的,波形切换、频率增减都是通过外部中断和定时中断相结合完成的,外部中断程序中只是改变了相应的参数或中间值(如波形形式waveform及相应波形频率wavefreqwaveform和定时器0的定时初值寄存器的中间值T_temp)另外外部中断程序还对波形的频率做了数据处理并送到液晶屏显示。(4)正弦波子程序流程图正弦波子程序DAdate=sine_tabWavec

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

25、2输入寄存器Wavecount=0关DAC0832输入寄存器返回三角波的产生方法以正弦波类似都是通过取点来产生的,本方案取了64个点,全部存放在sawtooth_tabWavecount中。(6)方波子程序流程图方波子程序 Judge=judgejudge=1否 DAdate=0xff 是DAdate=0x00开DAC0832输入寄存器关DAC0832输入寄存器返回(7)初始显示子程序流程图初始显示子程序方波子程序初始化LCD在第一行显示select wave在第二行显示press No.1 key!返回方波子程序3.3电路图3.4源程序#include#define uchar unsign

26、ed char#define uint unsigned int#define DAdata P0sbit DA_S1= P20;sbit DA_S2= P21; sbit key= P32;uchar wavecount; uchar THtemp,TLtemp;uchar judge=1; uchar waveform; uchar code freq_unit3=10,50,200;uchar idata wavefreq3=1,1,1; uchar code lcd_hang1=Sine Wave sawtooth Wave Square Wave Select Wave: press

27、 No.1 key! ;uchar idata lcd_hang216=f= Hz ;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 waveTL= 0x79,0x3d,0x7e,0x9e,0xbe,0xbf,0xc8,0xcf,0xd4,0xd9, /正弦波频率调整中间值0xe8,0x

28、f4,0xf8,0x7a,0xc7,0xfc,0x23,0x3d,0x53,0x64,/锯齿波频率调整中间值0x3c,0x1e,0x8f,0x32,0xc7,0x63,0xb1,0xd8,0xec,0xf6; /方波频率调整中间值 uchar code sawtooth_tab= 0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c,0x20,0x24,0x28,0x2c,0x30,0x34,0x38,0x3c,0x40,0x44,0x48,0x4c,0x50,0x54,0x58,0x5c,0x60,0x64,0x68,0x6c,0x70,0x74,0x78,0x7c

29、,0x80,0x84,0x88,0x8c,0x90,0x94,0x98,0x9c,0xa0,0xa4,0xa8,0xac,0xb0,0xb4,0xb8,0xbc,0xc0,0xc4,0xc8,0xcc,0xd0,0xd4,0xd8,0xdc,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc,; uchar code sine_tab256=0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2

30、,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

31、,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,0x5

32、5,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,0

33、x04,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; void delay(uchar z) uint x,y

34、;for(x=z;x0;x-)for(y=110;y0;y-);/*void sawtooth_out()uchar i; for(i=255;i0;i-) DAdata=i; DA_S1=0; DA_S1=1; */void sawtooth_out() DAdata=sawtooth_tabwavecount+;if(wavecount64) wavecount=0;DA_S1=0;DA_S1=1; void sine_out() DAdata=sine_tabwavecount+;DA_S1=0; DA_S1=1; void square_out() judge=judge; if(ju

35、dge=1) DAdata=0xff;else DAdata=0x00;DA_S1=0; DA_S1=1; /*1602液晶的相关函数*/#define lcd_ports P1sbit rs=P22;sbit rw=P23;sbit lcden=P24;void write_com(uchar com)rs=0;/置零,表示写指令lcden=0;lcd_ports=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)rs=1;/置1,表示写数据(在指令所指的地方写数据)lcden=0;lcd_ports=date;

36、delay(5);lcden=1;delay(5);lcden=0;void disp_lcd(uchar addr,uchar *temp1)uchar num;write_com(addr);delay(1); /延时一会儿?for(num=0;num16;num+)write_date(temp1num);/或者这样写write_date(*(temp1+num);delay(1);void init_lcd()lcden=0; rw=0; /初始化一定要设置为零,表示写数据write_com(0x38); /使液晶显示点阵,为下面做准备write_com(0x0c); /初始设置wri

37、te_com(0x06); /初始设置write_com(0x01); /清零write_com(0x80); /使指针指向第一行第一格 disp_lcd(0x80,&lcd_hang13*16); /在第一行显示 disp_lcd(0xc0,&lcd_hang14*16); /在第二行显示/*1602液晶函数声明结束*/void main() DA_S2=0; DAdata=0;DA_S1=1; init_lcd(); waveform=0;TMOD=0x01; /设置定时器0方式1为16位工作方式IT0=1; /设置外部中断0为下降沿触发ET0=1; /开定时器中断EX0=1; EA=1;while(1) void timer0() interrupt 1TH0=THtemp;TL0=TLtemp;if(waveform=0) sine_out();else if(waveform=1) sawtooth_out();else if(waveform=2) square_out();void key_int0() interrupt 0

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号