欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    工程测控课程设计 电子c082班 王柳 087774.docx

    • 资源ID:14629187       资源大小:89.28KB        全文页数:31页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    工程测控课程设计 电子c082班 王柳 087774.docx

    1、工程测控课程设计 电子c082班 王柳 087774工程测控系统课程设计使用51单片机设计软件钟、涡流称重计、光电转速计一、 实验目的:1. 掌握元器件及芯片的焊接与调试;2. 了解基于51单片机的软件钟、涡流称重计、光电转速计的工作原理;3. 熟悉掌握AT89C51系列单片微型计算机的工作原理、熟悉ADC0832的器件手册;4. 会用C语言编写时钟函数,复习用switch语句和do-while语句、for语句实现循环的方法;5. 会使用MEDWIN编译调试程序,并生成HEX,通过数据线下载到电路板上;6. 根据自己焊接的板子在程序中设置按键控制时钟的调整。7. 了解电涡流传感器用于称重的原理

    2、与方法、了解光电传感器的工作原理及其使用方法;软件钟二、 算法原理:所谓软件钟就是利用51单片机制作一个电子时钟。其算法就是以单片机的时钟为基准,记录单片机时钟脉冲的数量,当数量足够多(如脉冲为每秒6Mhz,那么记录6M个脉冲所需时间即为1秒)就可以将显示部分的“秒”位加一。加到60以后进位为“分”,”秒“位清零以后继续记录。当“分”累加为60以后进位为”时“,”分“位清零以后继续记录,当”时“位为24以后,”时“位清零并继续记录。三、 硬件原理: 显示电路:单片机外围电路(复位电路,时钟电路): 按键控制电路: 数码管驱动电路:四、 实现功能要求:使用中需要对时钟进行调整。在调整的时候需要一

    3、个按键来进入调整状态。进入调整状态以后需要一个按键来向左移动调整位置,一个按键来向右移动调整位置,一个按键来增加所选位置的数值,一个按键来减小所选位置的数值。调整完成以后还需要一个按键来 退出调整位置,恢复时钟的计数运转。以上所需按键可以根据需要合并。在调整中另外一个需要注意的问题是如何显示目前所选定调整的位置(如秒的个位或者十位,分的个位或者十位等)。可以采用是否显示数位右下的小数点或者所选需调整位是否闪烁来让操作者明确目前自己所选定的需要调整的数位。五、 设计内容:(1)硬件焊接:按照电路图焊接好各个元器件和芯片插座,注意焊接时焊点要尽量光滑,与管脚接触良好,元件的管脚弯曲处要尽量光滑,有

    4、需要区分正负极的元器件焊接时要注意不要焊反。焊接完后将元件多余的管脚用尖嘴钳剪掉,以免形成短路。(2)软件设计:1子程序设计:A. 单片机初始化程序a) 定时器T0中断服务程序B. 显示子程序C. 时钟运行计数子程序D. 时间数据送显示缓冲区子程序E. 设置时间子程序F. 时钟调整子程序G. 键值读入子程序H. 延时子程序2.实验程序清单:#pragma db oe#include #include #include #include #include #include #define uint unsigned int#define uchar unsigned char#define ul

    5、ong unsigned longvoid display(void);void initsiu(void);void delay(void);void sztz(void);void jssz(void);void setsz(void);void tzszw(uchar zj);uchar inkey(void);uchar sec,min,hour;uchar disdat6;uchar code tab=0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f;uint count;uchar set_state,xsd;sbit zsd=P10;

    6、main() uchar i; for (i=0;i2;i+) disdati= 0; /将显示缓存清零 initsiu(); /初始化单片机 set_state=0; do i=inkey(); /设置时钟 if(i=0x70) setsz(); jssz(); display(); /显示 if(sec & 0x01) /指示灯闪烁 zsd=1; else zsd=0; while(1);void display(void)/六位数码管显示程序,disdat是要显示的内容(是09的数字),xsd是在那一位显示小数点 uchar i,disa,disb,disc; disb = 0x00;

    7、/显示第n位 for (i=0;i6;i+) /共显示6个数据 disa = disdati; /显示数据 if (disa 2) disdat0=0; else if (disdat0=0) disdat0=2; else disdat0-; hour=disdat0*10+disdat1; break; case 1: /时低位调整 if (zj=0) disdat1+; if (disdat19) disdat1=0; else if (disdat0!=2&disdat1=0) disdat1=9; /else / disdat1-; else if(disdat0=2&disdat1

    8、=0) disdat1=3; else disdat1-; if(disdat0=2&disdat13) disdat1=0; hour=disdat0*10+disdat1; break; case 2: /分高位调整 if (zj=0) disdat2+; if (disdat25) disdat2=0; else if (disdat2=0) disdat2=5; else disdat2-; min=disdat2*10+disdat3; break; case 3: /分低位调整 if (zj=0) disdat3+; if (disdat39) disdat3=0; else if

    9、 (disdat3=0) disdat3=9; else disdat3-; min=disdat2*10+disdat3; break; case 4: /秒高位调整 if (zj=0) disdat4+; if (disdat45) disdat4=0; else if (disdat4=0) disdat4=5; else disdat4-; sec=disdat4*10+disdat5; break; case 5: /秒低位调整 if (zj=0) disdat5+; if (disdat59) disdat5=0; else if (disdat5=0) disdat5=9; el

    10、se disdat5-; sec=disdat4*10+disdat5; break; default: break; void delay(void) /延时程序 uchar i; for (i=0;iTR11开始计数,C/T=0-对内部计数,模式1-16位计数 TH0=0X3C; TL0=0XAF; ET0=1; /打开定时器0中断 ET1=0; /关闭定时器1中断 TR0=1; /打开计数器0 TR1=0; /关闭计数器1 EA=1; /总中断允许void inttime0(void) interrupt 1 using 1 TH0=0X3C; /50ms中断一次,20次为一秒,调整时间

    11、一次 TL0=0XAF; count+; if (count=20) count=0; sztz(); uchar inkey(void) uchar jjj,keydat; P2 = 0xff; /P2准备读入 keydat = P2; /读入键值 keydat = keydat & 0xf0; /找出四个键的值 if (keydat != 0xf0) /有键输入 _nop_(); _nop_(); jjj = P2; /再读,去抖动 jjj = jjj & 0xf0; if (jjj != keydat) keydat = 0xf0; do jjj = P2; jjj = jjj & 0x

    12、f0; /等待键松手 while (jjj != 0xf0); return (keydat); 六、 测试结果分析:本实验共设置了5个按钮,按键1设置小数点到达那位数码管的值,按键2控制小数点的位置,按键3按下后进入计时状态,到达23:59:59后数据清零为00:00:00,按键4按下后进入设置状态,按键5是复位按键。七、 遇到的问题与解决方法:问题一:如何编写时钟函数?解决方法:每60秒进一位,即一分钟;每60分钟进一位,即一小时;在函数体内用循环,在主函数中调用。编写时注意当时高位为2时,时地位最高到3,且分高位和秒高位最高为5。问题二:如何设置时间?解决方法:改变现实状态,将现在的结果

    13、放到数组中去,读取按键,设置按键对时钟进行调整,编写SWITCH语句控制按键的选择。问题三:如何解决时间变化太快?解决方法:使用一个延时函数来缓冲每一秒变化时间。八、 实验总结:通过本次实验,我对时钟函数的编写有了更深一步的掌握,复习了C语言的编程。并且可以通过自己焊接的板子来调试时钟程序,对今后的学习与研究有了很大的帮助。涡流称重计二、算法原理本项设计中用电位器的中间抽头所输出的电压模拟采集的重量数据,单片机经ADC0832的通道0输入该电压信号,并将其转换为数字信息送6位共阳8段LED显示。ADC0832的芯片接口说明: CS_ 片选使能,低电平芯片使能。 CH0 模拟输入通道0,或作为I

    14、N+/-使用。 CH1 模拟输入通道1,或作为IN+/-使用。 GND 芯片参考0 电位(地)。 DI 数据信号输入,选择通道控制。 DO 数据信号输出,转换数据输出。 CLK 芯片时钟输入。 Vcc/REF 电源输入及参考电压输入(复用)当此2 位数据为“1”、“0”时,只对CH0 进行单通道转换。当2位数据为“1”、“1”时,只对CH1进行单通道转换。当2 位数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当2 位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1 作为正输入端IN+进行输入。到第3 个脉冲的下沉之后DI端的输入电平就失去输入作

    15、用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATD0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。三、实现功能要求:使用时用5V的电压来表示200g的重量,使用通道O来输入模拟量。四、设计内容:(1)硬件焊接:根据ADC0832的接口说明焊接导线

    16、(2)软件设计:1子程序设计:A. 单片机的初始化程序B. 显示子程序C. 3.0832的转换子程序D. 采样数据换算压力子程序E. 将压力值转换为十进制数,并将每位送入显示缓冲区子程序2.实验程序清单:#include #include intrins.h#define uint unsigned int#define uchar unsigned char/ADC0832的引脚sbit ADCS =P35; /ADC0832 chip seclectsbit ADCLK =P34; /ADC0832 clock signalsbit ADDI =P33; /ADC0832 k insbit

    17、 ADDO =P33; /ADC0832 k outuchar dispbuf6;uchar code tab=0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f;uchar code tab1=0x79,0x3f,0x77;uint temp;uchar getdata; /获取ADC转换回来的值uchar e=0;void delay(void) /延时程序 uchar i; for (i=0;i201;i+) _nop_(); void display(void) /六位数码管显示程序,disdat是要显示的内容(是09的数字),xsd是在那一

    18、位显示小数点 uchar i,disa,disb,disc; disb = 0x00; /显示第n位 for (i=0;i6;i+) /共显示3个数据 if(e=0) disa = dispbufi;/显示数据 else disa = i - 3; if (disa 1)&0x1; _nop_(); _nop_(); ADCLK=0;/拉低CLK端,形成下降沿3 ADDI=1;/控制命令结束 _nop_(); _nop_(); dat=0; for(i=0;i8;i+) dat|=ADDO;/收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;/形成一次时钟脉冲 _n

    19、op_(); _nop_(); dat=1; if(i=7)dat|=ADDO; for(i=0;i8;i+) j=0; j=j|ADDO;/收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;/形成一次时钟脉冲 _nop_(); _nop_(); j=j7; ndat=ndat|j; if(i=1; ADCS=1;/拉低CS端 ADCLK=0;/拉低CLK端 ADDO=1;/拉高数据端,回到初始状态 dat=8; dat|=ndat; return(dat); /return ad kvoid main(void) /double k; unsigned int w

    20、; while(1) getdata=Adc0832(0); temp=getdata*1.0/255*500; /电压值转换,5V做为参考电压,分成256份。 dispbuf2=temp%10; /个位 dispbuf1=temp/10%10; /十位 dispbuf0=temp/100; /百位 w = temp * 1.0 /2.5;if(w=199) e=0; dispbuf5=w%10; /个位 dispbuf4=w/10%10; /十位 dispbuf3=w/100; /百位else e = 1; display(); 五、测试结果分析:此电路板实现的功能是从电位器中分出一部分电压,并将其进行A/D转换,将模拟量转换为数字量,


    注意事项

    本文(工程测控课程设计 电子c082班 王柳 087774.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开