找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1304|回复: 0
打印 上一主题 下一主题
收起左侧

单片机秒表的程序设计

[复制链接]
跳转到指定楼层
楼主
ID:778990 发表于 2020-6-16 13:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
typedef unsigned char uint8;
typedef unsigned int  uint16;

/*七段共阴管显示定义*/
uint8 code dispcode[ ]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

/*定义并初始化变量*/
uint8 seconde=0;// second 调整定义
uint16  mstcnt=0;//minite调整定义
sbit key1=P1^6;        //定义P1.6端口为按键1
sbit key2=P1^7;//定义p1.7端口为按键2

/*函数声明*/
void delay(uint8 k ); //延时子程序
void time_pro( ); //时间处理子程序
void display( ); //显示子程序
void keyscan( ); //键盘扫描子程序

/*延时子程序*/
void delay (uint8 k)
{
uint8 j;
while((k--)!=0)
{
for(j=0;j<125;j++)
{;}
}
}

/*时间处理子程序*/
void time_pro(void)
{
if(seconde==99)//秒钟设为99进制
{
seconde=0;
}
}

/* 显示子程序*/
void display(void)
{
P0=dispcode[seconde/10]; //显示秒的十位
delay(4);
P3=dispcode[seconde%10]; //显示秒的个位
delay(4);
}

/*键盘扫描子程序*/
void keyscan (void)
{
if(key1==0) //按键1为开始键
{
delay(60);
if(key1==0)
EA=1;
delay(60);
seconde++;
}
if(seconde==99)
{seconde=0;
}
if(key2==0) //按键2为复位键
{
delay(60);
if(key2==0)
{      
delay(60);
seconde=0;
delay(60);
EA=0;
}
}
}

/*1s定时子程序 */
void timer0(void) interrupt 1 using 0
{
TH0=0xff;
TL0=0x19;
TMOD = 0x01;//定时器0方式1,250us中断一次
mstcnt++;
if(mstcnt==4000)
{
seconde++;
mstcnt=0; //对计数单元的清零
}
}

/*主函数*/
void main(void)
{     
P0=0xff; //初始化p0口,全设为1使数码管
TMOD = 0x01; //time0为定时器,方式1
TH0=0xff; //预置计数初值
TL0=0x19;
EA=0;
ET0=1;
TR0=1;
while (1)
{
keyscan( ); //按键扫描
time_pro( ); //时间处理
display( ); //显示时间
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表