|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2021-7-16 11:53:01
|
显示全部楼层
定时器的应用——实践
2、点阵轮流亮轮流灭程序——在图形化编程基础上编写C语言程序
要是让我全都用C语言编写程序,很多的头文件、函数的名称我还不是很熟悉,于是我在通过图形化编程对函数、变量、头文件等进行定义和声明后,用C语言加以更改,实现我想要的效果。
我想要的效果是,点阵从第一个led灯开始,从左往右从上到下亮起,再从右往左从下到上灭掉。
以下是程序源代码:
#define MATRIX_PORT P6
#define MATRIX_PORT_MODE {P6M1=0x00 6M0=0xff;}//推挽输出
#include <STC8HX.h>
uint32 sys_clk = 24000000;//设置PWM、定时器、串口、EEPROM频率参数
#include "lib/twen_board.h"
#include "lib/led8.h"
#include "lib/matrix.h"
uint8 mylist[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
void Timer0Init(void) //1000微秒@24.000MHz
{
AUXR &= 0x7f; //定时器时钟12T模式
TMOD &= 0xf0; //设置定时器模式
TL0 = 0x30; //设定定时初值
TH0 = 0xf8; //设定定时初值
}
void T_IRQ0(void) interrupt 1 using 1{
matrix_scan_callback();//点阵扫描回调函数
}
void setup()
{
twen_board_init();//天问51初始化
led8_disable();//关闭8个LED流水灯电源
matrix_init();//点阵初始化
Timer0Init();
TR0 = 1;// 定时器0开始计时
EA = 1; // 控制总中断
ET0 = 1; // 控制定时器中断
}
void loop()
{
int i,j;
uint8 step_list[8];
uint8 kkk=0x80;
for(i=0;i<8;i++)
{
step_list=mylist;
}
for(i=0;i<8;i++)
{
step_list--;
matrix_update_buf(step_list);//点阵更新显示缓存
delay(i*10);
}
for(j=0;j<7;j++)
for(i=0;i<8;i++)
{
step_list=step_list*2;
matrix_update_buf(step_list);//点阵更新显示缓存
delay(i*10);
}
// for(i=0;i<8;i++)
// {
// step_list=step_list+0x80;
// matrix_update_buf(step_list);//点阵更新显示缓存
// delay(100);
// }
for(j=0;j<8;j++)
{
for(i=0;i<8;i++)
{
step_list=step_list+kkk;
matrix_update_buf(step_list);//点阵更新显示缓存
delay(i*10);
}
kkk=kkk/2;
}
}
void main(void)
{
setup();
while(1){
loop();
}
}
运行测试,符合目标。
OVER
|
|