www.pudn.com > TG12864.rar > SPASerialA.c
#include#include #include ////////////////////////////////////////////////////////////////////////////////// #define uchar unsigned char #define uint unsigned int #define ulong unsigned long /////////////////////////////////////////////////////////////////////////////////// code uchar numtable[11*16]= { /*-- 文字: 0 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, /*-- 文字: 1 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00, /*-- 文字: 2 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00, /*-- 文字: 3 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00, /*-- 文字: 4 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00, /*-- 文字: 5 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00, /*-- 文字: 6 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00, /*-- 文字: 7 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00, /*-- 文字: 8 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00, /*-- 文字: 9 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, /*-- 小数点 宋体12; 此字体下对应的点阵为:宽x高=9x16 --*/ 0x00,0x00,0x00,0x00,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; code uchar hextable[20*16]= { /*-- 文字: 0 0--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, /*-- 文字: 1 1 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00, /*-- 文字: 2 2--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00, /*-- 文字: 3 3--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00, /*-- 文字: 4 4--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00, /*-- 文字: 5 5 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00, /*-- 文字: 6 6--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00, /*-- 文字: 7 7 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00, /*-- 文字: 8 8--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00, /*-- 文字: 9 9--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, /*-- 文字: A 10--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00, /*-- 文字: B 11--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00, /*-- 文字: C 12 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00, /*-- 文字: D 13--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00, /*-- 文字: E 14--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00, /*-- 文字: F 15--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00, /*-- 文字: S 16--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00, /*-- 文字: N 17--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08, /*-- 文字: O 18--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00, /*-- 文字: K 19--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00, }; code uchar zftable[11*8]= /*显示8*8点阵字符库*/ { 0x00,0x3C,0x42,0x81,0x81,0x42,0x3C,0x00,//"0" 0x00,0x82,0x82,0xFF,0x80,0x80,0x00,0x00,//"1" 0x00,0xC6,0xA1,0x91,0x89,0x85,0xC3,0x00,//"2" 0x00,0x42,0x81,0x89,0x89,0x95,0x66,0x00,//"3" 0x00,0x38,0x24,0xA2,0xA1,0xFF,0xA0,0x00,//"4" 0x00,0x4F,0x89,0x85,0x85,0x49,0x39,0x00,//"5" 0x00,0x3E,0x52,0x89,0x89,0x53,0x20,0x00,//"6" 0x00,0x03,0x01,0x41,0x09,0x07,0x01,0x00,//"7" 0x00,0x66,0x91,0x91,0x91,0x91,0x66,0x00,//"8" 0x00,0x0C,0x92,0x91,0x91,0x52,0x37,0x00,//"9" 0x24,0x24,0x24,0x24,0xA5,0x66,0x24,0x18,//"=>" }; code uchar hztable[15*32]= { /*-- 文字: 分 0 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x80,0x40,0x20,0x10,0x0F,0x00,0x00,0x20,0x40,0x3F,0x00,0x00,0x00,0x00,0x00, 0x80,0x40,0x20,0x98,0x87,0x82,0x80,0x80,0x83,0x84,0x98,0x30,0x60,0xC0,0x40,0x00, /*-- 文字: 机 1--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x04,0x03,0x00,0xFF,0x00,0x41,0x30,0x0C,0x03,0x00,0x00,0x00,0x3F,0x40,0x78,0x00, 0x08,0x08,0xC8,0xFF,0x48,0x88,0x08,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00, /*-- 文字: 测 2--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00, 0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00, /*-- 文字: 温 3--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00, 0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00, /*-- 文字: 器 4--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x02,0x02,0x7E,0x45,0x45,0x44,0x7C,0x00,0x7C,0x44,0x45,0x45,0x7E,0x06,0x02,0x00, 0x40,0x40,0x4F,0x49,0x49,0xC9,0xCF,0x70,0xC0,0xCF,0x49,0x59,0x69,0x4F,0x00,0x00, /*-- 文字: 地 5--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x20,0x20,0x10,0x1F,0x08,0x08,0x00,0x3F,0x40,0x40,0x4F,0x42,0x44,0x43,0x70,0x00, 0x10,0x10,0x10,0xFE,0x10,0x50,0x40,0xFE,0x20,0x20,0xFF,0x10,0x10,0xF8,0x10,0x00, /*-- 文字: 址 6--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x10,0x30,0x10,0x1F,0x08,0x28,0x20,0x3F,0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00, 0x20,0x20,0x20,0xFE,0x20,0x20,0x00,0xE0,0x00,0x00,0xFF,0x40,0x40,0x40,0x00,0x00, /*-- 文字: 号 7--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x00,0x02,0x07,0x02,0x02,0x22,0x42,0x82,0x42,0x3E,0x00,0x00,0x00,0x00, 0x40,0x40,0x40,0x5F,0xD1,0x51,0x51,0x51,0x51,0x51,0x51,0x5F,0x40,0x40,0x40,0x00, /*-- 文字: 传 8--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x7F,0x00,0x00,0x00,0x02,0x0B,0x12,0x22,0x52,0x0A,0x07,0x02,0x00,0x00, 0x40,0x20,0xF8,0x07,0x42,0x44,0x44,0x44,0xF4,0x4F,0x44,0x44,0x46,0x64,0x40,0x00, /*-- 文字: 感 9--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x04,0x43,0x70,0x00,0x39,0x41,0x41,0x49,0x50,0x42,0x41,0x61,0x0A,0x34,0x27,0x00, 0x00,0x00,0xFC,0x14,0xD4,0x54,0x54,0xD4,0x04,0x3F,0xC4,0x45,0x36,0x04,0x00,0x00, /*-- 文字: 度 10--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00, 0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00, /*-- 文字: 值 11--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0xFF,0x00,0x40,0x40,0x7F,0x4A,0x4A,0x4A,0x4A,0x4A,0x7F,0x40,0x40,0x00, 0x80,0x40,0xF0,0x2F,0x02,0x04,0xE4,0xA4,0xB4,0xAF,0xA6,0xA4,0xE4,0x04,0x00,0x00, /*-- 文字: 序 12 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x80,0x60,0x1F,0x00,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x03,0x01,0x00, 0x00,0x00,0xFC,0x04,0x04,0x14,0x14,0x35,0x56,0x94,0x54,0x34,0x14,0x04,0x04,0x00, /*-- 文字: 列 13--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x41,0x40,0x20,0x10,0x09,0x06,0x01,0x00,0x00,0x00,0x07,0x20,0x40,0x3F,0x00,0x00, 0x02,0x82,0x42,0xBA,0x16,0x12,0x92,0x7A,0x12,0x00,0xF8,0x00,0x00,0xFF,0x00,0x00, /*-- 温度符号 14 宽度x高度=16x16 --*/ 0x00,0x00,0x00,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x08,0x00,0x00,0x00,0x00,0x00, 0x00,0x0C,0x0C,0x00,0xF0,0x08,0x04,0x04,0x04,0x08,0x3C,0x00,0x00,0x00,0x00,0x00, }; //管脚定义//////////////////////////////////////////////////////////////// sbit A0=P2^1; sbit CS=P2^4; sbit enter = P0^4; sbit inc = P0^5; sbit dec = P0^6; sbit exit = P0^7; uchar bdata oldkey; sbit old_enter=oldkey^0; sbit old_inc =oldkey^1; sbit old_dec =oldkey^2; sbit old_exit =oldkey^3; uchar bdata key; sbit key_enter=key^0; sbit key_inc =key^1; sbit key_dec =key^2; sbit key_exit =key^3; sbit sktemp =key^4; uchar curwnd,hotpot,Itemp; uchar value[1][2]; uchar xdata dotshift[128]; code uchar dottable[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //函数列表////////////////////////////////////////////////////////////////// void wcode(uchar i); void wdata(uchar i); void clrsrc(void); void show88(uchar lin,uchar col,uint address); void shownum(uchar lin,uchar col,uint num,uchar res); void showhz(uchar lin,uchar col,uint hzcode1); void disp_dot(uchar lin,uchar col,uint val,uchar res); void dispnum(uchar lin,uchar col,uint val,uchar res); void disphex(uchar lin,uchar col,uchar val,uchar res) ; void showhex(uchar lin,uchar col,uint num,uchar res); void shownum(uchar lin,uchar col,uint num,uchar res); ////////////////////////////////////////////////////////////////////////// //写控制命令到lcd void wcode (uchar i) //A0=0,CS=0 { SPSTAT=0xc0; CS=1;_nop_(); A0=0;_nop_(); CS=0;_nop_(); SPDAT=i; while(1) { if(SPSTAT&0x80) break; } CS=1;_nop_(); SPSTAT=0xc0; } ////////////////////////////////////////////////////////////////////////// //写显示数据到lcd //A0=1,CS=0 void wdata (uchar i) { SPSTAT=0xc0; CS=1;_nop_(); A0=1;_nop_(); CS=0;_nop_(); SPDAT=i; while(1) { if(SPSTAT&0x80) break; } CS=1;_nop_(); SPSTAT=0xc0; } /////////////////////////////////////////////////////////////////////// //液晶屏初始化 void init_12864(void) { /*函数名为lcd_init 的LCM初始化子函数*/ wcode(0xae);//开显示屏//0x00关显示;0x01开显示////1 wcode(0xa1); //设置ADC 为正常0---64 ///8 wcode(0xa6);//设置正常的开关状态/////9 wcode(0x2f);//设置能量控制16 wcode(0x81);wcode(0x08);//Electronic volume control setting 18 wcode(0xa3);//设置lcd bias///////11 wcode(0xc8);///选择输出状态寄存器////15 wcode(0xa5);//全屏亮///10 //delay(4); ////// wcode(0xa4); //正常显示////// 10 wcode(0x40);//从第一行开始显示//////2 clrsrc();//清屏 /// wcode(0xaf);//开显示屏//0x00关显示;0x01开显示////1 } void clrsrc(void) /* 清显示屏*/ { uchar i,j; uchar temp,temp_h,temp_l; for(i=0;i<8;i++) { wcode(0xB0|i); for(j=0;j<132;j++) { temp_l=j&0x0f; temp=(j&0xf0)>>4; temp_h=temp&0x0f; wcode(temp_h|0x10); wcode(temp_l|0x00); wdata(0x00); } } } void show88(uchar lin,uchar col,uint address)/*显示8*8点阵的字符,每行可显示16个字符*/ { uchar i; /*lin:0~7; COL:0~15*/ uchar temp,temp_h,temp_l; uint addr; addr=8*address; temp_l=(col*8)&0x0f; temp=((col*8)&0xf0)>>4; temp_h=temp&0x0f; if(col>15) return; wcode(0xB0|lin); wcode(temp_h|0x10); wcode(temp_l|0x00); for(i=0;i<8;i++) { wdata(zftable[addr+i]); } } void shownum(uchar lin,uchar col,uint num,uchar res)/*显示 16*8 点阵的数,每行可显示15个数字*/ { /*res为反显标志,res=0:正显;res=1:反显*/ uchar i,fxdat; uchar temp,temp_h,temp_l; uint numcode; numcode=num*16; lin=lin*2; temp_l=(col*8)&0x0f; temp=((col*8)&0xf0)>>4; temp_h=temp&0x0f; if(col>15) return; wcode(0xB0|lin+1); wcode(temp_h|0x10); wcode(temp_l|0x00); for(i=0;i<8;i++) { if(res==0) { wdata(numtable[numcode+i]); } else { fxdat=~numtable[numcode+i]; wdata(fxdat); } } wcode(0xB0|lin); wcode(temp_h|0x10); wcode(temp_l|0x00); for(i=0;i<8;i++) { if(res==0) { wdata(numtable[numcode+i+8]); } else { fxdat=~numtable[numcode+i+8]; wdata(fxdat); } } } void showhex(uchar lin,uchar col,uint num,uchar res)/*显示 16*8 点阵的数,每行可显示15个数字*/ { /*res为反显标志,res=0:正显;res=1:反显*/ uchar i,fxdat; uchar temp,temp_h,temp_l; uint numcode; numcode=num*16; lin=lin*2; temp_l=(col*8)&0x0f; temp=((col*8)&0xf0)>>4; temp_h=temp&0x0f; if(col>15) return; wcode(0xB0|lin+1); wcode((temp_h)|0x10); wcode((temp_l+2)|0x00); for(i=0;i<8;i++) { if(res==0) { wdata(hextable[numcode+i]); } else { fxdat=~hextable[numcode+i]; wdata(fxdat); } } wcode(0xB0|lin); wcode((temp_h)|0x10); wcode((temp_l+2)|0x00); for(i=0;i<8;i++) { if(res==0) { wdata(hextable[numcode+i+8]); } else { fxdat=~hextable[numcode+i+8]; wdata(fxdat); } } } void disphex(uchar lin,uchar col,uchar val,uchar res) /*显示两位16进制数,lin=0~3;col=0~10,lin col为最高位的行、列坐标。*/ /* VAL为所显示的数*/ /*res为反显标志,res=0:正显;res=1:反显*/ {uint ten,sig; if((val<=0x0f)&&(val>=0)) { sig=val; showhex(lin, col+1,sig,res); showhex(lin,col,0,res); } if((val<=0xff)&&(val>0x0f)) { sig=val%16; ten=(val-val%16)/16; showhex(lin, col+1,sig,res); showhex(lin,col,ten,res); } } void dispnum(uchar lin,uchar col,uint val,uchar res) {uint th,hu,ten,sig,temper0,temper1; if((val<10)&&(val>=0)) { sig=val; shownum(lin, col+3,sig,res); shownum(lin,col+2,0,res); shownum(lin,col+1,0,res); shownum(lin,col,0,res); } if((val<100)&&(val>=10)) { sig=val%10; ten=(val-val%10)/10; shownum(lin, col+3,sig,res); shownum(lin,col+2,ten,res); shownum(lin,col+1,0,res); shownum(lin,col,0,res); } if((val<1000)&&(val>=100)) { temper0=val%100; sig=temper0%10; ten=(temper0-temper0%10)/10; hu=(val-ten*10-temper0%10)/100; shownum(lin,col+3,sig,res); shownum(lin,col+2,ten,res); shownum(lin,col+1,hu,res); shownum(lin,col,0,res); } if((val<10000)&&(val>=1000)) { temper0=val%1000; temper1=temper0%100; sig=temper1%10; ten=(temper1-temper1%10)/10; hu=(temper0-ten*10-temper1%10)/100; th=(val-hu*100-ten*10-temper1%10)/1000; shownum(lin,col+3,sig,res); shownum(lin,col+2,ten,res); shownum(lin,col+1,hu,res); shownum(lin,col,th,res); } } void disp_dot(uchar lin,uchar col,uint val,uchar res) {uint th,hu,ten,sig,temper0,temper1; if((val<10)&&(val>=0)) { sig=val; shownum(lin,col+4,sig,res); shownum(lin,col+3,0,res); shownum(lin,col+2,10,res); shownum(lin,col+1,0,res); shownum(lin,col,0,res); } if((val<100)&&(val>=10)) { sig=val%10; ten=(val-val%10)/10; shownum(lin, col+4,sig,res); shownum(lin,col+3,ten,res); shownum(lin,col+2,10,res); shownum(lin,col+1,0,res); shownum(lin,col,0,res); } if((val<1000)&&(val>=100)) { temper0=val%100; sig=temper0%10; ten=(temper0-temper0%10)/10; hu=(val-ten*10-temper0%10)/100; shownum(lin,col+4,sig,res); shownum(lin,col+3,ten,res); shownum(lin,col+2,10,res); shownum(lin,col+1,hu,res); shownum(lin,col,0,res); } if((val<10000)&&(val>=1000)) { temper0=val%1000; temper1=temper0%100; sig=temper1%10; ten=(temper1-temper1%10)/10; hu=(temper0-ten*10-temper1%10)/100; th=(val-hu*100-ten*10-temper1%10)/1000; shownum(lin,col+4,sig,res); shownum(lin,col+3,ten,res); shownum(lin,col+2,10,res); shownum(lin,col+1,hu,res); shownum(lin,col,th,res); } } void showhz(uchar lin,uchar col,uint hzcode1)/*显示16*16点阵的汉字,每行显示8个汉字,共显示4行8列汉字*/ { /*hzcode1为字模数组的每个汉字的首地址*/ uchar i; uchar temp,temp_h,temp_l; uint hzcode; hzcode=hzcode1*32; lin=lin*2; temp_l=(col*16+2)&0x0f; temp=((col*16)&0xf0)>>4; temp_h=temp&0x0f; if(col>8) return; wcode(0xB0|lin+1); wcode(temp_h|0x10); wcode((temp_l)|0x00); for(i=0;i<16;i++) { wdata(hztable[hzcode+i]); } wcode(0xB0|lin); wcode(temp_h|0x10); wcode((temp_l)|0x00); for(i=0;i<16;i++) { wdata(hztable[hzcode+i+16]); } } void getkey(void) { sktemp=enter; if(old_enter&!sktemp){key_enter=1;} old_enter=sktemp; sktemp=inc; if(old_inc&!sktemp){key_inc=1;} old_inc=sktemp; sktemp=dec; if(old_dec&!sktemp){key_dec=1;} old_dec=sktemp; sktemp=exit; if(old_exit&!sktemp){key_exit=1;} old_exit=sktemp; if(curwnd==0) { if(key_inc==1) { key_inc=0; ++value[curwnd][hotpot]; Itemp=255; if(value[curwnd][hotpot]>Itemp)value[curwnd][hotpot]=0; } if(key_dec==1) { key_dec=0; Itemp=0; if(value[curwnd][hotpot]==Itemp)value[curwnd][hotpot]=255; else --value[curwnd][hotpot]; } if(key_enter) { key_enter=0; hotpot++; if(hotpot>2)hotpot=0; if(hotpot==0) { dispnum(0,11,value[0][0],1); dispnum(2,11,value[0][1],0); } if(hotpot==1) { dispnum(0,11,value[0][0],0); dispnum(2,11,value[0][1],1); } } } } /* 此部分是动态扫描程序,只须修改FIFO程序即可实现时时动态扫描 void showdot(uchar col,uchar dat) ///画单个点的程序 { uchar temp,temp_h,temp_l,temp2,temp3; temp3=dat/8; temp2=dat%8; temp_l=(col)&0x0f; temp=((col)&0xf0)>>4; temp_h=temp&0x0f; wcode(0xB0|temp3); wcode(temp_h|0x10); wcode(temp_l|0x00); wdata(dottable[temp2]); } void numdot(void) //产生波形 { uchar i; for(i=0;i<64;i++) { dotshift[i]=i; dotshift[i+64]=64-i; } } void FIFO(void) //移位程序 { uchar i,temp; temp=dotshift[128]; for(i=0;i<128;i++) { dotshift[128-i]=dotshift[127-i]; } dotshift[0]=temp; } void dotshiftshow(uchar *dat) { // 页扫描 uchar i; for(i=0;i<128;i++) { showdot(i,64-*dat); dat++; } } void delay(ulong v) { while(v!=0)v--; } void shiftsin(void) //方波产生显示程序 { while(1) { clrsrc(); dotshiftshow(dotshift); FIFO(); delay(2000); } } */ /****************************主函数******************************/ void main(void) { P0M1=0X00;P0M2=0X00; P2M1=0xc0;P2M2=0xc0; SPCTL=0xdc; SPSTAT=0xc0; init_12864(); // numdot(); while(1) { getkey(); // dispnum(0,11,value[0][0],0); // dispnum(2,11,value[0][1],0); // shiftsin(); if(hotpot==0) { dispnum(0,11,value[0][0],1); dispnum(2,11,value[0][1],0); } if(hotpot==1) { dispnum(0,11,value[0][0],0); dispnum(2,11,value[0][1],1); } if(key_enter==1) { } if(key_inc==1) { } if(key_dec==1) { } if(key_exit==1) { } } }