单片机秒表设计c语言.docx

上传人:b****5 文档编号:5130160 上传时间:2022-12-13 格式:DOCX 页数:12 大小:16.11KB
下载 相关 举报
单片机秒表设计c语言.docx_第1页
第1页 / 共12页
单片机秒表设计c语言.docx_第2页
第2页 / 共12页
单片机秒表设计c语言.docx_第3页
第3页 / 共12页
单片机秒表设计c语言.docx_第4页
第4页 / 共12页
单片机秒表设计c语言.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

单片机秒表设计c语言.docx

《单片机秒表设计c语言.docx》由会员分享,可在线阅读,更多相关《单片机秒表设计c语言.docx(12页珍藏版)》请在冰豆网上搜索。

单片机秒表设计c语言.docx

单片机秒表设计c语言

单片机秒表设计

 

专业

 

班级

 

姓名

 

学号

 

完成日期:

20年月日

实验内容及要求

要求:

1.设计一个精度为0.1s的秒表系统(显示分、秒、0.1秒);

2.有启动按钮、暂停按钮及清零按钮;

3.每到一秒钟有声音提醒功能,可通过按钮打开及关闭该提醒音。

附加功能:

1.倒计时功能。

2.数据暂停存储功能

 

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitsda=P2^0;

sbitscl=P2^1;

sbitdula=P2^6;

sbitwela=P2^7;

sbitbeep=P2^3;//蜂鸣器

ucharaddress=23;

uchartemp;

uinttime;//时间

uchara=0;

uchartt=0,beepc;//定时器溢出次数,表示蜂鸣器工作与否的变量

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};//数码管的编码

voidinit();

voiddelay(uintz);

voiddisplay(uinttime);

voiddisplay_fen(uintfen);

voiddisplay_miao(uintmiao);

voiddisplay_num(uintnum);

voidkeyscan();

voiddelay1()

{;;}

voidstart()//开始信号

{

sda=1;

delay1();

scl=1;

delay1();

sda=0;

delay1();

}

voidstop()//停止

{

sda=0;

delay1();

scl=1;

delay1();

sda=1;

delay1();

}

voidrespons()//应答

{

uchari;

scl=1;

delay1();

while((sda==1)&&(i<250))i++;

scl=0;

delay1();

}

voidinit_I2C()

{

sda=1;

delay1();

scl=1;

delay1();

}

voidwrite_byte(uchardate)

{

uchari,temp;

temp=date;

 

for(i=0;i<8;i++)

{

temp=temp<<1;

scl=0;

delay1();

sda=CY;

delay1();

scl=1;

delay1();

//scl=0;

//delay1();

}

scl=0;

delay1();

sda=1;

delay1();

}

ucharread_byte()

{

uchari,k;

scl=0;

delay1();

sda=1;

delay1();

for(i=0;i<8;i++)

{

scl=1;

delay1();

k=(k<<1)|sda;

scl=0;

delay1();

}

returnk;

}

 

voidwrite_add(ucharaddress,uchardate)

{

start();

write_byte(0xa0);

respons();

write_byte(address);

respons();

write_byte(date);

respons();

stop();

}

ucharread_add(ucharaddress)

{

uchardate;

start();

write_byte(0xa0);

respons();

write_byte(address);

respons();

start();

write_byte(0xa1);

respons();

date=read_byte();

stop();

returndate;

}

 

voidinit()

{

tt=0;//定时器0溢出次数

TMOD=0x01;//设置定时器0为工作方式1

TH0=(65536-50000)/256;//装入初值,设时钟频率12MHz

TL0=(65536-50000)%256;

EA=1;//开总中断

ET0=1;//开定时器0中断

beep=1;//蜂鸣器初始不响

beepc=0;//初始蜂鸣器控制变量为0

}

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voidtime0()interrupt1

{

TH0=(65536-50000)/256;//装入初值,设时钟频率12MHz

TL0=(65536-50000)%256;

tt++;

if(tt==2)

{

tt=0;

if(a==0)

time++;//多少个0.1

elseif(time!

=0)

time--;

elsetime=600;//当倒计时到0后开始一分钟倒计时

}

if((time%10)==0&&(time!

=0))

{

if(beepc==1)

{

beep=0;

delay(20);

beep=1;

}

}

}

voiddisplay(uinttime1)

{

ucharnum,miao,fen;//0.1秒,秒,分

uintfen1;

fen1=time1/10;

fen=fen1/60;

miao=fen1%60;

num=time1%10;

display_fen(fen);

display_miao(miao);

display_num(num);

}

voiddisplay_fen(ucharfen)

{

ucharshi,ge;

shi=fen/10;

ge=fen%10;

dula=1;

dula=1;

P0=table[shi];

dula=0;

P0=0xff;

wela=1;

P0=0xfe;

wela=0;

delay

(1);

dula=1;

P0=table[ge];

dula=0;

P0=0xff;

wela=1;

P0=0xfd;

wela=0;

delay

(1);

}

voiddisplay_miao(ucharmiao)

{

ucharshi,ge;

shi=miao/10;

ge=miao%10;

dula=1;

dula=1;

P0=table[shi];

dula=0;

P0=0xff;

wela=1;

P0=0xfb;

wela=0;

delay

(1);

dula=1;

P0=table[ge];

dula=0;

P0=0xff;

wela=1;

P0=0xf7;

wela=0;

delay

(1);

}

voiddisplay_num(ucharnum)

{

dula=1;

P0=table[num];

dula=0;

P0=0xff;

wela=1;

P0=0xef;

wela=0;

delay

(1);

}

voidkeyscan()

{

uchartime1,time2;

uintvar;

ucharb=100;

P3=0xfe;

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(5);

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xee:

TR0=1;a=0;

break;

case0xde:

TR0=0;

time1=time/256;

time2=time%256;

write_add(23,time2);

delay(100);

write_add(24,time1);

delay(100);

break;

case0xbe:

time=0;

TR0=0;

TH0=(65536-50000)/256;//装入初值,设时钟频率12MHz

TL0=(65536-50000)%256;

break;

case0x7e:

if(beepc==0)

beepc=1;

else

beepc=0;

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

 

P3=0xfd;

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

delay(5);

temp=P3;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xed:

P1=0xff;

break;

case0xdd:

TR0=1;

a=1;

break;

case0xbd:

P1=0xff;

break;

case0x7d:

P1=0xff;

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

}

}

}

 

///////////////////////////////////////////////////////////////////

voidmain()

{

init();

init_I2C();

time=read_add(24)*256+read_add(23);

while

(1)

{

keyscan();

display(time);

 

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1