- #include <STC8H.H>
- #include "define.h"
- #include <intrins.h>
- #include <stdio.h>
- #include <string.h>
- #include <absacc.h>
-
- #define LED0 P50
- #define LED1 P51
- #define LED2 P04
- #define LED3 P52
- #define LED4 P07
- #define LED5 P06
- #define LED6 P05
- #define LED7 P53
- #define TSK0 P54
- #define TSK1 P13
- #define TSK2 P17
- #define TSK3 P16
- #define TSK4 P15
- #define TSK5 P14
- #define TSK6 P11
- #define TSK7 P10
- #define COM0 P20
- #define COM1 P21
- #define COM2 P22
- #define COM3 P23
- #define COM4 P24
- #define COM5 P25
- #define COM6 P26
- #define COM7 P27
- #define SEG0 P40
- #define SEG1 P41
- #define SEG2 P42
- #define SEG3 P43
- #define SEG4 P44
- #define SEG5 P45
- #define SEG6 P46
- #define SEG7 P47
- #define SEG8 P00
- #define SEG9 P01
- #define SEGA P02
- #define SEGB P03
- #define SEGC P34
- #define SEGD P35
- #define SEGE P36
- #define SEGF P37
-
- #define FOSC 11059200UL
- #define BAUD 115200UL
- #define BRT (0x10000-FOSC/BAUD/4)
-
- bit Key_Flag;
- unsigned char Uart_Send_Lenth,RP,Key,Offset_Bit,Offset_String;
- unsigned int Key_Value[8],Key_Test[8];
- unsigned char xdata T_Buffer[50],R_Buffer[16];
- unsigned char code Key_Map[8]={7,6,0,1,5,4,3,2};
- unsigned char code Hex_to_Ascii[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};
- //unsigned char code BMP[][16][2]=
- //{
- // #include <0.h>
- //};
- unsigned char code String[][16][2]=
- {
- #include <0.h>
- };
-
- /*----------------------------延时10us@STC-Y6@11.0592MHz----------------------------*/
- //void Delay_10us(void)
- //{
- // unsigned char i;
- // i=35;
- // while(--i);
- //}
-
- /*----------------------------延时x10us----------------------------*/
- //void Delay_x10us(unsigned char x)
- //{
- // while(x--)
- // Delay_10us();
- //}
-
- /*----------------------------延时10ms@STC-Y6@11.0592MHz----------------------------*/
- void Delay_10ms(void)
- {
- unsigned char i,j;
- _nop_();
- _nop_();
- i=144;
- j=157;
- do
- {
- while(--j);
- }while(--i);
- }
-
- /*----------------------------延时x10ms----------------------------*/
- void Delay_x10ms(unsigned char x)
- {
- while(x--)
- Delay_10ms();
- }
-
- void LED_Driver(unsigned char temp)
- {
- LED0=temp&0x01;
- LED1=temp&0x02;
- LED2=temp&0x04;
- LED3=temp&0x08;
- LED4=temp&0x10;
- LED5=temp&0x20;
- LED6=temp&0x40;
- LED7=temp&0x80;
- }
-
- //void Display_BMP(unsigned char temp)
- //{
- // unsigned char i;
- // unsigned char xdata *p=(unsigned char xdata *)0xfb10;
- // for(i=0;i<8;i++)
- // {
- // *(p+i)=BMP[temp][i][0];
- // *(p+8+i)=BMP[temp][i][1];
- // *(p+16+i)=BMP[temp][i+8][0];
- // *(p+24+i)=BMP[temp][i+8][1];
- // }
- //}
-
- void Display_String(void)
- {
- unsigned char i;
- unsigned char xdata *p=XBYTE+0xfb10;
- for(i=0;i<8;i++)
- {
- *(p+i)=Offset_Bit<8?(String[Offset_String][i][0]>>Offset_Bit)|(String[Offset_String][i][1]<<(8-Offset_Bit)):(String[Offset_String][i][1]>>Offset_Bit-8)|(String[Offset_String+1][i][0]<<(8-(Offset_Bit-8)));
- *(p+8+i)=Offset_Bit<8?(String[Offset_String][i][1]>>Offset_Bit)|(String[Offset_String+1][i][0]<<(8-Offset_Bit)):(String[Offset_String+1][i][0]>>Offset_Bit-8)|(String[Offset_String+1][i][1]<<(8-(Offset_Bit-8)));
- *(p+16+i)=Offset_Bit<8?(String[Offset_String][i+8][0]>>Offset_Bit)|(String[Offset_String][i+8][1]<<(8-Offset_Bit)):(String[Offset_String][i+8][1]>>Offset_Bit-8)|(String[Offset_String+1][i+8][0]<<(8-(Offset_Bit-8)));
- *(p+24+i)=Offset_Bit<8?(String[Offset_String][i+8][1]>>Offset_Bit)|(String[Offset_String+1][i+8][0]<<(8-Offset_Bit)):(String[Offset_String+1][i+8][0]>>Offset_Bit-8)|(String[Offset_String+1][i+8][1]<<(8-(Offset_Bit-8)));
- }
- }
-
- void Send_Value(void)
- {
- unsigned char i;
- if(Uart_Send_Lenth==0)
- {
- for(i=0;i<8;i++)
- {
- T_Buffer[i*6]=Hex_to_Ascii[Key_Value[i]/10000];
- T_Buffer[i*6+1]=Hex_to_Ascii[Key_Value[i]%10000/1000];
- T_Buffer[i*6+2]=Hex_to_Ascii[Key_Value[i]%1000/100];
- T_Buffer[i*6+3]=Hex_to_Ascii[Key_Value[i]%100/10];
- T_Buffer[i*6+4]=Hex_to_Ascii[Key_Value[i]%10];
- T_Buffer[i*6+5]=' ';
- }
- T_Buffer[48]='\r';
- T_Buffer[49]='\n';
- Uart_Send_Lenth=50;
- TI=1;
- }
- }
-
- void Init(void)
- {
- P_SW2|=EAXFR;
- LED0=0;
- LED1=0;
- LED2=0;
- LED3=0;
- LED4=0;
- LED5=0;
- LED6=0;
- LED7=0;
- P0M0=0x0F; P0M1=0x00;
- P1M0=0x00; P1M1=0x00;
- P2M0=0xFF; P2M1=0x00;
- P3M0=0xF0; P3M1=0x00;
- P4M0=0xFF; P4M1=0x00;
- P5M0=0x00; P5M1=0x00;
- P6M0=0x00; P6M1=0x00;
- P7M0=0x00; P7M1=0x00;
- P0PU=0xF0;
- P5PU=0x0F;
- P2DR=0x00;
-
- TMOD=0x00; //设置定时器1为16位自动重载模式
- AUXR=0x40; //设置定时器1为1T模式,设置定时器1为波特率发生器
-
- SCON=0x50; //设置UART1模式为8位数据可变波特率
- TL1=BRT; //设置UART1波特率
- TH1=BRT>>8; //设置UART1波特率
- TR1=1; //使能定时器1
- ES=1; //使能UART1中断
-
- COMEN=0xFF;
- SEGENL=0xFF;
- SEGENH=0xFF;
- LEDCTRL=0xA0;
- LEDCKS=0x00;
-
- TSCHEN1=0xff; //TK00~TK07
- TSRT=0x00; //没有LED分时扫描
- TSCFG1=(7<<4)+3; //开关电容工作频率 = fosc/(2*(TSCFG1[6:4]+1)), 放电时间(系统时钟周期数) 0(125) 1(250) 2(500) 3(1000) 4(2000) 5(2500) 6(5000) 7(7500) 最小3
- TSCFG2=3; //配置触摸按键控制器的内部参考电压(AVCC的分压比), 0(1/4) 1(1/2) 2(5/8) 3(3/4)
- TSCTRL=0xA3; //开始自动扫描, 4次平均, B7: TSGO, B6: SINGLE, B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
- // TSCTRL=(1<<7)+(1<<6); //开始单次扫描, 无平均
- // TSCTRL=(1<<7)+(1<<6)+3; //开始单次扫描, 4次平均
- // TSCTRL=(1<<7)+(1<<6)+1; //开始单次扫描, 2次平均
- // TSWUTC=12; //100ms唤醒一次
- IE2|=0x80; //使能触摸中断
-
- EA=1;
-
- COM0_DA_L=0x00;
- COM0_DA_H=0x00;
- COM1_DA_L=0x00;
- COM1_DA_H=0x00;
- COM2_DA_L=0x00;
- COM2_DA_H=0x00;
- COM3_DA_L=0x00;
- COM3_DA_H=0x00;
- COM4_DA_L=0x00;
- COM4_DA_H=0x00;
- COM5_DA_L=0x00;
- COM5_DA_H=0x00;
- COM6_DA_L=0x00;
- COM6_DA_H=0x00;
- COM7_DA_L=0x00;
- COM7_DA_H=0x00;
- COM0_DC_L=0x00;
- COM0_DC_H=0x00;
- COM1_DC_L=0x00;
- COM1_DC_H=0x00;
- COM2_DC_L=0x00;
- COM2_DC_H=0x00;
- COM3_DC_L=0x00;
- COM3_DC_H=0x00;
- COM4_DC_L=0x00;
- COM4_DC_H=0x00;
- COM5_DC_L=0x00;
- COM5_DC_H=0x00;
- COM6_DC_L=0x00;
- COM6_DC_H=0x00;
- COM7_DC_L=0x00;
- COM7_DC_H=0x00;
-
- Key_Flag=0;
- }
-
- void main(void)
- {
- unsigned char i,j;
- unsigned long temp;
- Init();
- for(i=0;i<8;i++)
- {
- temp=0;
- for(j=0;j<16;j++)
- {
- while(!Key_Flag);
- Key_Flag=0;
- temp+=Key_Value[i];
- }
- Key_Test[i]=temp/16-500;
- }
-
- while(1)
- {
- if(Key_Flag)
- {
- Key_Flag=0;
- Key=0;
- for(i=0;i<8;i++)
- {
- if(Key_Value[i]<Key_Test[i])
- {
- Key|=1<<Key_Map[i];
- }
- }
- // LED_Driver(Key);
- // Display_BMP(0);
- Offset_Bit++;
- if(Offset_Bit==16)
- {
- Offset_Bit=0;
- Offset_String++;
- }
- if(Offset_String==sizeof String/32-1)
- {
- Offset_String=0;
- }
- Display_String();
- // Send_Value();
- }
- Delay_x10ms(5);
- }
- }
-
- void Uart_Isr(void) interrupt 4
- {
- static unsigned char tp;
- if(RI)
- {
- RI=0;
- }
- if(TI)
- {
- TI=0;
- if(Uart_Send_Lenth!=0)
- {
- SBUF=(T_Buffer[tp]);
- tp++;
- }
- if(tp==Uart_Send_Lenth)
- {
- tp=0;
- Uart_Send_Lenth=0;
- }
- }
- }
-
- void TKSU_Interrupt(void) interrupt 13
- {
- unsigned char temp;
- temp=TSSTA2;
- if(temp&0x40) //数据溢出, 错误处理
- {
- TSSTA2|=0x40; //写1清零
- }
- if(temp&0x80) //扫描完成
- {
- temp&=0x0f;
- Key_Value[temp]=TSDAT; //保存某个通道的读数
- TSSTA2|=0x80; //写1清零
- }
- Key_Flag=1;
- }
复制代码
|