📄 master.c
字号:
#include <comm.h>
#include <lcd.h>
#include <key.h>
#include <master.h>
#define MAIN_MENU_PRC 0x00
#define status_view 0x01
#define open_outdoor_set 0x02
#define close_outdoor_set 0x03
#define open_insidedoor_set 0x04
#define close_insidedoor_set 0x05
#define delete_record 0x15
#define SETUP_CLOCK 0x07
#define control_door_time 0x08
#define buzzle_time 0x10
#define address_set 0x11
#define clock_set 0x12
#define data_rec 0x13
#define abnomity_data_rec 0x14
#define communication_set 0x16
#define control_mode_set 0x17
#define SP_EXIT_SETUP 0XFF
///////////////////////////////////////////
struct
{
uchar up;
uchar down;
uchar win_idx;
uchar menu_idx;
uchar upbak;
uchar downbak;
uchar win_idxbak;
uchar flag;
} window;
//globle var define
uchar display_status;
uchar LCD_BUF[2][16];
uchar process;
volatile uchar led_status;
volatile uchar di_back;
volatile uchar key_save_port;
volatile uchar key_press_flag,keyin_point, keyout_point,interrupt_request;
volatile uchar key_buf[KEY_BUFF_MAX],keychar;
//**************************************************
//************** interrupt define*******************
//**************************************************
void Timer0_ISR (void) interrupt 1
{
TR0=1;
TF0=0;
TH0=(65536-22118)/256;
TL0=(65536-22118)%256;
out_led();
}
void Timer3_ISR (void) interrupt 14{ //interval=5ms
TMR3CN&=0X7F;
TMR3H=(65536-55295)/256;
TMR3L=(65536-55295)%256;
Key_Scan();
}
void out_led(void){
SELECT_LED1_PORT;
EA= 0;
}
void Display_Menu(void){
uchar i;
for(i=0;i<2;i++){
RESET_WATCHDOG;
Print_Row_Rom(i,MenuMain[window.up+i]);
}
LCD_BUF[window.win_idx-window.up][0]=0X20;
LCD_BUF[window.win_idx-window.up][1]=0X84;
Refresh_LCD_Screen();
}
void Main_Menu_Display(void)
{
window.menu_idx=10;
window.up=0;
window.down=3;
window.win_idx=0;
Display_Menu();
process=MAIN_MENU_PRC;
}
uchar Setup_Process (void){
Main_Menu_Display();
Key_Buffer_Clear();
while(1) {
RESET_WATCHDOG;
if((interrupt_request&KEY_PRESS)!=0){ //if key press
keychar=Key_Get();
switch (process) {
case MAIN_MENU_PRC:
Select_Main_Project();
break;
case status_view:
break;
case control_door_time:
break;
case buzzle_time:
break;
case address_set: //地址设置
break;
case SETUP_CLOCK:
break;
case communication_set: //通信设置
break;
case data_rec: //事件记录
break;
case abnomity_data_rec: //异常事件记录
break;
case open_outdoor_set: //开外门时间设置
break;
case close_outdoor_set://关外门时间设置
break;
case open_insidedoor_set://开内门时间设置
break;
case close_insidedoor_set://关内门时间设置
break;
case delete_record:
break;
case control_mode_set:
break;
}
}
}
}
void Win_Shift_Up(void){
if(window.win_idx>window.up) window.win_idx--;
else if(window.win_idx==window.up)
{
if(window.up>0){window.up--;window.down--;window.win_idx--;}
else if(window.up==0)
{
window.down=window.menu_idx-1;
window.up=window.menu_idx-4;
window.win_idx=window.menu_idx-1;
}
}
}
void Win_Shift_Down(void){
if(window.win_idx<window.down) window.win_idx++;
else if(window.win_idx==window.down)
{
if(window.down<(window.menu_idx-1))
{window.up++;window.down++;window.win_idx++;}
else if(window.down==window.menu_idx-1)
{
window.up=0;window.down=3;window.win_idx=0;
}
}
}
void Win_Shift_Up_2(void){
if(window.win_idx==0) {
window.win_idx=2;
}
else{
window.win_idx=0;
}
}
void Win_Shift_Down_2(void){
if(window.win_idx==0) {
window.win_idx=2;
}
else{
window.win_idx=0;
}
}
//主菜单选择
void Select_Main_Project(void){
switch(keychar)
{
case KEY_UP:
Win_Shift_Up();
Display_Menu();
Refresh_LCD_Screen();
break;
case KEY_DOWN:
Win_Shift_Down();
Display_Menu();
Refresh_LCD_Screen();
break;
case KEY_ENTER:
switch(window.win_idx)
{
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
break;
default:
break;
}
break;
default:
break;
}
}
void Ini_Var(void){
led_status=0xff;
window.upbak=0;
window.downbak=3;
window.win_idxbak=0;
window.up=0;
window.down=1;
}
void Display_PownON_Screen(void){
uchar i;
for(i=0;i<4;i++) Print_Row_Rom(i,POWNON_SCREEN[i]);
Refresh_LCD_Screen();
}
void config (void) {
uint n;
WDTCN = 0x07; // Watchdog Timer Control Register
// WDTCN = 0xDE; // Disable WDT
// WDTCN = 0xAD;
WDTCN = 0xA5;
WDTCN = 0xff;
XBR0 = 0x05; // XBAR0: Initial Reset Value
XBR1 = 0; // XBAR1: Initial Reset Value
XBR2 = 0x44; // XBAR2: Initial Reset Value
P0MDOUT = 0x50; // Output configuration for P0
P1MDOUT = 0xeF; // Output configuration for P1
P2MDOUT = 0xFF; // Output configuration for P2
P3MDOUT = 0x3f; // Output configuration for P3
P1MDIN = 0xFF; // Input configuration for P1
//----------------------------------------------------------------
// Oscillator Configuration
//----------------------------------------------------------------
OSCXCN = 0x66; // EXTERNAL Oscillator Control Register
for (n = 0; n < 10000; n++) RESET_WATCHDOG; // wait for osc to start
while ( (OSCXCN & 0x80) == 0 )RESET_WATCHDOG; // wait for xtal to stabilize
OSCICN = 0x08; // Internal Oscillator Control Register
}
void Timer0_Init (int counts){
CKCON|=0x8;
TMOD|=0x1; //16Bit
TH0=(65536-counts)/256;
TL0=(65536-counts)%256;
IE|= 0x2;
TR0=1;
}
void Timer3_Init (int counts){
TMR3CN=0x06;
TMR3H=(65536-counts)/256;
TMR3L=(65536-counts)%256;
EIE2|=0X01;
}
void Cursor_Inc(uchar operation)
{//0-9
if(operation=='+')
{
if(LCD_BUF[window.up][window.down]<0x39)
LCD_BUF[window.up][window.down]++;
else LCD_BUF[window.up][window.down]=0x30;
}
else if(operation=='-')
{
if(LCD_BUF[window.up][window.down]>0x30)
LCD_BUF[window.up][window.down]--;
else LCD_BUF[window.up][window.down]=0x39;
}
}
void main (void){
config();
Ini_LCD();
Timer0_Init(22118);
Timer3_Init(22118);
Ini_Var();
Key_Initialize_Wait();
EA=1;
Display_PownON_Screen();
Refresh_LCD_Screen();
while(1){
RESET_WATCHDOG;
if((interrupt_request&KEY_PRESS)!=0){
keychar=Key_Get();
if(keychar==KEY_ENTER) Setup_Process();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -