原创
EDNCHINA 51实验板数码管显示秒计数程序
//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;
}
用户741296 2007-10-26 14:48
用户659278 2007-10-22 10:20
同一行业的兄弟。51,Pic通吃,强!呵呵
博客里面的技术帖子感觉非常亲切,有时间多多交流。