📄 main.c
字号:
#include <config.h>
#include <lcddrive.h>
#include <serial.h>
#include <ps2.h>
#include <key.h>
uint8 Os_Enter_Sum;
#define OS_ENTER_CRITICAL() EA = 0,Os_Enter_Sum++ /* 禁止中断*/
#define OS_EXIT_CRITICAL() if (--Os_Enter_Sum==0) EA = 1 /* 允许中断*/
extern uint8 code bmp[9600];
uint16 Key_Value = 0;
uint16 Key_Value1 = 0;
uint8 Cc = 0;
uint8 Counter = 0;
uint8 PreKey_Char = 0;
uint8 Key_Char = 0;
uint8 T100ms = 0;
bit Key_Flag = 0; // Key_Flag = 0;表示无键按下;Key_Flag = 1:有键按下;
bit PreKey_Flag = 0;
extern uint8 code gImage_s1[1024];
void ext0(void) interrupt 0
{ _nop_();
}
void time0(void) interrupt 1
{
T100ms++;
}
void ext1(void) interrupt 2
{
OS_ENTER_CRITICAL();
if(Key_Date)
Key_Value1|=0x8000;
Key_Flag = 1;
Counter++;
if(Counter==11)
{
Key_Value1>>=6;
Cc++;
Key_Value = Key_Value1;
PreKey_Char = Key_Char;
PreKey_Flag = Key_Flag;
Get_KeyChar(); //转换按键
Ps2_SendKey(); //发送按键到串口
Counter = 0;
Key_Value = 0;
Key_Value1 = 0;
}
Key_Value1>>=1;
OS_EXIT_CRITICAL();
}
void time1(void) interrupt 3
{ _nop_();
}
void Uart(void) interrupt 4
{ _nop_();
}
void main(void)
{
UART_Init();
TMOD = (TMOD & 0XF0) | 0X01; //定时器0,方式1,16位定时器
TL0 = 0xC0;
TH0 = 0x63; //T0初值为0x63C0, 20ms溢出一次
PT0 = 0;
ET0 = 1; //定时器0溢出中断允许位,1:允许;0:禁止
TF0 = 0;
DIS_CS=1;
DIS_RD=1;
DIS_WR=1;
DIS_A0=1;
LCD_DataPort=0xff;
LCD_Initial();
Delayms(100);
PX1 = 1;
IT1 = 1;//下降沿触发
EX1 = 1;//允许外部1中断
EX0 = 0;
EA = 1;
LCD_ClearScreen();
UART_SendChar('a');
TR0 = 1; //定时器运行控制位。1:启动定时器; 0:停止定时器
while(1)
{
while(T100ms>100)
{
UART_SendChar('b');
Lcd_ShowPics(0,0,40,240,bmp);
T100ms = 0;
}
_nop_();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -