📄 main.c
字号:
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <C8051F410.h> // SFR declarations
#include <stdio.h>
#include <math.h>
#include <INTRINS.H>
#include <string.h>
//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F41x
//-----------------------------------------------------------------------------
sfr16 TMR2RL = 0xCA; // Timer2 reload value
sfr16 TMR2 = 0xCC; // Timer2 counter
//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------
#define RTC0CN 0x06 // RTC address of RTC0CN register
#define RTC0XCN 0x07 // RTC address of RTC0XCN register
const unsigned char code RTC_Interval[6]= {0x00,0x00,0x01,0x00,0x00,0x00};
sbit Led_En = P0^5;
sbit Speaker= P0^7;
sbit P0_0 = P0^0;
sbit P0_1 = P0^1;
sbit P0_2 = P0^2;
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
#define LCD_CS1 P0_0
#define LCD_CS2 P0_1
#define LCD_ENABLE P0_2
#define LCD_R_W P2_0
#define LCD_D_I P2_1
#define DataPort P1 //LCD Data port
#define LCD_OFF 62 //显示器关闭
#define LCD_ON 63 //显示器打开
#define LCD_START_LINE_0 192 //设开始坐标
#define SET_PAGE 184 //设页数(X坐标)
#define SET_Y_ADDRESS_0 64 //设X坐标
#define CLEAR 0 //设页数(X坐标)
#define ENABLE 1
#define DISABLE 0
#define READ 1
#define WRITE 0
#define COMMAND 0
#define DATA 1
//-----------------------------------------------------------------------------
#define SYSCLK 24500000 // SYSCLK frequency in Hz
#define BAUDRATE 115200 // Baud rate of UART in bps
//-----------------------------------------------------------------------------
void OSC_Init (void);
void PORT_Init (void);
//-----------------------------------------------------------------------------
/*********************************************************************/
/********************字库***********************************************/
/*********************************************************************/
unsigned char code digit[10][2][16]=
{{{0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0x00,0x00}},/*"0",9*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x00,0x00}},/*"1",0*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x00,0x00}},/*"2",1*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00}},/*"3",2*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,0x00,0x00,0x00}},/*"4",3*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00}},/*"5",4*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00}},/*"6",5*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},/*"7",6*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00}},/*"8",7*/
{{0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,0x00,0x00,0x00}}};/*"9",8*/
//-----------------------------------------------------------------------------
unsigned char code comma[2][16]=
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00}};/*":",0*/
//-----------------------------------------------------------------------------
unsigned char code space[2][16]=
{{0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00},
{0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00}};
//-----------------------------------------------------------------------------
unsigned char code Zhongguo[2][16]=
{
{0x00,0x00,0xFC,0xFC,0x94,0x94,0xF4,0xFE,0xCA,0xCA,0x0A,0x02,0xFE,0xFE,0x00,0x00},
{0x00,0x00,0x1F,0x1F,0x14,0x14,0x17,0x1B,0x0A,0x0B,0x1B,0x3A,0x3F,0x1F,0x00,0x00}/*"国",0*/
};
//-----------------------------------------------------------------------------
unsigned char code Zhongguo12[2][12]=
{
{0x00,0xFF,0xFF,0x25,0x25,0xFD,0xFD,0x65,0xE5,0xA5,0xFF,0xFF},
{0x00,0x0F,0x0F,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x0F,0x0F},/*"国",0*/
};
//-----------------------------------------------------------------------------
unsigned char code Five[2][6]=
{
{0x3C,0x24,0x24,0x24,0xC4,0x00},
{0x01,0x02,0x02,0x02,0x01,0x00} /*"5",0*/
};
//-----------------------------------------------------------------------------
unsigned char code Eight[2][8]=
{
{0x00,0x00,0x70,0x78,0xC8,0xC8,0x88,0x00},
{0x00,0x10,0x10,0x30,0x30,0x1F,0x0F,0x00}/*"5",0*/
};
//-----------------------------------------------------------------------------
unsigned char xdata DispRam[8][128];
unsigned char gx,gy;
//-----------------------------------------------------------------------------
void LCD_Delay(unsigned char i)
{
while(i--);
}
/***************检测忙****************************/
void Check_LCD_Busyflag(void)
{
unsigned char x;
LCD_ENABLE=1;
LCD_R_W=1;
LCD_D_I=0;
LCD_Delay(10);
DataPort=0x00;
do
{
x=DataPort && 128;
} while(x);
LCD_ENABLE=0;
LCD_Delay(5);
LCD_D_I=0;
LCD_R_W=0;
}
/********************写命令**********************/
void Write_LCD_Command(unsigned command)
{
Check_LCD_Busyflag();
LCD_ENABLE=1;
LCD_R_W = 0;
LCD_D_I = 0;
LCD_Delay(10);
DataPort=command;
LCD_Delay(10);
LCD_ENABLE=0;
LCD_Delay(5);
LCD_D_I=1;
LCD_R_W=1;
LCD_Delay(10);
}
/********************写数据*********************/
void Write_LCD_Data(unsigned LCDdata)
{
Check_LCD_Busyflag();
LCD_ENABLE=1;
LCD_R_W=0;
LCD_D_I=1;
LCD_Delay(10);
DataPort=LCDdata;
LCD_Delay(10);
LCD_ENABLE=0;
LCD_Delay(5);
LCD_D_I=0;
LCD_R_W=1;
LCD_Delay(10);
}
/*********************清屏**********************/
void Clear_LCD()
{
int i,j;
LCD_CS1=1;
LCD_CS2=1;
LCD_Delay(5);
Write_LCD_Command(LCD_ON);
Write_LCD_Command(LCD_START_LINE_0);
for(i=0;i<8;i++)
{
Write_LCD_Command(SET_PAGE+i);
Write_LCD_Command(SET_Y_ADDRESS_0);
for(j=0;j<64;j++)
{
Write_LCD_Data(0xff);
}
}
}
//-----------------------------------------------------------------------------
void UpData_LCD(unsigned char Buffer[8][128])
{
unsigned char i,j;
Write_LCD_Command(LCD_ON);
Write_LCD_Command(LCD_START_LINE_0);
LCD_CS1=1;
LCD_CS2=0;
LCD_Delay(5);
for(i=0;i<8;i++)
{
Write_LCD_Command(SET_PAGE+i);
Write_LCD_Command(SET_Y_ADDRESS_0);
for(j=0;j<64;j++)
{
Write_LCD_Data(Buffer[i][j]);
}
}
LCD_CS1=0;
LCD_CS2=1;
LCD_Delay(5);
// Write_LCD_Command(LCD_ON);
// Write_LCD_Command(LCD_START_LINE_0);
for(i=0;i<8;i++)
{
Write_LCD_Command(SET_PAGE+i);
Write_LCD_Command(SET_Y_ADDRESS_0);
for(j=64;j<128;j++)
{
Write_LCD_Data(Buffer[i][j]);
}
}
}
//-----------------------------------------------------------------------------
void Show_ChineseChar16(unsigned char x,unsigned char y,unsigned char StrAddr[2][16])
{
unsigned char i;
if((y%8)==0)
{
for(i=0;i<16;i++)
{
DispRam[y>>3][x+i] =StrAddr[0][i];
DispRam[(y>>3)+1][x+i]=StrAddr[1][i];
}
}
else
{
for(i=0;i<16;i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -