标题:
一个简单的秒表单片机程序+proteus仿真工程
[打印本页]
作者:
月默的爱
时间:
2017-6-15 08:36
标题:
一个简单的秒表单片机程序+proteus仿真工程
这周实训弄得一个简单的秒表
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(13.22 KB, 下载次数: 44)
下载附件
2017-6-15 18:41 上传
0.png
(52.04 KB, 下载次数: 51)
下载附件
2017-6-15 18:41 上传
单片机源程序如下:
#include <reg51.H>
sbit sta_end=P0^0;
sbit reset=P3^7;
unsigned char code table0[]={
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
};
unsigned char code table1[]={
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
};
/*声明second10用于计数十分之一秒变化,second1用于记录秒的个*/ /*位,second2用于记录秒的十位*/
unsigned int second10,second1,second2;
bit bdata flag; /*以下是设置延时功能的函数*/
void delay()
{
unsigned char i,j;
for(i=90;i>0;i--)
for(j=200;j>0;j--);
}
/*以下是设置时间的函数*/
void setTime()
{
second10++;
if(second10==10) /*当十分之一秒计数到十后从零重新计时*/
{
second10=0; /*同时秒计时个位加一*/
second1++;
if(second1==10) /*当秒计数个位到十后从零重新计时*/
{
second1=0;
second2++; /*同时秒计时十位加一*/
if(second2==10)
second2=0;
}
}
}
/*以下是向LED管输数据并使之显示的函数*/
void dispact()
{
P3=0xfe;
P1=table1[second1];
delay();
P3=0xfd;
P1=table1[second2];
delay();
P2=table0[second10];
}
/*十分之一秒刷新一次,实现十分之一秒进一*/
Timer0 () interrupt 1 using 1
{
TH0 = (65535 - 50000)/256;
TL0 = (65535 - 50000)%256;
if(flag)
setTime();
dispact();
}
void main(void)
{
TMOD = 0x01;
TH0 = (65535 - 50000)/256; /*定时器赋初值*/
TL0 = (65535 - 50000)%256;
flag = 0;
EA = 1; /*cpu开中断*/
TR0 = 1; /*利用定时器0*/
ET0 = 1; /*外部中断允许*/
do
{
if(!sta_end)
{
if(flag == 0)
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
新建文件夹.rar
(17.34 KB, 下载次数: 12)
2017-6-15 08:36 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
月默的爱
时间:
2017-6-15 08:45
一个0到99的秒表,可暂停和复位
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1