基于51单片机的八位数字秒表.doc

基于51单片机的八位数字秒表.doc

ID:57573671

大小:28.00 KB

页数:5页

时间:2020-08-27

基于51单片机的八位数字秒表.doc_第1页
基于51单片机的八位数字秒表.doc_第2页
基于51单片机的八位数字秒表.doc_第3页
基于51单片机的八位数字秒表.doc_第4页
基于51单片机的八位数字秒表.doc_第5页
资源描述:

《基于51单片机的八位数字秒表.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、//基于51单片机的八位数字秒表//开发语言:C51//所选芯片:AT89S51//开发者:jnu.bluecoffee//开发日期:2009年6月18日//小弟刚刚入道,完全原创。如有转载,请注明出处。#include#include#defineDIG_NONE0xff;#defineDIG_10x7f#defineDIG_20xbf#defineDIG_30xdf#defineDIG_40xef#defineDIG_50xf7#defineDIG_60xfb#defineDIG_7

2、0xfd#defineDIG_80xfe#defineLINE0xf7//根据共阴共阳以及接法要调整typedefunsignedcharByte;typedefbitbool;sbitSTART=P3^0;sbitRESET=P3^1;Bytedatadis_digit;Bytedatamin;Bytedatasec;Bytedatamsec;booldataisStarted;Bytedatadis_digit;Bytedatadis_index;Bytedatadis_buff[8];Bytedatadis_num[8]

3、;//根据共阴共阳以及数码管接法这里要的表要调整Bytecodenumber[11]={0x28,0x7E,0xA2,0x62,0x74,0x61,0x21,0x7A,0x20,0x60,0xff};//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表Bytedis_buff[8];//显示缓冲区Bytedis_num[8];//秒计数值,BCD码Bytedis_index;bitScan_Key();voidProc_Key();voidDelayms(Bytems);voidUpdate_buff();voidM

4、sec_Increment();voidReset(void);boolGet_Key(bitkey);//有效为1voidMCU_Init(void);voidTimer0_Overflow();voidTimer1_Overflow();//sbitK1=P3^2;voidMsec_Increment()//中断里面的设置{msec+=1;if(msec==100){msec=0;sec+=1;}if(sec==60){sec=0;min+=1;}if(min==60)min=0;}voidMCU_Init(){P1=0x

5、ff;P2=0xff;TMOD=0x12;TH1=0xd8;TL1=0xf0;TH0=0x9c;TL0=0x00;////定时器1选用方式1工作,扫描周期0.01s=10ms,定时器0选用工作方式3工作,自动装入,扫描周期0.1ms=100μsReset();min=0;sec=0;msec=0;dis_digit=0x7f;//初始显示P20口数码管dis_index=0;IE=0x8a;//使能timer0,timer1中断TR0=1;TR1=0;isStarted=0;}voidReset(){min=0;sec=0;m

6、sec=0;Update_buff();}voidUpdate_buff(){dis_num[0]=min/10;dis_num[1]=min%10;dis_num[3]=sec/10;dis_num[4]=sec%10;dis_num[6]=msec/10;dis_num[7]=msec%10;//这里根据数码管的顺序进行调整dis_buff[0]=number[dis_num[7]];dis_buff[1]=number[dis_num[6]];dis_buff[2]=LINE;dis_buff[3]=number[dis

7、_num[4]];dis_buff[4]=number[dis_num[3]];dis_buff[5]=LINE;dis_buff[6]=number[dis_num[1]];dis_buff[7]=number[dis_num[0]];}boolGet_Key(bitkey)//有效为1,这里按下为低电平{if(key==0)return1;elsereturn0;}voidtimer0()interrupt1{P2=0xff;//先关闭所有数码管P1=dis_buff[dis_index];//显示代码传送到P0口P2=d

8、is_digit;//dis_digit=_cror_(dis_digit,1);//位选通值右移(P20<-P27),下次中断时选通下一位数码管//_cror_()为字符循环右移函数dis_index++;//dis_index&=0x07;//8个数码管全部扫描完一遍之后

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。