|
|
发表于 2026-10-27 20:14:38
|
显示全部楼层
8x8点阵 由例程改的
/*---------------------------------------------------------------------*/
/* --- Web: www.STCAI.com ---------------------------------------------*/
/*---------------------------------------------------------------------*/
/************* 功能说明 **************
本例程基于STC32G144K246为主控芯片的实验箱进行编写测试。
使用Keil C251编译器,Memory Model推荐设置XSmall模式,默认定义变量在edata,单时钟存取访问速度快。
edata建议保留1K给堆栈使用,空间不够时可将大数组、不常用变量加xdata关键字定义到xdata空间。
程序使用P0口来演示跑马灯,输出低驱动。
下载时, 选择时钟 48MHz (用户可自行修改频率)。
******************************************/
#include "STC32G144K246.h"
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
/**************** 用户定义宏 ****************/
#define MAIN_Fosc 48000000UL
/**************** 本地常量声明 **************/
/**************** 本地变量声明 **************/
u8 jj;
u8 code ledRow[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //行
u8 code CharHeart[][]={{0,1,1,0,1,1,0,0},
{1,1,1,1,1,1,1,0},
{1,1,1,1,1,1,1,0},
{1,1,1,1,1,1,1,0},
{0,1,1,1,1,1,0,0},
{0,0,1,1,1,0,0,0},
{0,0,0,1,0,0,0,0},
{0,0,0,0,0,0,0,0}}; /*字符:心(全宽),小端序(低位在前)*/
u8 code CharR[][]={{0,1,1,1,1,0,0,0},
{0,1,1,0,1,1,0,0},
{0,1,1,0,1,1,0,0},
{0,1,1,1,1,0,0,0},
{0,1,1,1,1,0,0,0},
{0,1,1,0,1,1,0,0},
{0,1,1,0,1,1,0,0},
{0,0,0,0,0,0,0,0}}; /*字符:R(全宽),小端序(低位在前)*/
/**************** 本地函数声明 **************/
void delay_ms(u16 ms);
/***************** 主函数 *********************/
void main(void)
{
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
P0M1 = 0x00; P0M0 = 0xff; //设置为推挽输出
P2M1 = 0x00; P2M0 = 0xff; //设置为推挽输出
jj = 0;
while(1)
{
//心
for(jj = 0;jj < 8;jj++)
{
P2 = ledRow[jj]; //行
P00 = ~CharHeart[jj][0]; //列
P01 = ~CharHeart[jj][1]; //列
P02 = ~CharHeart[jj][2]; //列
P03 = ~CharHeart[jj][3]; //列
P04 = ~CharHeart[jj][4]; //列
P05 = ~CharHeart[jj][5]; //列
P06 = ~CharHeart[jj][6]; //列
P07 = ~CharHeart[jj][7]; //列
delay_ms(1);
P00 = 1;
P01 = 1;
P02 = 1;
P03 = 1;
P04 = 1;
P05 = 1;
P06 = 1;
P07 = 1;
P2 = ~ledRow[jj]; //关
}
}
}
//========================================================================
// 函数: void delay_ms(unsigned int ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数.
// 返回: none.
// 版本: VER1.0
// 日期: 2025-11-01
// 备注: 由于芯片使能了Cache功能,软件延时时间可能不太准确
//========================================================================
void delay_ms(u16 ms)
{
u16 i;
do{
i = MAIN_Fosc / 6000;
while(--i);
}while(--ms);
}
|
-
|