欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOC文档下载  

    数码管显示AD转换的电压值数码管显示秒表.doc

    • 资源ID:16729       资源大小:258.98KB        全文页数:12页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

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

    数码管显示AD转换的电压值数码管显示秒表.doc

    一、 实验室名称: 单片机技术综合实验室二、实验项目名称:数码管显示A/D转换的电压值&数码管显示秒表三、 实验学时: 12四、 实验目的与任务:1、 熟悉系统设计与实现原理2、 掌握KEIL C51的基本使用方法3、 熟悉实验板的应用4、 连接电路,编程调试,实现各部分的功能5、 完成系统软件的编写与调试五、 实验器材1、 PC机一台2、 实验板一块六、 实验原理、步骤及容试验要求:数码管的第1位显示任务号1,第3位到第5位显示、A/D转换的电压值,可调节电压,第7、8位显示两位学号;数码管第2位和第6位显示"-"号;按按键key1进行切换,此时数码管第1位显示任务号2,第7、8位显示循环倒计时的秒表,围为08秒到01秒后,再过01秒,秒表又显示为08秒;<单片机系统中利用定时器/计数器计数秒表的值:利用定时器T0延时1秒进行计数。>,其它位显示不变,按按键key2时,秒表停止计数,再按按键key2时,秒表继续计数,按key1键,又回到任务1的显示状态。当电压值大于2伏时,按按键不起作用。1、 硬件设计可打印2、 各部分硬件原理可打印 数码管动态扫描TLS549ADC工作时序图3、 软件设计 开始 初始化Key1/2是否按下 2按下 1按下 1位显示任务号2,第7、8位显示循环倒计时的秒表,范围为08秒到01秒后,再过01秒,秒表又显示为08秒,其它位显示不变。秒表停止计数Key1/2是否按下 1按下 1按下 2按下继续计数继续任务一开始计数1按下Key1/2是否按下2按下开始计数思考题: 按键改用外部中断模式,电路如何修改画示意图?程序如何修改,写出中断服务程序。答:将KEY1与KEY2键通过跳线分别接到INT0与INT1接口上。   开启中断:SysInit<> EA=0; /禁止总中断 EX1=1; /使能/INT1 中断 EX0=1; /使能/INT0 中断 EA1; /使能总中断 中断服务程序: void INT0SVC <> interrupt 0 if<cnt<=31>t+; void INT1SVC <> interrupt 2 if<cnt>=17>t-; 七、 总结及心得体会1.利用单片机开发板上丰富的资源可以实现一个有一定功能的系统。 2.懂得利用中断可以使单片机的效率提高。八、 对本实验过程及方法、手段的改进建议实在是没有,都挺好的。九、 附录1、 程序/*利用TLC549 A/D转换器实现电压测量与显示*/#include <reg51.h>/包含8051的SFR寄存器定义头文件#include <absacc.h>/扩展并行接口所需的绝对地址访问库函数#define LED_digXBYTE0x9000/8位数码管显示器的位选输出控制#define LED_seg XBYTE0x8000/8位数码管显示器的段码字形码输出控制#define KEY_IN XBYTE0x8000/定义TLC549操作接口sbit ADC_CS = P17;sbit ADC_DATA = P16;sbit ADC_CLK = P15;code unsigned char disp_seg=/显示段码0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5f,0x79,0x71,0x40,0x00,0xff; / 0 1 2 3 4 5 6 7 8 9 a b c d e f - blank,全亮unsigned char DispBuf8;/定义显示缓冲区由定时中断程序自动扫描unsigned char key_value,flag;/定义键盘返回值,任务标志unsigned char y1000,y100,y10,y;/定义秒表的个位,十分位,百分位,千分位unsigned short mbiao;/定义秒表计数单元void delay<int ms>/延时大约1msunsigned char ReadAdc<void>/读取A/D转换结果void AdcInit<void>/初始化ADC接口void key_scan<void>void main<>unsigned char i=0;unsigned char volt, x100, x10, x;TMOD &= 0x0f;TMOD |= 0x10;TH1 = 0xFC;TL1 = 0x66;TR1 = 1;ET1 = 1; TMOD &= 0xf0;TMOD |= 0x01;TH0 = 0xFC;TL0 = 0x66;TR0 = 1;ET0 = 1;EA =1;AdcInit<> for<i=0; i<8; i+> DispBufi = 17;/全部8位显示灭 y1000=9; y100=9; y10=9; y=9; mbiao=9999; flag=0; while<1> while<flag =0>volt = ReadAdc<>/得到A/D转换结果的数字量0x000xffvolt = volt * 250/256;/转换成电压值,其中Vr=2.5Vx100 = volt/100;x10 = <volt - x100*100>/10;x = <volt - x100*100>%10;DispBuf0 = 4; DispBuf1 = 2;DispBuf2 = 16;DispBuf3 = x;DispBuf4 = x10; DispBuf5 = x100;DispBuf6 = 16;DispBuf7 = 1; delay<100>if<key_value = 8&&volt<=200>flag = 1;mbiao=9000;while<key_value = 8>while<flag=1>TR0=1; volt = ReadAdc<>volt = volt * 250/256;/转换成电压值,其中Vr=2.5Vx100 = volt/100;x10 = <volt - x100*100>/10;x = <volt - x100*100>%10;DispBuf0 = y1000; DispBuf1 = 0;DispBuf2 = 16;DispBuf3 = x;DispBuf4 = x10; DispBuf5 = x100;DispBuf6=16;DispBuf7=2; if<key_value = 8&&volt<=200>flag = 0;while<key_value = 8>else if<key_value = 7&&volt<=200>flag = 2;while<key_value = 7>while<flag=2>TR0=!TR0; if<key_value = 7>flag = 1;while<key_value = 7> /*函数:T1INTSVC<>功能:定时器T1的中断服务函数*/void T1INTSVC<> interrupt 3code unsigned char = 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;static unsigned char n = 0;TR1 = 0;TH1 = 0xFC;TL1 = 0x66;TR1 = 1;LED_dig = 0xFF;/暂停显示if<flag=0>if<n=5>LED_seg = <disp_segDispBufn|0x80>elseLED_seg = disp_segDispBufn;/更新扫描数据 if<flag=1>if<n=5>LED_seg = <disp_segDispBufn|0x80>elseif<n=4>LED_seg = < disp_segDispBufn >/更新扫描数据,elseLED_seg = disp_segDispBufn;/更新扫描数据 if<flag=2>LED_seg = disp_segDispBufn;/更新扫描数据 LED_dig = n;/重新显示key_scan<>n+;n &= 0x07;void delay<int ms>unsigned int i,j;for<i=0; i<ms; i+>/延时大约1ms <fosc=11.0592MHz>for<j=0; j<100; j+>/*函数:ReadAdc<>功能:读取A/D转换结果返回:8位ADC代码*/unsigned char ReadAdc<void>unsigned char d;/读取得ADC结果unsigned char n;/ADC bit位计数ADC_CS = 0;n = 5;while < -n != 0 >/模拟tsu时间n = 8;dod <<= 1;if < ADC_DATA > d = d | 0x01;/或d+;ADC_CLK = 1;ADC_CLK = 0;while < -n != 0 >ADC_CS = 1;return d;/*函数:AdcInit<>功能:初始化ADC接口*/void AdcInit<void>ADC_CS = 1;ADC_CLK = 0;ADC_DATA = 1;ReadAdc<>/空读一次,用于启动一次A/D转换过程void key_scan<void>unsigned char key_in;key_in = KEY_IN;switch<key_in>case 0xff:key_value = 0;break;case 0x01:key_value = 1;break;case 0x02:key_value = 2;break;case 0x04:key_value = 3;break;case 0x08:key_value = 4;break;case 0x10:key_value = 5;break;case 0x20:key_value = 6;break;case 0x40:key_value = 7;break;case 0x80:key_value = 8;break;default:break;/*函数:T1INTSVC<>功能:定时器T0的中断服务函数*/void T0INTSVC<> interrupt 1TR0 = 0;TH0 = 0xFC;TL0 = 0x66;TR0 = 1; if<mbiao<=9000&&TR0=1>mbiao=mbiao-1; if<mbiao=0>mbiao=9000;y1000=mbiao/1000;y100=<mbiao-y1000*1000>/100;y10=<mbiao-y1000*1000-y100*100>/10;y=<mbiao-y1000*1000-y100*100>%10;

    注意事项

    本文(数码管显示AD转换的电压值数码管显示秒表.doc)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开