单片机时钟秒表代码文档格式.docx

上传人:b****1 文档编号:13697924 上传时间:2022-10-12 格式:DOCX 页数:9 大小:23.45KB
下载 相关 举报
单片机时钟秒表代码文档格式.docx_第1页
第1页 / 共9页
单片机时钟秒表代码文档格式.docx_第2页
第2页 / 共9页
单片机时钟秒表代码文档格式.docx_第3页
第3页 / 共9页
单片机时钟秒表代码文档格式.docx_第4页
第4页 / 共9页
单片机时钟秒表代码文档格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

单片机时钟秒表代码文档格式.docx

《单片机时钟秒表代码文档格式.docx》由会员分享,可在线阅读,更多相关《单片机时钟秒表代码文档格式.docx(9页珍藏版)》请在冰豆网上搜索。

单片机时钟秒表代码文档格式.docx

sbitkey4=P1A3;

uintmin,sec,tcnt,ge,shi,bai,qian;

uchara=0;

ucharflag=O;

ucharcodetable[]={

0xC0,0xF9,0xA4,0xB0,

0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

voiddelay()

{;

;

}

voiddelayms(uintz)

{

uintx,y;

for(x=z;

x>

0;

x__)

for(y=110;

y>

y--);

}

voidstart()//开始信号:

scl为高电平期间,sda发生负跳变

sda=1;

delay();

scl=1;

sda=0;

voidstop()//停止信号:

scl为高电平,sda发生正跳变

voidrespons()

//应答信号:

scl为高电平期间,sda被接受设备拉为低电平,最后//scl置0

uchari;

while((sda==1)&

&

(i<

255))

i++;

scl=0;

/*写字节数据:

将8位数据通过左移到CY(进位),然后赋值给数据线SDA每发送一位,scl出现正跳变,发送完数据后,需要将scl置0,sda置1*/

voidwrite_byte(uchardate)

uchari,temp;

temp=date;

for(i=0;

i<

8;

i++)

temp=temp<

<

1;

sda=CY;

/*读字节数据:

将数据一位一位从sda中获取,每读取一位scl出现负跳变通过变量k将8位数据整合为1个字节数据,读数据前,先将scl置0,sda置

1*/ucharread_byte()

uchari,k;

k=(k<

1)|sda;

returnk;

//数码管显示程序

voiddisplay(ucharqian,ucharbai,ucharshi,ucharge)

P0=table[ge];

dula=1;

dula=0;

P0=0x08;

wela=1;

wela=0;

delayms(l);

P0=table[shi];

dula=1;

P0=0x04;

delayms

(1);

P0=table[bai];

P0=0x02;

wela=1;

wela=0;

P0=table[qian];

P0=0x01;

delayms

(1);

//判断按键

voidkeyscan()

MOTOR_CS=0;

LED_CS=O;

if(key1==0)

消抖

delayms(IO);

//if(key1==O)

sec=0;

min=0;

while(!

key1);

if(key2==0)

delayms(10);

TR0=1;

key2);

if(key3==0)

TR0=0;

key3);

if(key4==0)

sec=sec+1;

key4);

voidled()

LED_CS=1;

P0=0x00;

delayms(250);

P0=0xff;

LED_CS=0;

voidbeep()

MOTOR_CS=1;

P0=0x3f;

P0=0x7f;

voidmain()

LED_CS=0;

sec=read_add

(2);

//读出保存的数据赋于sec

TMOD=0x01;

//定时器工作在方式1

ET0=1;

//打开定时器、计数器0中断允许位

EA=1;

//打开全局中断

//TR0=0;

TH0=(65536-50000)/256;

//对TH0TL0赋值

TL0=(65536-50000)%256;

//使定时器0.05秒中断一次

while

(1)

shi=sec/10;

ge=sec%10;

bai=min%10;

qian=min/10;

display(qian,bai,shi,ge);

定时中断服务函数

keyscan();

if(write==1)

//

write=0;

write_add(2,sec);

voidt0()interrupt1//

判断计时器是否计时一秒

置零

//在24c02的地址2中写入数据sec

//对THOTLO赋值

//重装计数初值

tcnt++;

//每过50mstent加一if(tcnt==20)//计满20次(1秒)时

tcnt=0;

//重新再计

sec++;

write=1;

//1秒写一次24C02

if(sec==60)//定时60秒,再从零开始计时

led();

beep();

min++;

if(min==60)〃是否满1h{

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

当前位置:首页 > 解决方案 > 学习计划

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

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