📄 main.c
字号:
//=========================================================================
// The information contained herein is the exclusive property of
// Sunnnorth Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//=========================================================================
//=========================================================================
// 工程名称: ex3_LCD501_Graphic
// 功能描述: 《实验指导书》模组实验,
// LCD动态图片显示
// 显示旋转的凌阳标志动画
// 涉及的库: CMacro1016.lib
// 组成文件: main.c/SPLC501User.c/Sunplus_Table.c
// SPLC501Driver_IO.asm/DataOSforLCD.asm
// SPLC501User.h/Sunplus_Table.h
// SPLC501Driver_IO.inc
//
// 硬件连接: LCD DB0~DB7接IOA0~IOA7
// LCD EP 接IOB5
// LCD RW 接IOB4
// LCD A0 接IOB3
// LCD /CS 接IOB2 或接地也可
//
// 维护记录: 2005-09-20 v1.0
// 注意事项: 1.SPLC501的驱动程序为新版程序,2005年9月发布的版本
// 2.IO高电平:3.3V
//=============================================================================
//========================================================
// 文件名称: main.c
// 功能描述: LCD501显示动画
// 显示旋转的凌阳标志动画
// 维护记录: 2005-09-20 v1.0
//========================================================
#include "SPLC501User.h" //包含SPLC501液晶模组驱动程序的用户接口API函数声明的头文件
#include "Sunplus_Table.h" //包含BMP图像数据表的头文件
#define P_Watchdog_Clear (volatile unsigned int *)0x7012
#define P_SystemClock (volatile unsigned int *)0x7013
#define P_INT_Ctrl (volatile unsigned int *)0x7010
#define P_INT_Clear (volatile unsigned int *)0x7011
#define P_INT_Ctrl_New (volatile unsigned int *)0x702D
const unsigned int* BMP_Cartoon3[] = //动画帧数据链表(sunplus标志)
{(unsigned int*)18,(unsigned int*)encoding_00,(unsigned int*)encoding_01,
(unsigned int*)encoding_02,(unsigned int*)encoding_03,(unsigned int*)encoding_04,
(unsigned int*)encoding_05,(unsigned int*)encoding_06,(unsigned int*)encoding_07,
(unsigned int*)encoding_08,(unsigned int*)encoding_08,(unsigned int*)encoding_07,
(unsigned int*)encoding_06,(unsigned int*)encoding_05,(unsigned int*)encoding_04,
(unsigned int*)encoding_03,(unsigned int*)encoding_02,(unsigned int*)encoding_01,
(unsigned int*)encoding_00};
//表中定义第一个数为动画的帧数,以无符指针定义,但实际上当无符数使用
//后面的每个标号为指向该帧动画的图像......
//========================================================
// 语法格式: int main(void)
// 实现功能: LCD501显示动画
// 显示旋转的凌阳标志动画
// 参数: 无
// 返回值: 无
//========================================================
unsigned int IRQ1KHz_Counter; //定义一个全局的变量,作为计数的Counter
int main(void)
{
unsigned int uiTemp;
int i=1;
LCD501_Init(0x00); //初始化液晶
*P_SystemClock = 0x0088; //设置系统时钟以及CPU时钟
LCD501_SetPaintMode(4); //设置LCD显示模式
uiTemp = *P_INT_Ctrl_New; //...
uiTemp = uiTemp|0x0010;
*P_INT_Ctrl_New = uiTemp; //打开1KHz中断
__asm("IRQ ON"); //打开IRQ中断
LCD501_Bitmap(48,10,(unsigned int *)BMP_Cartoon3[1]); //先显示第一帧
IRQ1KHz_Counter=0; //计数器清零
while(1)
{
if(IRQ1KHz_Counter>=200) //到达预定时延时
{//到达预定时间时,更换一帧画面
IRQ1KHz_Counter=0; //清Counter
LCD501_Bitmap(48,10,(unsigned int *)BMP_Cartoon3[i]); //显示第i帧图像
i++; //自加
if(i==19) //到达上限,
{
i=1; //i重新指为1
}
}
*P_Watchdog_Clear = 0x0001; //清看门狗
}
}
//=====================================================================//
// 语法格式: void BMP_Play_IRQ_Service(void)
// 实现功能: 计数器Counter自加1
// 参数: 无
// 返回: 无
// 注意: 动画显示程序中,在1KHz中断需要调用的子函数,作为计数用
//=====================================================================//
void BMP_Play_IRQ_Service(void)
{
IRQ1KHz_Counter++; //Counter自加1
}
//=====================================================================//
// 语法格式: void IRQ4(void)
// 实现功能: IRQ4中断入口程序
// 参数: 无
// 返回: 无
// 注意: 采用了1KHz中断
//=====================================================================//
void IRQ4(void)__attribute__((ISR));
void IRQ4(void)
{
if(*P_INT_Ctrl&0x0010)
{
*P_INT_Clear = 0x0010;
BMP_Play_IRQ_Service(); //调用动画显示的中断服务程序
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -