📄 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.
//===========================================================================
//============================================================================
// 工程名称: ex5_LED_Dots_Key
// 功能描述: 《实验指导书》综合实验
// 4*4键盘在8*8LED点阵上的应用
// 键值在LED点阵上显示
// 涉及的库: CMacro1016.lib
// 组成文件: main.c
// isr.asm/key.asm/system.asm
// SPCE061A.h/Key.h
// Resource.inc/SPCE061A.inc/Key.inc
// 硬件连接: IOA低八位连接GRE-
// IOA高八位连接RED-
// IOB低八位连接4*4键盘
// IOB高八位连接COM+
// 修订纪录: 2002-5-15(建立)
// 2003-6-16(添加版本说明及版权声明)
// 2003-7-16(代码标准化)
// 2005-10-17(注释标准化)
//==============================================================================
#include "SPCE061A.h"
#include "Key.h"
#define GREEN 0x00ff
#define RED 0xff00
#define HaveKey 1
#define NoKey 0
unsigned int ColorBar[8] =
{0xffff,0xffff,0x1f00,0x3,0x3f3f,0x00ff,0x0300,0x001f};
unsigned int DT0_9[10][5] ={ // 显示0,1,2,3,4,5,6,7,8,9 数组
{0x3c00,0x2400,0x2400,0x2400,0x3c00}, //0
{0x1000,0x1800,0x1000,0x1000,0x3800}, //1
{0x3c00,0x2000,0x3c00,0x0400,0x3c00}, //2
{0x3c00,0x2000,0x3c00,0x2000,0x3c00}, //3
{0x2400,0x2400,0x3c00,0x2000,0x2000}, //4
{0x3c00,0x0400,0x3c00,0x2000,0x3c00}, //5
{0x3c00,0x0400,0x3c00,0x2400,0x3c00}, //6
{0x3c00,0x2000,0x2000,0x2000,0x2000}, //7
{0x3c00,0x2400,0x3c00,0x2400,0x3c00}, //8
{0x3c00,0x2400,0x3c00,0x2000,0x3c00}, //9
};
unsigned char Keycode;
unsigned char KeyFlag; //按键标识
//============================================================================================
//语法格式:void InitialPort(void)
//实现功能:初始化IO口
//参数: 无
//返回值: 无
//============================================================================================
void InitialPort()
{
SP_Init_IOB(0xff00,0xff00,0xff00); //设置B口高十二位为同相高电平输出,低四位为带下拉电阻输入
SP_Init_IOA(0xffff,0xffff,0x0000); //设置A口为反相的低电平输出
}
//============================================================================================
//语法格式:void delay(char n)
//实现功能:延时子程序
//参数: char n-延时长度控制
//返回值: 无
//============================================================================================
void delay(char n)
{
int i,j ;
for(i=0;i<n;i++)
{
for(j = 0;j<50;j++);
F_ClearWatchdog(); //清看门狗
}
}
//============================================================================================
//语法格式:void DisplayVal(unsigned char keyVal)
//实现功能:显示键值
//参数: 待显示的键值
//返回值: 无
//============================================================================================
void DisplayVal(unsigned char keyVal)
{
unsigned char i,k,BarMask=0x0200;
for(k=0;k<100;k++)
{
for(i=0;i<5;i++)
{
F_ClearWatchdog(); //清看门狗
SP_Export(P_IOB_Data,BarMask);
SP_Export(P_IOA_Data,DT0_9[keyVal][i]); //显示图片
delay(1);
BarMask = BarMask<<1;
}
BarMask=0x0200;
}
}
//============================================================================================
//语法格式:void TestLed(void)
//实现功能:测试LED,依次点亮红灯,绿灯,红绿灯
//参数: 无
//返回值: 无
//============================================================================================
void TestLed(void)
{
SP_Export(P_IOA_Data,0x00ff); // 点亮红灯
SP_Export(P_IOB_Data,0xff00);
delay(400);
SP_Export(P_IOA_Data,0xff00); //点亮绿灯
SP_Export(P_IOB_Data,0xff00);
delay(400);
SP_Export(P_IOA_Data,0xffff); // 点亮红绿灯
SP_Export(P_IOB_Data,0xff00);
delay(400);
}
//============================================================================================
//语法格式:void walkman(void)
//实现功能:移动图标函数
//参数: 无
//返回值: 无
//============================================================================================
void WalkMan(void)
{
char state = 0;
unsigned int i,j,k,l=0,SelCol = 2,Reload = 1;
unsigned char ManIcon[8] = { 0x2000,0x9400,0xCA00,0x7A00,0xCA00,0x9400,0x2000,0x0000 };
for(j=0;j<20;j++)
{
F_ClearWatchdog(); //清看门狗
switch(state)
{
case 0: //状态0,图形向右移动
Reload = Reload << 1;
if(Reload == 0)
{
Reload = 0x8000;
state = 1;
}
break;
case 1: //状态1,图形向左移动
Reload = Reload >> 1;
if(Reload == 0)
{
Reload = 0x0001;
state = 2;
}
break;
case 2: //状态2,图形向左溢出屏幕
l++;
Reload = 1;
if(l==8)
{
state = 0;
l = 0;
}
break;
}
for(k=0;k<8;k++)
{
SelCol = Reload;
for(i = l;i<8;i++)
{
SP_Export(P_IOA_Data,SelCol); //显示
SP_Export(P_IOB_Data,ManIcon[i]);
delay(1);
SelCol = SelCol<<1;
}
}
}
}
//============================================================================================
//语法格式:void colorCol(void)
//实现功能:移动彩色条
//参数: 无
//返回值: 无
//============================================================================================
void colorCol ()
{
unsigned char j,BarMask=0x0100;
unsigned char i;
for(j=0;j<8;j++)
{
F_ClearWatchdog(); //清看门狗
SP_Export(P_IOB_Data,BarMask); //显示
SP_Export(P_IOA_Data,ColorBar[j]);
delay(40);
BarMask = BarMask<<1;
}
}
//============================================================================================
//语法格式:void ColorLineUp(void)
//实现功能:彩条上移
//参数: 无
//返回值: 无
//============================================================================================
void ColorLineUp()
{
unsigned char SelRow = 0x8000,j;
for(j=0;j<8;j++)
{
F_ClearWatchdog(); //清看门狗
SP_Export(P_IOA_Data,0xffff); //显示
SP_Export(P_IOB_Data,SelRow);
delay(40);
SelRow = SelRow>>1; //上移
}
}
//============================================================================================
//语法格式:void ColorLineOff(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -