标题:
单片机计时表proteus仿真和源程序
[打印本页]
作者:
王培鹏
时间:
2017-4-8 23:43
标题:
单片机计时表proteus仿真和源程序
proteus计时表仿真图+程序,下面是原理图:
0.png
(25.99 KB, 下载次数: 92)
下载附件
2017-4-9 01:17 上传
51单片机源程序:
//简易计时表,未开始计时时8循环左移,INT0计时开始,INT1计时停止,精确度为0.1s
//单片机晶振选择12MHZ
//收获,定时器计算1us为一个指令周期,可以通过公式直接 求的所需时间
//在数据传输很容易犯错误,因此要注意在草稿纸上演练
//在获得数值与运用数值时,除了必要的数据转化,尽量不要处理,直接运用有利于减少错误
#include<reg52.h>
unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void System_Init();
unsigned char flag=0;
unsigned int Timer,Time;
unsigned char Dissbuf[3]={0,0,0};
void main()
{
unsigned char i=0;
System_Init();
while(1)
{
if(flag==0)
{
i=Time/10;
if(i%3==0)
{P0=0x00;P2=0xff;P1=0xff;}
if((i+2)%3==0)
{P0=0xff;P2=0x00;P1=0xff;}
if((i+1)%3==0)
{P0=0xff;P2=0xff;P1=0x00;}
}
if(flag==1)
{
i=20;
P0=0xff;
P2=0xff;
P1=0xff;
while(i--);
i=256;
P0=Dissbuf[0];
P2=Dissbuf[1];
P1=Dissbuf[2];
while(i--);
}
}
}
void System_Init()
{
TMOD = 0x01;
TH0 = (65535-50000)/256;
TL0 = (65535-50000)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
IT0=1;
EX0=1;
IT1=1;
EX1=1;
}
void into() interrupt 0
{
flag=1;
P0=0xff;
P2=0xff;
P1=0xff;
Time=0;
TR0=1;
}
void TIMER0() interrupt 1
{
TH0 = (65535-50000)/256;
TL0 = (65535-50000)%256;
Timer++;
if(Timer==2)
{
Timer=0;
Time++;
if(Time==999)
{Time=0;}
Dissbuf[0]=M[Time%10];
Dissbuf[1]=M[Time%100/10]-0x80;
Dissbuf[2]=M[Time/100];
}
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png
(54.35 KB, 下载次数: 53)
下载附件
2017-4-9 01:17 上传
单片机计时表仿真工程文件和源码下载:
计时器.zip
(80.91 KB, 下载次数: 13)
2017-4-8 23:43 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1