📄 main.c
字号:
#include "reg52.h"
#include "word.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*********************************************
key idenfiti
*******************************************/
#define FUNC 1
#define STOP 3
#define RESET 2
#define UP 4
#define FWD 7
#define FORWARD 8
#define PRG 5
#define REV 6
#define DOWN 9
#define FORDOWN 10
#define FORUP 11
/*******************************************
口线定义
******************************************/
sbit CTK = P3^3;
sbit SDA = P3^7;
sbit SCLK = P3^6;
sbit WP = P3^5;
sbit CTCOM1 = P2^7;
sbit CTCOM2 = P2^6;
sbit CTCOM3 = P1^6;
sbit CTCOM4 = P1^7;
/*********************************************
存储器分配地址
********************************************/
#define FF03 0
#define FF04 3
#define FF05 6
#define FF06 9
#define FF07 12
#define FF08 19
#define FF09 26
#define FF01 33
#define FF02 34
#define FF10 35
#define FF11 36
#define FF12 42
#define FF13 46
#define FF14 47
#define FF15 48
#define FF16 51
#define FF17 54
#define FF18 59
#define FF20 65
#define FF21 69
#define FF22 72
#define FF23 76
#define FF24 80
#define FF25 84
#define FF26 88
#define FF27 90
#define FF30 91
#define FF31 94
#define FF33 96
#define FF34 100
#define FF35 103
#define FF36 105
#define FF40 106
#define FF41 109
#define FE01 112
#define FE02 114
#define FE03 116
#define FE04 118
#define FE05 120
#define FE06 122
#define FE07 124
#define FE08 126
#define FE09 128
#define FE10 130
#define FE11 137
#define FE12 144
#define FE13 151
#define FE14 158
#define FE15 165
#define FE16 172
#define FE17 175
#define FE20 178
#define FE21 180
#define FE22 182
#define FE23 184
#define FE24 186
#define FE25 188
#define FE30 189
#define FE31 193
#define FE32 196
#define FE33 200
#define FE34 201
#define FE35 207
#define FE36 211
#define FE37 214
#define FC01 220
#define FC02 223
#define FC03 226
#define FC04 229
#define FC05 231
#define FC06 236
#define FC07 241
#define FC08 246
#define FC09 251
#define FC10 256
#define FC11 261
#define FC12 266
#define FC13 271
#define FC14 276
#define FC15 281
#define FC16 286
#define FC17 291
#define FC18 296
#define FC19 301
#define FC20 306
#define FC21 311
#define FC22 312
#define FC23 320
#define FC24 328
#define FC25 336
#define FC26 344
#define FC27 352
#define FC28 360
#define FC30 368
#define FC31 370
#define FC32 372
#define FC33 375
#define FP01 378
#define FP02 379
#define FP03 383
#define FP04 389
#define FP05 390
#define FP06 391
#define FP07 397
#define FP08 401
#define FP09 405
#define FH04 409
#define FH05 411
#define FH06 413
#define FH07 414
#define FH08 415
#define FH09 416
#define FH10 417
#define FH11 418
#define FH12 419
#define FH13 420
#define FH14 423
#define FH15 428
#define FH16 431
#define FH18 434
#define FH19 435
#define FH20 436
#define FH21 437
#define FH22 438
#define FH23 442
#define FH24 447
#define FH25 451
#define FH26 455
#define FH27 457
#define FH28 461
#define FH30 464
#define FU01 470
#define FU02 480
#define FU03 483
#define FU04 486
#define FU05 489
#define FU08 493
#define FU09 499
#define FU10 505
#define FU11 511
#define FU13 519
#define FU15 528
#define FU23 538
#define FU24 548
#define FU48 550
#define FU49 552
#define FU56 559
#define FU57 563
#define FU58 569
#define FU59 574
#define FU60 579
#define FU61 580
#define FSUM 36
#define ESUM 36
#define CSUM 32
#define PSUM 9
#define HSUM 26
#define USUM 21
bit F00;//数据保护标志位,F00=0数据可改变,F00=1数据不可改变
bit F02;//运行操作方式,F02=0 面板操作,F02=1端口操作方式。
//------------------------------------------------
sfr T2MOD = 0xC9;
extern void hex_asc(uchar *dst, uchar *src, uchar len);
extern void send(uchar *send_data,uchar len);
extern void fout(uint frc);
extern void comu(void);
extern void MuchPageDisp(uchar *DataPoint, uchar StartPage, uchar StartRow,uchar DispLenth,uchar Pagesum);
extern void LCM12864(uchar LcmDispData, uchar LcmFirstPage, uchar CharacterStartRow, uchar CharacterRowSum, bit IfNotRest);
extern void DispPage2(uchar *pinpoint,uchar startpage,uchar startrow,uchar wordsum,uchar disppagesum);
extern bit WRITE_256_SUB(uchar ADDR_CS,uchar ADDR_HI,uchar ADDR_LO,unsigned char *SP,unsigned int NO);
extern bit READ_256_SUB(uchar ADDR_CS,uchar ADDR_HI,uchar ADDR_LO,unsigned char *SP,unsigned int NO);
extern bit dotflag; //数码管显示小数点标记,0为小数点后2位,1为小数点后1位
//extern uchar idata receive[42];
void changepage(uchar pagecode,uchar floorcode,bit updown);
//--------------------------------------------------------------------------------------
uchar code keynumber[]={1,2,3,4,5,6,7,8,9};
uchar code led[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80}; //0,1,2,3,4,5,6,7,8,9,.
//-------------------------------------------------------------
uchar vindicatecount;
//disp
void DispPage2(uchar *pinpoint,uchar startpage,uchar startrow,uchar wordsum,uchar disppagesum)
{
uchar ttemp1,ttemp2,ttemp3,wordlengh;
uchar i,j,k;
for( i=0;i<disppagesum;i++)
{
ttemp2=startpage+i;
ttemp1=startrow;
for(j=0;j<wordsum;j++)
{ ttemp3=*(pinpoint+j);
if((ttemp3<40)||(ttemp3>190))
{
wordlengh=(i+1)*8;
k=i*8;
}
if((ttemp3>39)&&(ttemp3<191))
{
wordlengh=(i+1)*16;
k=i*16;
}
for(;k<wordlengh;k++)
{
LCM12864(word[ttemp3][k],ttemp2,ttemp1,1,0);
ttemp1++;
}
}
}
}
/********************************
鍵转换成数
*********************************/
uchar tige(uchar keydata)
{
uchar j=0xfe;
switch(keydata)
{
case 1: j=0; break;
case 2: j=1; break;
case 4: j=2; break;
default: j=0xfe; break;
}
return j;
}
/**************************************************
读按键
****************************************************/
#define key_scan P1
uchar key_store[3][3];
uchar key_code1;
uchar key_code2;
uchar key_code3;
uchar key_code;
bit key_close;//鍵码释放变量。
bit key_tag;//按键变量。
sbit L1=P1^0;
sbit L2=P1^1;
sbit L3=P1^2;
uchar key_count;
void readkey(void)
{
uchar tempp;
key_count++;
if(key_count>120)
{
key_count=0;
L1=0;
L2=1;
L3=1;
key_scan=key_scan|0x38;
tempp=key_scan;
tempp>>=3;
tempp&=0x07;
key_store[0][2]=key_store[0][1];
key_store[0][1]=key_store[0][0];
key_store[0][0]=tempp;
L1=1;
L2=0;
L3=1;
key_scan|=0x38;
tempp=key_scan;
tempp>>=3;
tempp&=0x07;
key_store[1][2]=key_store[1][1];
key_store[1][1]=key_store[1][0];
key_store[1][0]=tempp;
L1=1;
L2=1;
L3=0;
key_scan|=0x38;
tempp=key_scan;
tempp>>=3;
tempp&=0x07;
key_store[2][2]=key_store[2][1];
key_store[2][1]=key_store[2][0];
key_store[2][0]=tempp;
if(key_close)
{
tempp=key_store[0][0]&key_store[1][0]&key_store[2][0];
if(tempp==0x07)
key_close=0;
}
else
{
if(key_store[0][0]==key_store[0][1])
{
tempp=key_store[0][0];
tempp|=0xf8;
tempp=~tempp;
if(tempp!=0)
{
tempp=tige(tempp);
if(tempp<3)
{
key_code=keynumber[tempp];
key_tag=1;
key_close=1;
}
}
}
if(key_store[1][0]==key_store[1][1])
{
tempp=key_store[1][0];
tempp|=0xf8;
tempp=~tempp;
if(tempp!=0)
{
tempp=tige(tempp);
if(tempp<3)
{
tempp=tempp+3;
key_code=keynumber[tempp];
key_tag=1;
key_close=1;
}
}
}
if((key_store[2][0]&0x07)==0x01)
{
key_code=FORDOWN;
key_tag=1;
key_close=1;
}
if(key_store[2][0]==key_store[2][1])
{
tempp=key_store[2][0];
tempp|=0xf8;
tempp=~tempp;
if(tempp!=0)
{
tempp=tige(tempp);
if(tempp<3)
{
tempp=tempp+6;
key_code=keynumber[tempp];
key_tag=1;
key_close=1;
}
}
}
if(((key_store[1][0]&0x07)==0x06)&&((key_store[2][0]&0x07)==0x05))
key_code=FORUP;
}
}
}
/*********************************
液晶清屏函数
**********************************/
void cleardisp(void)
{
uchar i=0,j;
for(j=0;j<8;j++)
{
LCM12864(i,j,0,128,0);
}
}
/*********************************
停止界面函数
************************************/
void interfaceStop(void)
{
MuchPageDisp(stop,0, 10,67,4);
MuchPageDisp(plist0,4, 10,98,2);
MuchPageDisp(plist1,6, 10,90,2);
}
/*********************************
运行主界面函数
***********************************/
void interfaceRun(void)
{
MuchPageDisp(run,0, 10,52,4);
MuchPageDisp(fwd,1, 75,37,2);
MuchPageDisp(plist0,4, 10,98,2);
MuchPageDisp(plist1,6, 10,90,2);
}
/********************************
字体合并一行显示
*********************************/
uchar idata fingersbuf[10];
void combinline(uchar finger1,uchar finger2,finger3,finger4,uchar finger5,uchar finger6,uchar finger7,uchar finger8,uchar finger9,uchar finger10)
{
fingersbuf[0]=finger1;
fingersbuf[1]=finger2;
fingersbuf[2]=finger3;
fingersbuf[3]=finger4;
fingersbuf[4]=finger5;
fingersbuf[5]=finger6;
fingersbuf[6]=finger7;
fingersbuf[7]=finger8;
fingersbuf[8]=finger9;
fingersbuf[9]=finger10;
}
/************************************
数码管动态显示以及LCD刷新显示
*************************************/
uint time;
uint lcdrefreshtime;
uint lcdcount;
extern uchar dispnum[4];
uint back;
uchar page;
uchar state;
void intt0(void) interrupt 1
{
TH0=0x3C; //2.5ms
TL0=0xB0;
lcdrefreshtime++;
time++;
if(time>=50000)//for 0.05s
{
if((page==2)||(page==3)||(page==4))
{
back++;
if(back>30000)
{ back=0;
if(state==0)//stop condition
{
cleardisp();
interfaceStop();
page=0;
state=0;
}
if(state==1)//run condition
{
cleardisp();
interfaceRun();
page=1;
state=1;
}
}
}
}
if(lcdrefreshtime>50000)//0.05s
{ lcdrefreshtime=0;
lcdcount++;
if(lcdcount>=60000)
{ lcdcount=0;
if((state==0)&&(page==0))
{
cleardisp();
interfaceStop();
}
if((state==1)&&(page==1))
{
cleardisp();
interfaceRun();
}
}
}
//if(time>1600)
//{
// time=0;
// ddbit=!ddbit;
//}
//if(ledchange==4)
//{
// ledchange=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -