#include #include #define uchar unsigned char #define uint unsigned int #define d_add XBYTE[0xd000] #define c_add XBYTE[0xd001] //160128液晶地址 #define dl XBYTE[0x9000] #define dh XBYTE[0x9001] #define count 16/4096.0 sbit p33=P3^3; uchar idata horizon=3; //波形显示水平起始地址 uchar idata vertical=16;//垂直像素16个点 uint bdata shuju; //用于判断数据的正负 sbit Acc_0=ACC^0; sbit Acc_1=ACC^1; sbit Acc_2=ACC^2; sbit Acc_3=ACC^3; //判断位相关声明 uint idata tuadress; uchar idata tuwide; //图形区设置相关信息全局变量 /********************************* AD转换子程序 ***********************************/ uint ad_change ( void) { uint a=0; uchar i,j; dl=0x48;// 正常操作模式,内部时钟和转换,-5~5范围,通道0 while(p33);//等待转换结束 i=dl;//读低8位 j=dh;//读高8位 a=j; a=(a<<8)|i; return a; } /******************************* 数据处理子函数 ******************************/ uchar addata_pro (uint a) { uchar i; float d; if(a<4096) //若是正电压 { d=count*a; i=d; return i; } else { d=count*(~a+1); i=d; i=i+128;//最高位为符号标志位 return i; } } /******************************* delaytime ********************************/ void delay(uchar a) { uchar i,j; for(i=0;i>8; wd(a); wd(b); PR10(comm); } /****************************************** 定点读显示RAM中的数据 **************************************/ uchar tu_read(uint a) { uchar i; PR12(0x24,a);//地址定位 PR11(0xc5,0);//定地址读,没有参数,但是要输入一个无效参数 i=d_add;//读数据 return i; } /***************************** 定点写显示RAM的数据 **********************************/ void tu_write (uint b,uchar a) { PR12(0x24,b); PR11(0xc4,a);//数据写,地址不变 } /************************************ lcd初始化 **************************************/ void init_lcd (void ) { PR12( 0x40,0x0000); //文本区首址 PR12( 0x41,0x0014); //文本区宽度 PR12( 0x42,0x0800);//图形区首址 PR12( 0x43,0x0014);//图形区宽度 tuadress=0x0800; tuwide=0x14; PR10(0x81);//显示方式,内部字符,逻辑异或 PR10(0xa4);//光标形式,4行 PR10(0x98);//显示开关,光标不显示,文本不显示,图形显示 } /********************************* lcm 显示ram清零 **********************************/ void clear (void ) { uchar i,j; PR12(0x24,0x0000);//指针指向0x1000 ST3();//自动写检测 PR10(0xb0);//自动写开启 for(i=0;i<200;i++) { for(j=0;j<100;j++) wd(0x00); //写0 } PR10(0xb3);//自动写关闭 } void clear1 (void )//清屏图形显示区 { uchar i,j; PR12(0x24,0x0800);//指针指向0x1000 ST3();//自动写检测 PR10(0xb0);//自动写开启 for(i=0;i<20;i++) { for(j=0;j<128;j++) wd(0x00); //写0 } PR10(0xb3);//自动写关闭 } /************************************* 将数据转换成显示图形的数据 a:要显示的第几个数<=128 b:值的等级数吧<=63 ************************************/ void picture_change (uchar a ,uchar b) { uchar i=0; //要显示的横向字节数 uchar j=0;//要显示的字节位数 uchar k;//要显示的地址 i=a/8; j=a-i*8; k=tu_read(tuadress+i+(63-b+vertical)*tuwide+horizon); k=k|(0x80>>j); tu_write(tuadress+i+(63-b+vertical)*tuwide+horizon,k); } /************************** 画坐标轴子程序 a:水平字位 b:垂直相位 c:水平长度 d:垂直长度 **************************/ void zhuobiao (uchar a,uchar b,uchar c,uchar d) { uchar i; for(i=0;i