打印

一个单片机

[复制链接]
1814|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
注册H登录|  楼主 | 2012-7-14 22:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int  
sbit dula=P3^6;
sbit wela=P3^7;
uchar code table[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
uchar h,m,s,hs,hg,ms,mg,ss,sg;
uchar cout,temp;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

void init()    //初始化程序
{
s=0;
m=0;
h=0;
  
  //TH0=(65536-50000)/256;
// TL0=(65536-50000)%256;
}
void set()
{
P1=0xfe;
temp=temp&0xf0;
if(temp!=0xf0)
{
  switch(temp)
   {
  case 0xe0:m++;break;
  case 0xd0:m--;break;
  case 0xb0:s++;break;
  case 0x70:s--;break;
   }
}
}
void display()   //显示程序
{
sg=s%10;//给秒钟,分钟,时钟的个位与十位赋值
ss=s/10;
mg=m%10;
ms=m/10;
hg=h%10;
hs=h/10;

wela=1;//显示秒钟个位值
P2=0x80;
wela=0;
dula=1;
P2=table[sg];
dula=0;
delay(2);

wela=1;//显示秒钟十位的值
P2=0x40;
wela=0;
dula=1;
P2=table[ss];
dula=0;
delay(2);

/*wela=1;//两点
P2=0x20;
wela=0;
dula=1;
if(s/2==0)
P2=0x90;
else
P2=0xff;
dula=0;
delay(2);*/

wela=1;//分钟个位
P2=0x10;
wela=0;
dula=1;
P2=table[mg];
dula=0;
delay(2);
wela=1;//分钟十位
P2=0x08;
wela=0;
dula=1;
P2=table[ms];
dula=0;
delay(2);
/*P2=0x04;
wela=0;
dula=1;
if(s/2==0)
P2=0x90;
else
P2=0xff;
dula=0;
delay(2);*/

wela=1;//时钟个位
P2=0x02;
wela=0;
dula=1;
P2=table[hg];
dula=0;
delay(2);
wela=1;//时钟十位
P2=0x01;
wela=0;
dula=1;
P2=table[hs];
dula=0;
delay(2);
}
void main()     //主程序
{
  init();
EA=1;
ET0=1;
TR0=1;
while(1)
{
  display();
set();
}
}

void timer0()interrupt 1  //中断程序
{
TH0=0x3c;
TL0=0xb0;
cout++;
if(cout==20)
{
  cout=0;
  s++;
   if(s==60)
   {
    s=0;
    m++;  
     if(m==60)
     {
      m=0;
      h++;
       if(h==24)
       {
        h=0;
        }
      }
    }
  }
}
这个程序的时钟跑的很快,为什么
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

24

帖子

0

粉丝