📄 main.c
字号:
#include "GLOBAL.H"
#include "vectors.h"
#include "monitor.h"
#include "stdlib.h"
#define scan0 PDR1_P12
#define scan1 PDR1_P13
#define scan2 PDR1_P14
#define scan3 PDR1_P15
#define scan4 PDR1_P11
#define SLD PDR5_P54
#define SCK PDR5_P53
#define SDIN PDR5_P55
#define BL PDR1_P10
uchar p10ms_req;
uint p100ms = 0;
uchar p100ms_req;
uchar p10s_flag = 0;
uint timeu[20];
volatile uint soft_timer;
uint temperature;
uchar LCD_OFFSET;
uchar setloop; //used for test
/*------------------ 初始化IO端口 --------------------------*/
void init_pio(void)
{
PDR1 = 0x1; /*数据寄存器*/
DDR1 = 0xbf; /*方向寄存器1:输出 0:输入*/
PDR2 = 0x00;
DDR2 = 0xff;
PDR3 = 0x0;
DDR3 = 0x87;
PDR4 = 0x4;
DDR4 = 0x2;
ADER = 0x1;
PDR5 = 0x0;
DDR5 = 0xfe;
ADCS = 0xc200;
}
/*----------用于LCD 偏置电压 --------*/
void init_ppg(void)
{
PRLL3 = 0x00;
PPGC3 = 0x69;
PPG23 = 0x4B;
PRL3 = (255 - 120) + (120 << 8);
PPGC3_PEN3 = 1;
}
// 周期定时器,每个周期一次
uchar ptime(uchar no,uint period)
{
if (timeu[no] > 0)
{
timeu[no]--;
return 0;
}
else
{
timeu[no] = period;
return 0xff;
}
}
void update_adc(void)
{
uint i;
i = ADCR & 0x3ff;
ADCS = 0xc200;
if (i < 108) i = 108; // 上限 50 度
if (i > 133) i = 133; // 下限 -10 度
temperature = (133 - i) * 12 / 5;
}
void update_dac(uint dac_val)
{
PRL3 = (255 - dac_val) + (dac_val << 8);
}
void InitReloadTimer(void)
{
TMRLR0 = 1249; /* set reload value to 2.5 ms */
TMCSR0 = 0x81B; /* prescaler 2us at 16 MHz */
ICR03 = 6; // 打开 ReloadTimer0 中断
TMRLR1 = 1249; /* set reload value to 2.5 ms */
TMCSR1 = 0x81B; /* prescaler 2us at 16 MHz */
// ICR12 = 6;
}
/* Reload Timer 0, 每 2.5 ms 中断一次 */
__interrupt void OnReloadTimer0(void)
{
TMCSR0_UF = 0; /* reset underflow interrupt request flag */
soft_timer++;
if (!(soft_timer & 3))
{
p10ms_req = 1;
}
if (!(soft_timer & 40))
{
update_dac(LCD_OFFSET); // 调整 LCD 偏置电压
p100ms_req = 1;
++p100ms;
if(p100ms == 1000)
{
p100ms = 0;
p10s_flag =1;
}
}
}
void p10ms(void)
{
uchar keycode;
if (ptime(0,1)) // 20ms 周期
{
keycode = read_key();
if(keycode)
process_key(keycode);
}
BL = 1; // 点亮 LCD 背光
if (ptime(1,9)) // 100ms 周期
{
// LCD 更新
display_menu();
}
}
main()
{
uint result;
uchar keycode;
char buff[20];
__DI();
InitIrqLevels();
InitReloadTimer();
init_eeprom();
init_pio();
init_ppg();
init_lcd();
__EI();
LCD_OFFSET = read_eerom(1006);
update_dac(LCD_OFFSET); // 调整 LCD 偏置电压
Clr_Scr();
//防止操作器与对象同时上电过程中初始化错误
display_str(0,2,"Initializing... ");
wait_ms(1000); //1s
//显示操作器软件版本号
display_str(0,0,"Software Version");
display_str(0,2,"================");
display_str(0,4," Modbus20070928 ");
display_str(0,6," ");
wait_ms(2000); //2s
//Test Area
/*
tmp11 = crc16(tesst1,6);
strcpy(buff," ");
sprfu(&buff[5],tmp11,0,5);
display_str(0,0,buff);
while(!setloop);
*/
//进入Modbus通信参数设置界面,包括设备地址、波特率、数据格式
//如果需要修改,则按动上下左右按键修改后,回车确认并保存,界面将切换到下一参数设计界面
//否则,直接按动按键采用默认值即可
edit_val = read_eerom(1010);//读本机地址
menu_ptr1 =0;
display_menus();
while(!setloop)
{
if (p10ms_req)
{
p10ms_req = 0;
if (ptime(0,1)) // 20ms 周期
{
keycode = read_key();
if(keycode)
process_keys(keycode);
}
if (ptime(1,9)) // 100ms 周期
{
display_menus();
}
}
}
set_cursor(0xff,0xff);
//根据上述设置,初始化串口1
init_uart1(ModbusBPS,Commformat); //通用变频器可设置(5,0):38400,8,N,1直接连接
//系统联机以实现读取或者修改参数,或者控制变频器的运行的功能
display_str(0,0," ");
display_str(0,2," ");
display_str(0,4," Connecting ");
display_str(0,6," ...... ");
while(1)
{
if (p10ms_req)
{
p10ms_req = 0;
p10ms();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -