📄 oleddisp.c
字号:
if(temp[0]<0X0D78&&temp[1]<0X0D78&&temp[2]<0X0D78)
poweroff();
}
}
*/
void battery_detect() {
temp[2]=temp[1];temp[1]=temp[0];temp[0]=ADvalue;
if(temp[0]>=0X0EE2&&temp[1]>=0X0EE2&&temp[2]>=0X0EE2)
battery(5);
else if ((temp[0]<0X0EE2&&temp[0]>=0X0E82)&&(temp[1]<0X0EE2&&temp[1]>=0X0E82)&&(temp[2]<0X0EE2&&temp[2]>=0X0E82))
battery(4);
else if ((temp[0]<0X0E82&&temp[0]>=0X0E23)&&(temp[1]<0X0E82&&temp[1]>=0X0E23)&&(temp[2]<0X0E82&&temp[2]>=0X0E23))
battery(3);
else if ((temp[0]<0X0E23&&temp[0]>=0X0DE0)&&(temp[1]<0X0E23&&temp[1]>=0X0DE0)&&(temp[2]<0X0E23&&temp[2]>=0X0DE0))
battery(2);
else if ((temp[0]<0X0DE0&&temp[0]>=0X0D77)&&(temp[1]<0X0DE0&&temp[1]>=0X0D77)&&(temp[2]<0X0DE0&&temp[2]>=0X0D77))
battery(1);
else if ((temp[0]<0X0D77&&temp[0]>=0X0D51)&&(temp[1]<0X0D77&&temp[1]>=0X0D51)&&(temp[2]<0X0D77&&temp[2]>=0X0D51))
{battery(0);P3OUT|=BIT0;}
else {
if((temp[0]<0X0D51)&&(temp[1]<0X0D51)&&(temp[2]<0X0D51))
poweroff();
}
}
//====================================================
void write_address() { //设置地址显示
uchar j;
imagebuf=0x00;
for(j=34;j<100;j++) {
display(0,j);
}
clear_area(2,2);
set_address();
display_one(3);
clear_area(5,7);
}
void poweroff() { //关闭显示,进入低功耗模式
turnoff_oled();
TACTL|=MC0;
_BIS_SR(LPM3_bits);
}
void shutdown() { //停止工作,由外部唤醒
TACTL|=MC0;
turnoff_oled();
delay(100);
_BIS_SR(LPM4_bits);
}
void wakeup() {
TACTL&=~MC0;
turnon_oled();
LPM3_EXIT; //退出LPM3模式,转为活动模式
}
void address_access() { //地址已获取
P3OUT&=~0X01;
clear_area(2,3);
P3OUT|=0X01;
delay(100);
P3OUT&=~BIT1;
}
//====================================================
void read_library(uchar section,uchar position,uchar count) { //读取汉字库 区,位,第几个字
uchar haddress,maddress,laddress,i;
unsigned long int headaddress=0;
_DINT();
P1IE=0x00; //禁止P1中断
P1IFG=0X00;
P1DIR=0XFF; //P1设为输出
P1OUT=0XFF;
P4DIR=0X00;
P3OUT|=BIT3; //CS#=1;
P3OUT&=~BIT2; //CE=0;
P3OUT|=BIT6; //WR=1;
headaddress=(unsigned long int)((section-0xa1)*94+(position-0xa1))*32; //地址计算
laddress=(uchar)(headaddress&0x0000ff);
maddress=(uchar)((headaddress&0x00ff00)>>8);
haddress=(uchar)((headaddress&0xff0000)>>16);
P5OUT=(P5OUT&0XF8)+(haddress&0X07);
P2OUT=maddress;
for(i=0;i<32;i++) {
P1OUT=laddress+i;
_NOP();
P3OUT&=~BIT1; //OE=0;
_NOP();
lattice[i/16][count*16+(i&0x0f)]=P4IN;
_NOP();
P3OUT|=BIT1; //OE=1;
_NOP();
}
P4DIR=0XFF;
P3OUT|=BIT2; //CE=1
P3OUT&=~BIT3; //CS#=0;
P1OUT=0XFF;
P1DIR=0XF8; //引脚为输入
P1IFG=0X00; //清中断标志寄存器
P1IES|=BIT0; // 下降沿有效
P1IE|=BIT0; //允许P1.0中断
_EINT();
}
//=================================================================
void display_one(uchar page) { //信息框显示一行汉字 在第几页显示 范围0~6 //page 起始页
uchar j,next;
for(next=0;next<2;next++) {
P3OUT&=~BIT5; // DC=0;
read_status();
P4OUT=176+page+next; //set page address
write_signal();
read_status();
P4OUT=0x00; //set low address
write_signal();
read_status();
P4OUT=0x10; //set higher address
write_signal();
for(j=0;j<128;j++) {
imagebuf=lattice[next][j];
read_status();
P3OUT|=BIT5; //DC=1;
P4OUT=imagebuf; //从汉字点阵缓冲区读数
write_signal();
}
}
}
//=================================================================
void read_message(uchar item) { //读取一行短信息 8个汉字
uchar j;
for(j=0;j<8;j++)
read_library(message[item][2*j],message[item][2*j+1],j);
}
//=================================================================
//========================================================================
void press_key_login() { //请您按键报到 读入缓冲区
read_library(0xa1,0xa1,0);
read_library(0xc7,0xeb,1);
read_library(0xc4,0xfa,2);
read_library(0xb0,0xb4,3);
read_library(0xbc,0xfc,4);
read_library(0xb1,0xa8,5);
read_library(0xb5,0xbd,6);
read_library(0xa1,0xa1,7);
}
void insert_card_login() {
read_library(0xa1,0xa1,0);
read_library(0xc7,0xeb,1);
read_library(0xc4,0xfa,2);
read_library(0xb2,0xe5,3);
read_library(0xbf,0xa8,4);
read_library(0xb1,0xa8,5);
read_library(0xb5,0xbd,6);
read_library(0xa1,0xa1,7);
}
void press_key_vote() {
read_library(0xa1,0xa1,0);
read_library(0xc7,0xeb,1);
read_library(0xc4,0xfa,2);
read_library(0xb0,0xb4,3);
read_library(0xbc,0xfc,4);
read_library(0xb1,0xed,5);
read_library(0xbe,0xf6,6);
read_library(0xa1,0xa1,7);
}
void vote_end() {
read_library(0xa1,0xa1,0);
read_library(0xa1,0xa1,1);
read_library(0xb1,0xed,2);
read_library(0xbe,0xf6,3);
read_library(0xbd,0xe1,4);
read_library(0xca,0xf8,5);
read_library(0xa1,0xa1,6);
read_library(0xa1,0xa1,7);
}
//=====================================================================
void set_address() {
read_library(0xbe,0xaf,0);
read_library(0xb8,0xe6,1);
read_library(0xa3,0xba,2);
read_library(0xc9,0xe8,3);
read_library(0xd6,0xc3,4);
read_library(0xb5,0xd8,5);
read_library(0xd6,0xb7,6);
read_library(0xa3,0xa1,7);
}
void download_complete() {
read_library(0xa1,0xa1,0);
read_library(0xd0,0xc5,1);
read_library(0xcf,0xa2,2);
read_library(0xcf,0xc2,3);
read_library(0xd4,0xd8,4);
read_library(0xcd,0xea,5);
read_library(0xb3,0xc9,6);
read_library(0xa1,0xa1,7);
}
//======================================================================
void agree() {
read_library(0xa1,0xa1,0);
read_library(0xa1,0xa1,1);
read_library(0xa1,0xa1,2);
read_library(0xd4,0xde,3);
read_library(0xb3,0xc9,4);
read_library(0xa1,0xa1,5);
read_library(0xa1,0xa1,6);
read_library(0xa1,0xa1,7);
}
void disagree() {
read_library(0xa1,0xa1,0);
read_library(0xa1,0xa1,1);
read_library(0xa1,0xa1,2);
read_library(0xb7,0xb4,3);
read_library(0xb6,0xd4,4);
read_library(0xa1,0xa1,5);
read_library(0xa1,0xa1,6);
read_library(0xa1,0xa1,7);
}
void abstain() {
read_library(0xa1,0xa1,0);
read_library(0xa1,0xa1,1);
read_library(0xa1,0xa1,2);
read_library(0xc6,0xfa,3);
read_library(0xc8,0xa8,4);
read_library(0xa1,0xa1,5);
read_library(0xa1,0xa1,6);
read_library(0xa1,0xa1,7);
}
//================================================================
void message_pages(uchar item,uchar pages) { //短信页数显示
uchar j;
for(j=0;j<10;j++) { //显示 " / "
imagebuf=sign[118+j];
display(0,83+j);
}
for(j=32;j<38;j++) {
imagebuf=sign[(item+1)*6+j];
display(0,45+j);
imagebuf=sign[(pages+1)*6+j];
display(0,61+j);
}
}
//=============================================================
#pragma vector=TIMERA0_VECTOR //定时器中断
__interrupt void Timer_A(void) {
//P6OUT^=BIT1;
led^=BIT0;
}
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B(void) {
//battery_detect();
P3OUT^=BIT0;
}
//===============================================================
void protocol(uchar command0,uchar data0,uchar data1) {
uchar var0,var1,x;
flag=0;
if((command0&0x80)==0x80) { //短信接收
var0=(command0&0x70)>>4;
var1=command0&0x0f;
message[var0][2*var1]=data0;
message[var0][2*var1+1]=data1;
x=pagenum;
pagenum=var0>x?var0:x;
}
else if(command0==0x40) { //多项表决
if(data0==0x01) {
read_message(0);display_one(2);message_pages(0,pagenum);clear_area(4,4);
}
else if(data0==0x02) {
read_message(1);display_one(2);message_pages(1,pagenum);clear_area(4,4);
}
else if(data0==0x03) {
read_message(2);display_one(2);message_pages(2,pagenum);clear_area(4,4);
}
else if(data0==0x04) {
read_message(3);display_one(2);message_pages(3,pagenum);clear_area(4,4);
}
else if(data0==0x05) {
read_message(4);display_one(2);message_pages(4,pagenum);clear_area(4,4);
}
else if(data0==0x06) {
read_message(5);display_one(2);message_pages(5,pagenum);clear_area(4,4);
}
else if(data0==0x07) {
read_message(6);display_one(2);message_pages(6,pagenum);clear_area(4,4);
}
else if(data0==0x08) {
read_message(7);display_one(2);message_pages(7,pagenum);clear_area(4,4);
}
else _NOP();
if(data1==0x01) {
clear_area(5,7);
}
else if(data1==0x02) {
press_key_vote();display_one(5);
}
else if(data1==0x03) {
agree();display_one(5);
}
else if(data1==0x04) {
disagree();display_one(5);
}
else if(data1==0x05) {
abstain();display_one(5);
}
else _NOP();
}
else if(command0==0x30) { //单项表决
if(data0==0x01) {
vote_end();display_one(3);clear_area(2,2);clear_area(5,7);
}
else if(data0==0x02) {
press_key_vote();display_one(3);clear_area(2,2);clear_area(5,7);
}
else if(data0==0x03) {
agree();display_one(3);clear_area(2,2);clear_area(5,7);
}
else if(data0==0x04) {
disagree();display_one(3);clear_area(2,2);clear_area(5,7);
}
else if(data0==0x05) {
abstain();display_one(3);clear_area(2,2);clear_area(5,7);
}
else if(data0==0x06) {
clear_area(3,7);
}
else _NOP();
}
else if(command0==0x20) { //报到信息
if(data0==0x01) {
login_status(0);
}
else if(data0==0x02) {
login_status(1);clear_area(2,7);
}
else if(data0==0x03) {
login_status(0);press_key_login();display_one(3);clear_area(2,2);clear_area(5,7);
}
else if(data0==0x04) {
login_status(0);insert_card_login();display_one(3);clear_area(2,2);clear_area(5,7);
}
else _NOP();
}
else if(command0==0x11) {
if(data0==0x01) {
read_message(0);display_one(2);message_pages(0,pagenum/2);clear_area(4,4);
read_message(1);display_one(5);
}
else if(data0==0x02){
read_message(2);display_one(2);message_pages(1,pagenum/2);clear_area(4,4);
read_message(3);display_one(5);
}
else if(data0==0x03){
read_message(4);display_one(2);message_pages(2,pagenum/2);clear_area(4,4);
read_message(5);display_one(5);
}
else if(data0==0x04){
read_message(6);display_one(2);message_pages(3,pagenum/2);clear_area(4,4);
read_message(7);display_one(5);
}
else if(data0==0x05){
read_message(0);display_one(2);message_pages(0,pagenum);clear_area(4,4);
}
else if(data0==0x06){
read_message(1);display_one(2);message_pages(1,pagenum);clear_area(4,4);
}
else if(data0==0x07){
read_message(2);display_one(2);message_pages(2,pagenum);clear_area(4,4);
}
else if(data0==0x08){
read_message(3);display_one(2);message_pages(3,pagenum);clear_area(4,4);
}
else if(data0==0x09){
read_message(4);display_one(2);message_pages(4,pagenum);clear_area(4,4);
}
else if(data0==0x0a){
read_message(5);display_one(2);message_pages(5,pagenum);clear_area(4,4);
}
else if(data0==0x0b){
read_message(6);display_one(2);message_pages(6,pagenum);clear_area(4,4);
}
else if(data0==0x0c){
read_message(7);display_one(2);message_pages(7,pagenum);clear_area(4,4);
}
else if(data0==0x11) {
write_address();
}
else if(data0==0x12) {
address_access();
}
else if(data0==0x13)
clear_area(2,3);
else if(data0==0x21)
P3OUT|=BIT1;
else if(data0==0x22)
P3OUT&=~BIT1;
else if(data0==0x31)
turnon_oled();
else if(data0==0x32)
turnoff_oled();
else if(data0==0x41)
poweroff();
else if(data0==0x42)
shutdown();
else if(data0==0x43)
wakeup();
else _NOP();
}
else if(command0==0x10) { //系统信息 data0 高半字节为信号值,低半字节为通道号
var0=(data0&0xf0)>>4;
var1=data0&0x0f;
signal(var0);
address(var1,data1);
}
else
_NOP();
}
//====================================================================
#pragma vector=PORT1_VECTOR
__interrupt void communicate(void) {
_DINT();
if(P1IFG&0X01) {
//wakeup();
for(bytes=0;bytes<3;bytes++) {
rxbuf=0x00;
for(k=0;k<8;k++) {
while((P1IN&BIT2)==BIT2);
//rxbuf=P1IN&BIT1;
rxbuf=rxbuf<<1;
_NOP();
if((P1IN&BIT1)==BIT1) {
rxbuf=rxbuf|0x01;
}
//else rxbuf=rxbuf&0xfe;
//rxbuf=rxbuf<<1;
while((P1IN&BIT2)==0);
}
databuf[bytes]=rxbuf;
}
}
P1IFG=0X00;
flag=1;
_EINT();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -