⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 包括ARM开发环境的使用和一些调试用的源程序
💻 C
📖 第 1 页 / 共 5 页
字号:
#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 + -