📄 test1.c
字号:
#include "C8051F200.h"
#include "TEST1.H"
#include "disdrive.h"
//--------------------------------全屏显示”科“字---------------------------------------------
char code z_qing2[] = {/*-- 文字: 清 --*/0x10,0x61,0x86,0x60,0x22,0xAA,0xAA,0xAA,0xBF,0xAA,0xAA,0xAA,0x22,0x20,0x00,0x00,0x02,0x3E,0x01,0x00,0x00,0x3F,0x0A,0x0A,0x0A,0x0A,0x2A,0x3F,0x00,0x00,0x00,0x00};
char code z_chu2[] = {/*-- 文字: 除 --*/0x00,0xFE,0x22,0x5A,0x86,0x20,0x10,0x28,0x24,0xE3,0x24,0x28,0x10,0x20,0x00,0x00,0x00,0x3F,0x02,0x04,0x13,0x09,0x05,0x11,0x21,0x1F,0x01,0x05,0x09,0x10,0x00,0x00};
char code z_dang[] = {/*-- 文字: 当 --*/0x00,0x00,0x22,0x24,0x28,0x20,0x20,0x3F,0x20,0x28,0x24,0x22,0xE0,0x00,0x00,0x00,0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x3F,0x00,0x00,0x00};
char code z_qian2[] = {/*-- 文字: 前 --*/0x08,0x08,0xE8,0xA9,0xAA,0xAC,0xE8,0x08,0x0C,0xEA,0x09,0xE8,0x0C,0x08,0x00,0x00,0x00,0x00,0x3F,0x02,0x12,0x22,0x1F,0x00,0x00,0x17,0x20,0x1F,0x00,0x00,0x00,0x00};
char code z_liang[] = {/*-- 文字: 量 --*/0x00,0x20,0x20,0xBE,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBF,0x22,0x20,0x00,0x00,0x00,0x20,0x28,0x2F,0x2A,0x2A,0x2A,0x3F,0x2A,0x2A,0x2A,0x2F,0x28,0x20,0x00,0x00};
char code z_ANULL[] = {/*-- 文字: A --*/ 0x00,0x00,0xE0,0x18,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x1E,0x13,0x02,0x13,0x1E,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
char code z_VNULL[] = {/*-- 文字: V --*/ 0x08,0x78,0x88,0x00,0x88,0x78,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
char code z_xiang[] = {/*-- 文字: 相 --*/0x10,0x10,0xD0,0xFF,0x50,0x90,0x00,0xFE,0x22,0x22,0x22,0x22,0xFF,0x02,0x00,0x00,0x04,0x03,0x00,0x3F,0x00,0x00,0x00,0x3F,0x11,0x11,0x11,0x11,0x3F,0x00,0x00,0x00};
char code * code Page_ke [] = {z_qing2,z_chu2,z_dang,z_qian2,z_liang,z_ANULL,z_VNULL,z_xiang,
z_qing2,z_chu2,z_dang,z_qian2,z_liang,z_ANULL,z_VNULL,z_xiang,
z_qing2,z_chu2,z_dang,z_qian2,z_liang,z_ANULL,z_VNULL,z_xiang,
z_qing2,z_chu2,z_dang,z_qian2,z_liang,z_ANULL,z_VNULL,z_xiang,
};
void FeedDog(void) //喂狗
{
WDTCN = 0xA5;
}
void WatchDog(void)
{
WDTCN = 0x07; // Watchdog Timer Control Register // 超时间隔94ms
WDTCN = 0xFF; // 禁止看门狗失效,一直有效并关不掉
WDTCN = 0xA5; // 复位并允许;
}
void KillDog(void)
{
EA = 0;
WDTCN = 0xDE; // Disable WDT
WDTCN = 0xAD;
}
// 11.0592M
void SYSCLK_Init(void)
{
OSCXCN = 0x20; //00100000 // start external oscillator with 模式为晶振
// 11.0592MHz crystal
OSCICN = 0x88; // select external oscillator as SYSCLK
// source and enable missing clock
// detector
}
// port init
void PORT_Init(void)
{
PRT0MX = 0x01; //端口P00和P01配置为串口数据线
PRT1MX = 0x00;
PRT2MX = 0x00;
}
void UART_Init(void) // 串口初始化
{
SCON = 0xD0; //串口工作方式3
T2CON = 0x30; // 定时器2作为串口1的波特率发生器
RCAP2 = -(SYSCLK/BAUDRATE/32);
TR2 = 1; // TR2=1
}
void Timer0_Init(void) {
TMOD = 0x01; // 定时器0工作在16位定时器方式;
CKCON = 0x00;
TH0 = TIMER0_H; //定时1ms
TL0 = TIMER0_L;
// TR0 = 1; //开始计数
}
void InterruptEnable_Init(void)
{
IE = 0x12; // 屏蔽所有中断,开中断UART0,T0
IP = 0x10; // 串口优先级要高,其余采用默认优先级
EIE1 = 0x00; // 其余中断禁止
EIE2 = 0x00;
EIP1 = 0x00;
EIP2 = 0x00;
EA = 1;
}
void SYSINI(void)
{
KillDog();
SYSCLK_Init(); // initialize oscillator
PORT_Init(); // initialize crossbar and GPIO
UART_Init();
Timer0_Init();
InterruptEnable_Init();
WatchDog(); // 打开看门狗;
}
void main(void)
{
unsigned char i = 0;
SYSINI();
HardInitailLED();
LedFillNULL();
while(1)
{
ShowCharPage(Page_ke,4,0);
FeedDog();
delay(0xFFFF);
FeedDog();
delay(0xFFFF);
FeedDog();
}
}
//清屏
void LedFillNULL()
{ char page ;
char yData;
for(page=0x00; page<0x08; page++)
{
SetPosition(page,0);
for(yData=0; yData<64; yData++)
SendLedData(0x00);
SetPosition(page,9);
for(yData=0; yData<64; yData++)
SendLedData(0x00);
}
}
////////////////////////////////////////////////////////////////
//interal fuctions:
//set position to x,y
void SetPosition(UCHAR startx,UCHAR starty)
{
DriveControlChip(startx,starty);
SetLedXAddress(startx%8); //X Address should <=7
SetLedYAddress(starty%8*8); //Y Address should <=63
}
//show one dot:the minus controlable number
void ShowOneDot(char code *pc32,unsigned char isconvert,unsigned char startx,unsigned char starty)
{
char ucNum = 0;
char showchar;
SetPosition(startx,starty);
for( ucNum=0; ucNum<8; ucNum++)
{
showchar = *(pc32+ucNum);
if(isconvert==0x00)
SendLedData(showchar);
else
{
showchar = ~showchar;
SendLedData(showchar);
}
}
}
//show char:chinese
void ShowOneChar(char code *pc32,unsigned char isconvert,unsigned char startx,unsigned char starty)//startx<8 starty<16
{
ShowOneDot(pc32,isconvert,startx,starty);
ShowOneDot(pc32+16,isconvert,startx+1,starty);
ShowOneDot(pc32+8,isconvert,startx,starty+1);
ShowOneDot(pc32+24,isconvert,startx+1,starty+1);
}
void ShowCharPage(char code ** ZiMoPage,unsigned char ucNumLine,unsigned char ucSelectLineNum) //cNumLine = item num
{
unsigned char ucLine; //行变量
unsigned char ucLineMax;//总的行最大值
unsigned char ucSegment;//列变量
unsigned char ucNumFirst;//字模首位变量在行列式中的位置
if(ucSelectLineNum == 0) //是显示数据页面不是菜单页面,注意:如果是显示数据页面,cNumLine<=4
{
for(ucLine=0;ucLine<ucNumLine;ucLine=ucLine++)
for(ucSegment=0;ucSegment<8;ucSegment=ucSegment++)
{
ShowOneChar(*(ZiMoPage+ucLine*8+ucSegment),0x00,ucLine+ucLine,ucSegment+ucSegment);
}
}
else
{
ucNumFirst = (ucSelectLineNum/4)*32;//显示页面首字在行列式字模当中的首位
if((ucNumLine-ucSelectLineNum)>=4) ucLineMax = 4;
else ucLineMax = ucNumLine-(ucSelectLineNum/4)*4;
for(ucLine=0;ucLine<ucLineMax;ucLine=ucLine++)
for(ucSegment=0;ucSegment<8;ucSegment=ucSegment++) //写入某一行
{
if(ucSelectLineNum%4==ucLine)
{
ShowOneChar(*(ZiMoPage+ucLine*8+ucSegment+ucNumFirst),0xFF,ucLine+ucLine,ucSegment+ucSegment);
}
else
{
ShowOneChar(*(ZiMoPage+ucLine*8+ucSegment+ucNumFirst),0x00,ucLine+ucLine,ucSegment+ucSegment);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -