原创 EDNCHINA 51实验板数码管显示秒计数程序

2010-2-6 23:18 1449 2 2 分类: MCU/ 嵌入式
//EDNCHINA 51实验板数码管显示秒计数程序
//计数范围为0~9999;每100报警一次
//编程:LPC
//日期:2007年10月10日
//希望程序能对初学者起到引导作用
#include<reg52.h>
#define uchar unsigned char //定义一下方便使用
#define uint  unsigned int
#define ulong unsigned long
sbit P0_4=P0^4;
sbit speaker="P1"^7;
sbit L1=P1^0;
sbit L2=P1^1;
sbit L3=P1^2;
sbit L4=P1^3;
static uint count="0";
static uint v="0";
static uint m="0";
uint t;
code uchar LED[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
code uchar L[4]={0xfe,0xfd,0xfb,0xf7};
//主程序
main(void)
{
 TH0=0xf8;      //T0定时时间为10ms
 TL0=0xcd;
 TH1=0xdc;      //T1定时时间为50ms
 TL1=0x00;
 TMOD=0x11;      //T0,T1设置为模式1
 IE=0x8a;      //开T0,T1中断
 TCON=0x50;      //启动T0,T1
 while(1)
 {
 }
}
//T0中断
void tmr0() interrupt 1 using 2
{uint LED1,LED2,LED3,LED4;
 m++;
 if(m>=4)m=0;
 TF0=0;       //清除中断标志位
 TH0=0xf8;      //重新赋值定时器0初值
 TL0=0xcd;
 LED1=v/1000;
 LED2=(v%1000)/100;
 LED3=((v%1000)%100)/10;
 LED4=((v%1000)%100)%10;
 switch(m)
 {
  case 0:
   P0=LED[LED1];
   L1=0;
   L2=L3=L4=1;
   break;
  case 1:
   P0=LED[LED2];
   L2=0;
   L1=L3=L4=1;
   break;
  case 2:
   P0=LED[LED3];
   L3=0;
   L1=L2=L4=1;
   break;
  case 3:
   P0=LED[LED4];
   L4=0;
   L1=L2=L3=1;
   break;
  default:
   P0=0xff;
   L1=L2=L3=L4=1;
   break;
 } 
 TR0=1;       //启动定时器0
}
//T1中断
void tmr1() interrupt 3 using 3
{ TF1=0;
 TH1=0xdc;
 TL1=0x00;
 count++;      //计数器+1
 if(count>=100)     //到1s
 {
  count=0;     //计数器清零
  v++;      //秒计数器+1
  if(v>9999)v=0;    //如果秒数大于9999,秒计数器清零
 }
 if(count<=1&&!(v%100))
 {
  speaker=0;
 }
 else speaker="1";
 TR1=1;
}
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
2
关闭 站长推荐上一条 /3 下一条