📄 panel.c
字号:
//-------------------------------------------------------------------------
// Filename : Panel.c
// Language : C for AT89S8252
// Revision : 1.0
// Initial Date : 24/06/2000
// Last Modify :
// System clock : 24.00MHZ
// Description : Lcd40x4 Display Routine Function For "RS" or "KOREA"
// P1 is used display Port: P1.3=EN2 P1.2=EN1 P1.0=RS
//-------------------------------------------------------------------------
#define _PANEL_H_
#include <reg52.h>
#include "Panel.h"
#undef _PANEL_H_
//-------------------------------------------------------------------------
#define DispPort P1
#define KeypadPort P0
#define OutputPort P2
#define BAUD19200 65536-(24000000/(32*19200))
sbit K0 = P0^0;
sbit K1 = P0^1;
sbit K2 = P0^2;
sbit K3 = P0^3;
sbit K4 = P0^4;
sbit K5 = P0^5;
sbit K6 = P0^6;
sbit K7 = P0^7;
//-------------------------------------------------------------------------
#define MSB_PERIOD -20000/256
#define LSB_PERIOD -20000%256
//--------------------------------------------------------------------------
unsigned char outp_buf=0xff;
unsigned char key_row_ptr=0;
unsigned char key_ptr;
unsigned char inc_ref;
char manual_buf[4];
//-------------------------------------------------------------------------
// function prototype
void _init_serial(unsigned int);
void _set_display (char, char);
void _res_display (char, char);
void _write_char (char, char);
void _delay5ms (void);
void _delay200us (void);
void _delay100us (void);
void _delay5us (void);
//-------------------------------------------------------------------------
//
// Routinues for 40x4 LCD Display.
//
//-------------------------------------------------------------------------
void _initial_disp (void)
{
_res_display(0, 0x30);
_res_display(1, 0x30);
_delay5ms();
_res_display(0, 0x30);
_res_display(1, 0x30);
_delay200us();
_res_display(0, 0x30);
_res_display(1, 0x30);
_delay200us();
_res_display(0, 0x20);
_res_display(1, 0x20);
_delay200us();
_set_display(0, 0x2c);
_set_display(1, 0x2c);
_delay200us();
_set_display(0, 0x0f);
_set_display(1, 0x0f);
_delay200us();
_set_display(0, 0x01);
_set_display(1, 0x01);
_delay200us();
_set_display(0, 0x06);
_set_display(1, 0x06);
_delay5ms();
_set_display(0, 0x0c);
_set_display(1, 0x0c);
}
//-------------------------------------------------------------------------
void _clear_disp (void)
{
_set_display(0, 0x01);
_set_display(1, 0x01);
_delay5ms();
}
//-------------------------------------------------------------------------
void _cursor_switch (char r,char stus)
{
switch(r){
case 0 :
case 1 :
r = 0;
break;
case 2 :
case 3 :
r = 1;
}
if (stus == ON )
_set_display(r, 0x0f); // r row ON ,r=0 ,1&2 row r=1 3&4 row
else
_set_display(r, 0x0c); // r row OFF
}
//-------------------------------------------------------------------------
void _cursor_position (char r, char c)
{
switch(r){
case 1 :
c += 0x40;
case 0 :
c |= 0x80;
_set_display(0,c);
break;
case 3 :
c += 0x40;
case 2 :
c |= 0x80;
_set_display(1,c);
}
}
//-------------------------------------------------------------------------
void _disp_msge (char r, char c, char *msge)
{
char i=0;
switch(r){
case 1 :
c += 0x40;
case 0 :
_set_display(0, c | 0x80);
while (msge[i] != 0)
_write_char(0, msge[i++]);
break;
case 3 :
c += 0x40;
case 2 :
_set_display(1, c | 0x80);
while (msge[i] != 0)
_write_char(1, msge[i++]);
break;
}
}
//-------------------------------------------------------------------------
void _disp_char (char r, char c, char v)
{
switch (r) {
case 0 :
_set_display(0,0x80+c);
r = 0;
break;
case 1 :
_set_display(0,0xc0+c);
r = 0;
break;
case 2 :
_set_display(1,0x80+c);
r = 1;
break;
case 3 :
_set_display(1,0xc0+c);
r = 1;
break;
}
_write_char(r,(char)('0'+(v/10)));
_write_char(r,(char)('0'+(v%10)));
}
//-------------------------------------------------------------------------
/* void _write_ascii (char r, char c, char ascii)
{
switch (r) {
case 0 :
_set_display(0,0x80+c);
r = 0;
break;
case 1 :
_set_display(0,0xc0+c);
r = 0;
break;
case 2 :
_set_display(1,0x80+c);
r = 1;
break;
case 3 :
_set_display(1,0xc0+c);
r = 1;
break;
}
_write_char(r,ascii);
} */
//-------------------------------------------------------------------------
void _disp_interge (char r, char c, unsigned v)
{
switch(r){
case 0 :
_set_display(0,0x80+c);
r = 0;
break;
case 1 :
_set_display(0,0xc0+c);
r = 0;
break;
case 2 :
_set_display(1,0x80+c);
r = 1;
break;
case 3 :
_set_display(1,0xc0+c);
r = 1;
break;
}
_write_char(r,(char)('0'+(v/1000)));
v %= 1000;
_write_char(r,(char)('0'+(v/100)));
v %= 100;
_write_char(r,(char)('0'+(v/10)));
_write_char(r,(char)('0'+(v%10)));
}
//-------------------------------------------------------------------------
void _disp_float (char r, char c, int v)
{
switch(r){
case 0 :
_set_display(0,0x80+c);
r = 0;
break;
case 1 :
_set_display(0,0xc0+c);
r = 0;
break;
case 2 :
_set_display(1,0x80+c);
r = 1;
break;
case 3 :
_set_display(1,0xc0+c);
r = 1;
break;
}
if(v>999)
_write_char(r,(char)('0'+(v/1000)));
v %= 1000;
_write_char(r,(char)('0'+(v/100)));
v %= 100;
_write_char(r,(char)('0'+(v/10)));
_write_char(r,'.');
_write_char(r,(char)('0'+(v%10)));
}
//-------------------------------------------------------------------------
void _disp_win (char *win)
{
unsigned char i;
_set_display(0,0x80);
for (i=0; i<40; i++)
_write_char(0,win[i]); // write char. to row 0 in display.
_set_display(0,0xc0);
for (i=40; i<80; i++)
_write_char(0,win[i]); // write char. to row 1 in display.
_set_display(1,0x80);
for (i=80; i<120; i++)
_write_char(1,win[i]); // write char. to row 2 in display.
_set_display(1,0xc0);
for (i=120; i<160; i++)
_write_char(1,win[i]); // write char. to row 3 in display.
}
//-------------------------------------------------------------------------
void _set_display (char s, char d)
{
char buf = d;
switch (s){
case 0 :
buf &= 0xf0;
buf |= 0x04;
DispPort = buf;
DispPort = 0x02;
_delay100us();
buf = (d<<4)|0x04;
DispPort = buf;
DispPort = buf & 0x02; //==0
_delay100us();
break;
case 1 :
buf &= 0xf0;
buf |= 0x08;
DispPort = buf;
DispPort = 0x02;
_delay100us();
buf = (d<<4)|0x08;
DispPort = buf;
DispPort = 0x02;
_delay100us();
}
}
//-------------------------------------------------------------------------
void _res_display (char s, char d)
{
char buf = d;
switch (s){
case 0 :
buf &= 0xf0;
buf |= 0x04;
DispPort = buf;
DispPort = 0x02;
break;
case 1 :
buf &= 0xf0;
buf |= 0x08;
DispPort = buf;
DispPort = 0x02;
}
_delay100us();
}
//-------------------------------------------------------------------------
void _write_char (char s, char c)
{
char buf = c;
switch (s) {
case 0 :
buf &= 0xf0;
buf |= 0x05;
DispPort = buf;
DispPort = 0x03;
_delay100us();
buf = (c<<4)|0x05;
DispPort = buf;
DispPort = 0x03;
_delay100us();
break;
case 1 :
buf &= 0xf0;
buf |= 0x09;
DispPort = buf;
DispPort = 0x03;
_delay100us();
buf = (c<<4)|0x09;
DispPort = buf;
DispPort = 0x03;
_delay100us();
}
}
//-------------------------------------------------------------------------
void _delay5ms(void)
{
unsigned tref = 900;
while (tref != 0)
tref--;
}
//-------------------------------------------------------------------------
void _delay200us (void)
{
char tref = 64;
while (tref--);
}
//-------------------------------------------------------------------------
void _delay100us (void)
{
char tref = 32;
while (tref--);
}
//-------------------------------------------------------------------------
/*
void _outp_bit (char f , char s)
{
switch (f){
case OFF :
if (s == OFF)
outp_buf |= 00000100;
else
outp_buf &= 11111011;
break;
case PASS :
if (s == OFF)
outp_buf |= 00010000;
else
outp_buf &= 11101111;
break;
case FAIL :
if (s == OFF)
outp_buf |= 00100000;
else
outp_buf &= 11011111;
break;
case AUTO :
if (s == OFF)
outp_buf |= 00000001;
else
outp_buf &= 11111110;
break;
case MANU :
if (s == OFF)
outp_buf |= 00000010;
else
outp_buf &= 11111101;
break;
case TEST :
if (s == OFF)
outp_buf |= 00000100;
else
outp_buf &= 11111011;
break;
case BUZZER :
if (s == OFF)
outp_buf |= 01000000;
else
outp_buf &= 10111111;
}
OutputPort = outp_buf;
}
*/
//
-------------------------------------------------------------------------
ar _read_keypad(void)
{
unsigned char key_val;
K2=0;
K0=1;K1=1;K3=1;
if(K4==0)key_val=F1;
if(K5==0)key_val=F2;
if(K6==0)key_val=F3;
if(K7==0)key_val=F4;
K3=0;
K0=1;K1=1;K2=1;
if(K4==0) key_val=7;
if(K5==0) key_val=8;
if(K6==0) key_val=9;
if(K7==0) key_val=0;
K0=0;
K1=1;K2=1;K3=1;
if(K4==0) key_val=4;
if(K5==0) key_val=5;
if(K6==0) key_val=6;
if(K7==0) key_val=F5;
K1=0;
K0=1;K2=1;K3=1;
if(K4==0) key_val=1;
if(K5==0) key_val=2;
if(K6==0) key_val=3;
if(K7==0) key_val=F6;
return(key_val);
}
//-------------------------------------------------------------------------
void _set_delay(char delay)
{
unsigned time;
time = tick_clock+delay; // read current time
while (time != tick_clock);
}
//-------------------------------------------------------------------------
void _init_system(void)
{
// setup timer0 interrupt initalization
tick_clock = 0;
TH0 = MSB_PERIOD;
TL0 = LSB_PERIOD;
TMOD |= 0x01;
TR0 = ON;
ET0 = ON;
EA = ON;
_init_serial(BAUD19200);
_initial_disp();
_set_delay(30);
}
//-------------------------------------------------------------------------
// Timer0 interrupt service function
// Executes each 10ms @24MHZ Crystal clock
//-------------------------------------------------------------------------
timer0() interrupt 1 using 2 // Int Vector at 000BH, Reg Bank 2
{
TH0 = MSB_PERIOD;
TL0 = LSB_PERIOD;
tick_clock++;
K0=0;K1=0;K2=0;K3=0;
if(K4==0||K5==0||K6==0||K7==0)
{
key_down = _read_keypad();
key_flag=1;
}
else
key_flag=0;
if (++inc_ref == 10) {
ref_100ms++;
inc_ref = OFF;
}
}
//--------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -