一、硬件准备
1. 新定义RD8T37P48 MCU开发板:板载LED灯、按键等元件。
2. LED灯(多个):作为流水灯的主体,根据需要连接到开发板的多个GPIO端口。
原理图:

下面是LED对应连接IO的位置:

二、软件环境搭建
1. 开发工具:Keil C51,用于编写和编译C语言程序。
2. 安装新定义插件(易码魔盒):插件可能提供了一键生成工程文件、配置GPIO等功能,便于快速开发。
3. 使用固件包和示例代码:利用固件包和示例代码,进行开发和学习。
4. 使用易码魔盒或Keil C51创建一个新的工程,并选择RD8T37P48作为主控MCU型号。配置好KEIL的工程与易码魔盒配套开发。
具体的方法:
根据开发板的原理图,找到LED灯对应的GPIO端口,并在程序中将其配置为推挽输出模式。
选择一个定时器,并配置其工作模式(如自动重装载模式)。
设置定时器的预分频器和重装载值,以确定流水灯的闪烁频率。
在定时器中断服务例程中编写代码,通过改变LED灯对应GPIO端口的电平状态来实现流水效果。
可以使用循环结构依次点亮每个LED灯,并通过延时函数控制点亮的时间间隔。
把LED灯工作状态放在这个中断里面的
BTM_Int(void) interrupt 9
软件代码如下:
TMCON = 0X07; //------111 ;Timer0、Tiemr1和Tiemr2选择时钟Fsys
//T0设置,现象:P02输出频率为1K的方波(主频:32M)
TMOD |= 0x01; //0000 0001;Timer0设置工作方式1
TL0 = (65536 - 16000)%256; //时钟为Fsys,则溢出时间=16000*(1/Fsys);
TH0 = (65536 - 16000)/256;
TR0 = 0;
ET0 = 1;//定时器0允许
TR0 = 1;//打开定时器0
//T1设置,现象为P03输出频率为100K的方波(主频:32M)
TMOD |= 0x20; //0010 0000;Timer1设置工作方式2
TL1 = 256 - 160; //时钟为Fsys,则溢出时间=160*(1/Fsys);
TH1 = 256 - 160;
TR1 = 0;
ET1 = 1;//定时器1允许
TR1 = 1;//打开定时器1
//T2设置,设置为捕获模式,读取变量count可以知道P22第10次到第11次下降沿的定时器计数值
TXINX = 0x02; //选择定时器T2
TXCON = 0X09; //使能EXT2,16位捕获模式
TXMOD = 0X80;
THX = 0X00;
TLX = 0X00;
RCAPXH = 0X00;
RCAPXL = 0X00;
ET2 = 1;
TRX = 1;//打开定时器2
//T3设置,现象:P02输出频率为1K的方波(主频:32M)
TXINX = 0x03; //选择定时器T3
TXMOD = 0x80;
TXCON = 0x00; //设置为16位重载寄存器
RCAPXH = (65536-16000)/256; //时钟为Fsys,则溢出时间=32000*(1/Fsys);
RCAPXL = (65536-16000)%256;
TRX = 0;
IE1 |= 0x40; //定时器3允许
IP1 |= 0X40;
TRX = 1; //打开定时器3
//T4设置
TXINX = 0x04; //选择定时器T4
TXMOD = 0x80;
TXCON = 0x00; //设置为16位重载寄存器
RCAPXH = (65536-32000)/256; //时钟为Fsys,则溢出时间=32000*(1/Fsys);
RCAPXL = (65536-32000)%256;
TRX = 0;
IE1 |= 0x80;//定时器4允许
IP1 |= 0X80;
TRX = 1; //打开定时器4
EA = 1;
流水灯控制
i++;
if(i==0)
{
P00 = 0;
P01 = 0;
P02 = 0; //IO口翻转
P03 = 0;
P05 = 0; //IO口翻转
P06 = 0;
P07 = 0; //IO口翻转
P22 = 0; //IO口翻转
P23 = 0; //IO口翻转
P24 = 0; //IO口翻转
P25 = 0; //IO口翻转
P26 = 0; //IO口翻转
P31 = 0; //IO口翻转
P32 = 0; //IO口翻转
P33 = 0; //IO口翻转
P37 = 0; //IO口翻转
P40 = 0; //IO口翻转
P41 = 0; //IO口翻转
P46 = 0; //IO口翻转
P50 = 0; //IO口翻转
P51 = 0; //IO口翻转
}
else if(i==2)
{
P00 = ~P00;
P01 = ~P01;
P02 = ~P02; //IO口翻转
P03 = ~P03;
P05 = ~P05; //IO口翻转
P06 = ~P06;
P07 = ~P07; //IO口翻转
P22 = ~P22; //IO口翻转
P23 = ~P23; //IO口翻转
P24 = ~P24; //IO口翻转
P25 = ~P25; //IO口翻转
P26 = ~P26; //IO口翻转
P31 = ~P31; //IO口翻转
P32 = ~P32; //IO口翻转
P33 = ~P33; //IO口翻转
P37 = ~P37; //IO口翻转
P40 = ~P40; //IO口翻转
P41 = ~P41; //IO口翻转
P46 = ~P46; //IO口翻转
P50 = ~P50; //IO口翻转
P51 = ~P51; //IO口翻转
}
else if(i==3)
{
P00 = 0; //0 1 2 3 5 24 25 26
P01 = 1;
P02 = 1; //IO口翻转
P03 = 1;
P05 = 1; //IO口翻转
P06 = 0;
P07 = 0; //IO口翻转
P22 = 0; //IO口翻转
P23 = 1; //IO口翻转
P24 = 1; //IO口翻转
P25 = 1; //IO口翻转
P26 = 1; //IO口翻转
P31 = 0; //IO口翻转
P32 = 0; //IO口翻转
P33 = 0; //IO口翻转
P37 = 0; //IO口翻转
P40 = 0; //IO口翻转
P41 = 0; //IO口翻转
P46 = 0; //IO口翻转
P50 = 0; //IO口翻转
P51 = 0; //IO口翻转
}
else if(i==4)
{
P00 = 1; //0 1 2 3 5 24 25 26
P01 = 1;
P02 = 1; //IO口翻转
P03 = 1;
P05 = 1; //IO口翻转
P06 = 1;
P07 = 0; //IO口翻转
P22 = 0; //IO口翻转
P23 = 1; //IO口翻转
P24 = 1; //IO口翻转
P25 = 1; //IO口翻转
P26 = 0; //IO口翻转
P31 = 0; //IO口翻转
P32 = 0; //IO口翻转
P33 = 0; //IO口翻转
P37 = 0; //IO口翻转
P40 = 0; //IO口翻转
P41 = 0; //IO口翻转
P46 = 0; //IO口翻转
P50 = 0; //IO口翻转
P51 = 0; //IO口翻转
}
else if(i==5)
{
P00 = 1;
P01 = 1;
P02 = 1; //IO口翻转
P03 = 1;
P05 = 1; //IO口翻转
P06 = 1;
P07 = 0; //IO口翻转
P22 = 1; //IO口翻转
P23 = 1; //IO口翻转
P24 = 1; //IO口翻转
P25 = 0; //IO口翻转
P26 = 1; //IO口翻转
P31 = 0; //IO口翻转
P32 = 0; //IO口翻转
P33 = 0; //IO口翻转
P37 = 0; //IO口翻转
P40 = 0; //IO口翻转
P41 = 0; //IO口翻转
P46 = 0; //IO口翻转
P50 = 1; //IO口翻转
P51 = 0; //IO口翻转
}
else if(i==6)
{
P00 = 1;
P01 = 1;
P02 = 1; //IO口翻转
P03 = 1;
P05 = 1; //IO口翻转
P06 = 1;
P07 = 1; //IO口翻转
P22 = 1; //IO口翻转
P23 = 1; //IO口翻转
P24 = 0; //IO口翻转
P25 = 1; //IO口翻转
P26 = 1; //IO口翻转
P31 = 0; //IO口翻转
P32 = 0; //IO口翻转
P33 = 0; //IO口翻转
P37 = 0; //IO口翻转
P40 = 0; //IO口翻转
P41 = 0; //IO口翻转
P46 = 0; //IO口翻转
P50 = 1; //IO口翻转
P51 = 1; //IO口翻转
}
else if(i==7)
{
P00 = 1;
P01 = 0;
P02 = 1; //IO口翻转
P03 = 1;
P05 = 1; //IO口翻转
P06 = 1;
P07 = 1; //IO口翻转
P22 = 1; //IO口翻转
P23 = 1; //IO口翻转
P24 = 1; //IO口翻转
P25 = 1; //IO口翻转
P26 = 1; //IO口翻转
P31 = 0; //IO口翻转
P32 = 0; //IO口翻转
P33 = 0; //IO口翻转
P37 = 0; //IO口翻转
P40 = 0; //IO口翻转
P41 = 0; //IO口翻转
P46 = 1; //IO口翻转
P50 = 1; //IO口翻转
P51 = 1; //IO口翻转
}
else if(i==8)
{
P00 = 1;
P01 = 1;
P02 = 0; //IO口翻转
P03 = 1;
P05 = 1; //IO口翻转
P06 = 1;
P07 = 1; //IO口翻转
P22 = 1; //IO口翻转
P23 = 1; //IO口翻转
P24 = 1; //IO口翻转
P25 = 1; //IO口翻转
P26 = 1; //IO口翻转
P31 = 0; //IO口翻转
P32 = 0; //IO口翻转
P33 = 0; //IO口翻转
P37 = 0; //IO口翻转
P40 = 0; //IO口翻转
P41 = 1; //IO口翻转
P46 = 1; //IO口翻转
P50 = 1; //IO口翻转
P51 = 1; //IO口翻转
} else if(i==9)
{
P00 = 1;
P01 = 1;
P02 = 1; //IO口翻转
P03 = 0;
P05 = 1; //IO口翻转
P06 = 1;
P07 = 1; //IO口翻转
P22 = 1; //IO口翻转
P23 = 1; //IO口翻转
P24 = 1; //IO口翻转
P25 = 1; //IO口翻转
P26 = 1; //IO口翻转
P31 = 0; //IO口翻转
P32 = 0; //IO口翻转
P33 = 0; //IO口翻转
P37 = 0; //IO口翻转
P40 = 1; //IO口翻转
P41 = 1; //IO口翻转
P46 = 1; //IO口翻转
P50 = 1; //IO口翻转
P51 = 1; //IO口翻转
}else if(i==10)
{
P00 = 1;
P01 = 1;
P02 = 1; //IO口翻转
P03 = 1;
P05 = 0; //IO口翻转
P06 = 1;
P07 = 1; //IO口翻转
P22 = 1; //IO口翻转
P23 = 1; //IO口翻转
P24 = 1; //IO口翻转
P25 = 1; //IO口翻转
P26 = 1; //IO口翻转
P31 = 0; //IO口翻转
P32 = 0; //IO口翻转
P33 = 0; //IO口翻转
P37 = 1; //IO口翻转
P40 = 1; //IO口翻转
P41 = 1; //IO口翻转
P46 = 1; //IO口翻转
P50 = 1; //IO口翻转
P51 = 1; //IO口翻转
}else if(i==11)
{
P00 = 1;
P01 = 1;
P02 = 1; //IO口翻转
P03 = 1;
P05 = 1; //IO口翻转
P06 = 1;
P07 = 1; //IO口翻转
P22 = 1; //IO口翻转
P23 = 1; //IO口翻转
P24 = 1; //IO口翻转
P25 = 1; //IO口翻转
P26 = 1; //IO口翻转
P31 = 1; //IO口翻转
P32 = 1; //IO口翻转
P33 = 1; //IO口翻转
P37 = 1; //IO口翻转
P40 = 1; //IO口翻转
P41 = 1; //IO口翻转
P46 = 1; //IO口翻转
P50 = 1; //IO口翻转
P51 = 1; //IO口翻转
i=0;
我要赚赏金
