位定义及符号变量定义:
#include "reg52.h"
#include "intrins.h"
sbit L0=P0^0;
sbit L1=P0^1;
sbit L2=P0^2;
sbit L3=P0^3;
sbit L4=P0^4;
sbit L5=P0^5;
sbit L6=P0^6;
sbit L7=P0^7;
sfr AUXR=0X8E; //NOTES:sbit是位操作,用于将某个sfr中具体位赋值给一个变量
unsigned int count = 0;
函数声明:
void selectHC38(unsigned char n);
void InitTimer0(void);
void init();
主函数:
init();
while(1)
{
}
通过74HC138进行M74HC573的选择进而控制LED灯的点亮。
void selectHC38(unsigned char n)
{
switch(n)
{
case 4 :P2 = 0x80;break;
case 5 :P2 = 0xA0;break;
case 6 :P2 = 0xC0;break;
case 7 :P2 = 0xE0;break;
}
}
定时器中断初始化函数,定时器设定为5ms:
void InitTimer0(void)
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x28; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA = 1;
ET0 = 1;
TR0 = 1;
}
系统初始化函数:
void init()
{
InitTimer0();
selectHC38(5);P0 = 0X00;P2=0x00;
selectHC38(4);P0 = 0XFF;P2=0x00;
}
全部的函数代码:
#include "reg52.h"
#include "intrins.h"
sbit L0=P0^0;
sbit L1=P0^1;
sbit L2=P0^2;
sbit L3=P0^3;
sbit L4=P0^4;
sbit L5=P0^5;
sbit L6=P0^6;
sbit L7=P0^7;
sfr AUXR=0X8E; //NOTES:sbit是位操作,用于将某个sfr中具体位赋值给一个变量
unsigned int count = 0;
void selectHC38(unsigned char n);
void InitTimer0(void);
void init();
void Timer0Interrupt(void) interrupt 1
{
count++;
if(count == 400)
{
selectHC38(4);L4=~L4;
count=0;
}
if(count%200 == 0)
{
selectHC38(4);L1=~L1;
}
}
void main(void)
{
init();
while(1)
{
}
}
void selectHC38(unsigned char n)
{
switch(n)
{
case 4 :P2 = 0x80;break;
case 5 :P2 = 0xA0;break;
case 6 :P2 = 0xC0;break;
case 7 :P2 = 0xE0;break;
}
}
void InitTimer0(void)
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x28; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA = 1;
ET0 = 1;
TR0 = 1;
}
void init()
{
InitTimer0();
selectHC38(5);P0 = 0X00;P2=0x00;
selectHC38(4);P0 = 0XFF;P2=0x00;
}
下图是通过STC-ISP软件进行的定时器时间设定的截图