📄 st7920.c
字号:
#include "st7920.h"
#include "common.h"
#include <iom32v.h>
#include <macros.h>
#define set_cs PORTB|=0X20 ;PORTB|=0X20
#define clr_cs PORTB&=0XDF ;PORTB&=0XDF
#define set_sclk PORTB|=0X80;PORTB|=0X80
#define clr_sclk PORTB&=0X7F ;PORTB&=0X7f
#define set_std PORTB|=0X40 ;PORTB|=0X40
#define clr_std PORTB&=0XBf ;PORTB&=0XBf
#define set_reset PORTD|=0X08; PORTD|=0X08
#define clr_reset PORTD&=0XF7 ;PORTD&=0XF7
void start_ocm4x8c(void)
{
//DDRC=0XFF;
//DDRD=0XFF;
set_std;set_std;
clr_sclk;clr_sclk;
set_cs;set_cs;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
clr_std;clr_std;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
}
void write_ocm4x8c(unsigned char dat)
{unsigned char i;
clr_std;clr_std;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x80)==0x80)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x40)==0x40)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x20)==0x20)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x10)==0x10)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
clr_std;clr_std;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x08)==0x08)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x04)==0x04)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x02)==0x02)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x01)==0x01)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
clr_std;clr_std;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
clr_cs;clr_cs;
set_std;set_std;
}
void write_ocm4x16c(unsigned char dat)
{unsigned char i;
clr_std;clr_std;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x80)==0x80)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x40)==0x40)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x20)==0x20)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x10)==0x10)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x08)==0x08)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x04)==0x04)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x02)==0x02)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
if((dat&0x01)==0x01)
{set_std;set_std;}
else
{clr_std;clr_std;}
set_sclk;set_sclk;
clr_sclk;clr_sclk;
clr_cs;clr_cs;
set_std;set_std;
}
void write_ocm4x8_data(unsigned char dat)
{
unsigned char dd;
start_ocm4x8c();
set_std;set_std;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
dd=dat;
write_ocm4x8c(dd);
}
/*
void write_ocm4x16_data(unsigned char dat)
{
unsigned char dd;
start_ocm4x8c();
set_std;set_std;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
dd=dat;
write_ocm4x8c(dd);
}
*/
void write_ocm4x8_code(unsigned char dat)
{
unsigned char dd;
start_ocm4x8c();
clr_std;clr_std;
set_sclk;set_sclk;
clr_sclk;clr_sclk;
dd=dat;
write_ocm4x8c(dd);
}
void ocm4x8_init(void)
{
clr_reset;clr_reset;
set_reset;set_reset;
write_ocm4x8_code(0x30);
delay_1ms(10);
write_ocm4x8_code(0x01);
delay_1ms(10);
write_ocm4x8_code(0x02);
delay_1ms(10);
write_ocm4x8_code(0x06);
delay_1ms(10);
write_ocm4x8_code(0x0c);
delay_1ms(10);
}
void asc_tran_1(unsigned char y,unsigned char x,unsigned char *hz_p)
{unsigned char i;
//while((*hz_p)!=0)
{
if(y==0)
i=x;
if(y==1)
i=x+0x10;
if(y==2)
i=x+0x08;
if(y==3)
i=x+0x18;
write_ocm4x8_code(0x80|i);
// write_ocm4x16_data(*hz_p);
//for(i=0;i<16;i++)
while((*hz_p)!=0)
{
write_ocm4x8_data(*hz_p);
hz_p++;
}
// hz_p++;
/*
write_ocm4x8_data(*hz_p);
hz_p++;
x++;
*/
}
}
void hz_tran1(unsigned char y,unsigned char x,unsigned char *hz_p)
{unsigned char i;
// write_ocm4x8_code(0x80);
// write_ocm4x8_data(*hz_p);
// hz_p++;
// write_ocm4x8_data(*hz_p);
while((*hz_p)!=0)
{if(y==0)
i=x;
if(y==1)
i=x+0x10;
if(y==2)
i=x+0x08;
if(y==3)
i=x+0x18;
write_ocm4x8_code(0x80+i);
write_ocm4x8_data(*hz_p);
hz_p++;
write_ocm4x8_data(*hz_p);
hz_p++;
x++;
}
}
void lcd_init(void)
{
hz_tran1(0,0,"状态 ");
asc_tran_1(0,2,": ");
hz_tran1(0,3,"待机");
hz_tran1(0,6,""); //半旗
// hz_tran1(0,4,"新液位");
// asc_tran_1(0,4,"W=??.?KG");
hz_tran1(1,0,"高度");
asc_tran_1(1,2,": 000cm");
// asc_tran_1(1,7,"00");
//asc_tran_1(2,0,"FH");
hz_tran1(2,0,"时间");
asc_tran_1(2,2,": 000 ");
hz_tran1(2,5,"秒");
//asc_tran_1(3,0,"FL");
hz_tran1(3,0,"设置时间");
/*
asc_tran_1(3,4,"F1");
hz_tran1(3,5,"关");
asc_tran_1(3,6,"F2");
hz_tran1(3,7,"关");
*/
}
void lcd_init_other(void)
{
hz_tran1(0,0,"从机 ");
asc_tran_1(0,2,"1 ");
hz_tran1(0,4,"新液位");
asc_tran_1(0,7,"??");
hz_tran1(1,0,"设定液位");
asc_tran_1(1,4,"??CM");
//asc_tran_1(1,7,"00");
//asc_tran_1(2,0,"FH");
hz_tran1(2,0,"当前液位");
asc_tran_1(2,4,"??.?CM");
//asc_tran_1(3,0,"FL");
hz_tran1(3,0," 无报警");
hz_tran1(3,5,"新号");
asc_tran_1(3,7,":?");
}
void clr_lcd(void)
{
write_ocm4x8_code(0x01);
delay_1ms(10);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -