好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

单片机实验秒表.doc

11页
  • 卖家[上传人]:博****1
  • 文档编号:443689496
  • 上传时间:2024-02-18
  • 文档格式:DOC
  • 文档大小:448.50KB
  • / 11 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 简易秒表制作1 子情境容:制作简易秒表,利用按键构成键盘实现秒表的启动、停止与复 位,利用 LED 数码管显示时间2 子情境目标:(1)通过简易秒表的制作,进一步熟悉 LED 数码管与单片机的接口电路(2)学习定时 /计数器、中断技术的综合运用并会使用简易键盘3 知识点独立式按键的使用:图 5-49 为按键与单片机的连接图机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有 一定时间的触点机械抖动,然后其触点才稳定下来其抖动过程如图 5-50 所示,抖动时间的长短与开关的机械特性有关,一般为 5~10ms在触点抖动期间检测按键的通与断状态,可能导致判断出错即按键 一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的为 了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬 件、软件两方面予以考虑本子情境中采用软件去抖图按键与单片机连接图4 任务步骤4.1 步骤一: PROTEUS电路设计,简易秒表的原理图如图 5- 51所示 1、选取元器件① 单片机: AT89C51② 两位共阴极蓝色数码管: 7SEG-MPX2-CC-BLUE③ 排阻: RESPACK-8④ 按钮: BUTTON2、放置元器件、放置电源和地、连线、元器件属性设置简易秒表的原理图如图 5-51 所示,整个电路设计操作都在 ISIS 平台中进行。

      与子情景 3 相似,故不详述图简易秒表的原理图4.2 步骤二:源程序设计与目标代码文件生成(1)程序流程图主程序图 5- 52 秒表流程图2)源程序设计 #include#define uint unsigned int#define uchar unsigned charsbit key1=P3^0;//定义"启动"按钮sbit key2=P3^1;//定义"停止"按钮sbit key3=P3^2;//定义"复位"按钮uchar temp,aa,shi,ge; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极数码管编码void display(uchar shi,uchar ge); //声明显示子函数void delay(uint z);//声明延时子函数void init();//声明初始化函数void main()init();//调用初始化子程序while(1){if(key1==0)//检测"启动"按钮是否按下delay(10);//延时去抖动if(key1==0)//再次检测 "启动 "按钮是否按下while(!key1);// 松手检测,若按键没有释放, key1 始终为0,那么 !key1 始终为 1,程序就一直停在此while 语句处TR0=1;//启动定时器开始工作}if(key2==0) //检测"停止 "按钮是否按下{delay(10); // 延时去抖动if(key2==0) //再次检测 "停止"按钮是否按下{while(!key2); //松手检测TR0=0; //关闭定时器}}if(key3==0) //检测 "复位"按钮是否按下{delay(10); //延时去抖动if(key3==0) //再次检测 "复位"按钮是否按下{while(!key3); //松手检测temp=0; //将变量 temp 的值清零shi=0; //将十位清零ge=0; //将个位清零TR0=0; //关闭定时器}}display(shi,ge); // 调用显示子函数}}void delay(uint z) // 延时子函数{uint x,y; for(x=z;x>0;x--)for(y=110;y>0;y--);void display(uchar shi,uchar ge) //显示子程序{P2=0xbf;P0=table[shi];delay(10);P2=0x7f;P0=table[ge];delay(10); //使用动态扫描的方法实现数码管显示}void init() //初始化子程序{temp=0;TMOD=0x01; //使用定时器 T0 的方式 1TH0=(65536-50000)/256;TL0=(65536-50000)%256; //定时 50ms 中断一次EA=1; // 中断总允许ET0=1; //允许定时器 T0 中断}void timer0() interrupt 1 {TH0=(65536-50000)/256;//重新赋初值 TL0=(65536-50000)%256;aa++;//中断一次变量 aa 的值加 1if(aa==20)//中断 20 次后,定时时间为 20*50ms=1000ms=1s,将变量 temp 的值加 1aa=0;temp++;if(temp==60) //秒表到达 60s 后回零{temp=0;}shi=temp%100/10;ge=temp%10; //分离个位和十位}}4.3 步骤三: PROTEUS 仿真加载目标代码文件,双击编辑窗口的 AT89C51 器件,在弹出属性编辑对话 框 Program File 一栏中单击打开按钮,出现文件浏览对话框,找到 miaobiao.hex 文件,单击“打开”按钮,完成添加文件。

      单击按钮,启动仿真,仿真运行片段 如图所示按下“启动”按钮后,秒表开始计时,如图所示 按下“停止”按钮,秒表停止计时 按下“复位”按钮,秒表回到最初始的状态,如图所示图按下“启动”按钮后秒表开始计时图按下“复位”按钮后,秒表回到最初始的状态5 扩展练习 此子情境设计的秒表只能显示两位整数, 如果要记录 110跨栏 12:88 秒的成 绩,则必须再增加两位数码管来显示小数位想想硬件和软件应该做如何改动。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.