基于51单片机的八位数字秒表.doc_第1页
基于51单片机的八位数字秒表.doc_第2页
基于51单片机的八位数字秒表.doc_第3页
基于51单片机的八位数字秒表.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/基于51单片机的八位数字秒表/开发语言:C51/所选芯片:AT89S51/开发者:jnu.bluecoffee/开发日期:2009年6月18日/小弟刚刚入道,完全原创。如有转载,请注明出处。#include #include #define DIG_NONE 0xff;#define DIG_1 0x7f#define DIG_2 0xbf#define DIG_3 0xdf#define DIG_4 0xef#define DIG_5 0xf7#define DIG_6 0xfb#define DIG_7 0xfd#define DIG_8 0xfe#define LINE 0xf7/根据共阴共阳以及接法要调整typedef unsigned char Byte;typedef bit bool;sbit START = P30;sbit RESET = P31;Byte data dis_digit;Byte data min;Byte data sec;Byte data msec;bool data isStarted;Byte data dis_digit;Byte data dis_index;Byte data dis_buff8;Byte data dis_num8;/根据共阴共阳以及数码管接法这里要的表要调整Byte code number11= 0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff;/0,1,2,3,4,5,6,7,8,9,关显示,数码管码表Byte dis_buff8; / 显示缓冲区Byte dis_num8; / 秒计数值, BCD码Byte dis_index;bit Scan_Key();void Proc_Key();void Delayms(Byte ms);void Update_buff();void Msec_Increment();void Reset(void);bool Get_Key(bit key);/有效为1void MCU_Init(void);void Timer0_Overflow();void Timer1_Overflow();/sbit K1 = P32;void Msec_Increment()/中断里面的设置msec += 1;if (msec = 100) msec = 0;sec += 1; if (sec = 60)sec = 0;min += 1;if (min = 60)min = 0;void MCU_Init()P1 = 0xff;P2 = 0xff;TMOD = 0x12;TH1 = 0xd8;TL1 = 0xf0;TH0 = 0x9c;TL0 = 0x00;/定时器1选用方式1工作,扫描周期0.01s=10ms,定时器0选用工作方式3工作,自动装入,扫描周期0.1ms=100sReset();min = 0;sec = 0;msec = 0;dis_digit = 0x7f; / 初始显示P20口数码管dis_index = 0;IE = 0x8a; / 使能timer0, timer1中断TR0 = 1;TR1 = 0;isStarted = 0;void Reset()min = 0;sec = 0;msec = 0; Update_buff();void Update_buff()dis_num0 = min / 10;dis_num1 = min % 10;dis_num3 = sec / 10;dis_num4 = sec % 10;dis_num6 = msec / 10;dis_num7 = msec % 10;/这里根据数码管的顺序进行调整dis_buff0 = numberdis_num7;dis_buff1 = numberdis_num6;dis_buff2 = LINE;dis_buff3 = numberdis_num4;dis_buff4 = numberdis_num3;dis_buff5 = LINE;dis_buff6 = numberdis_num1;dis_buff7 = numberdis_num0;bool Get_Key(bit key)/有效为1,这里按下为低电平if (key = 0)return 1;elsereturn 0;void timer0() interrupt 1P2 = 0xff; / 先关闭所有数码管P1 = dis_buffdis_index; / 显示代码传送到P0口P2 = dis_digit; / dis_digit = _cror_(dis_digit,1); / 位选通值右移(P20-P27), 下次中断时选通下一位数码管/_cror_()为字符循环右移函数 dis_index+; / dis_index &= 0x07; / 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描void timer1() interrupt 3 TH1 = 0xd8;TL1 = 0xf0;Msec_Increment();Update_buff();void delayms(unsigned char ms) / 延时子程序 unsigned char i;while(ms-)for(i = 0; i 120; i+);void main(void)bool startkey, resetkey;MCU_Init();while(1)startkey = Get_Key(START);resetkey = Get_Key(RESET);if (startkey = 1)Delayms(50);startkey = Get_Key(START);if (startkey = 1)isStarted = !isSta

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论