📄 main.c
字号:
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#define RESOLUTION 12 // ADC resolution
#define SCALE_BG (( 1 << RESOLUTION)/55) // BarGraph scale factor
void lcd_display(char * display_data,char data_count);
#pragma interrupt_handler GPIO_ISR
#define SLAVE_ADDRESS 0x6b// sw/b slave device address
unsigned char write_calibrate_addr[]={10,1};//send nozero to this memory WILL calibrate all buttons
unsigned char write_reset_addr[]={11,15};
unsigned char write_slider_control_addr[]={20,5};//address is 20 NUM_KEYS=5
unsigned char write_slider_option_addr[]={21,4};// Address is 21 resolution=4
unsigned char write_gpio_direction_addr[]={73,4};// Address is 73 gpio1=output
unsigned char write_gpio_driveh_addr[]={71,4};// Address is 71 gpio drive 1 so as to light num led
unsigned char write_gpio_drivel_addr[]={71,0};
unsigned char write_negthreshold_addr[]={38,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7};//the data for adjust button sensitive
unsigned char write_burstlength_addr[]={54,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32};
BYTE lcd_data[6];
unsigned int adc_data;
unsigned char read_chipid_addr[]={0};// memory address for read operation as follow:
unsigned char read_codeversion_addr[]={1};
unsigned char read_generalstatus_addr[]={2};
unsigned char read_keystatus1_addr[]={3};
unsigned char read_keystatus2_addr[]={4};
unsigned char read_slidertouchposition_addr[]={5};
unsigned char read_gpioread_addr[]={6};
unsigned char read_calibrate_addr[]={10};
unsigned char read_slidercontrol_addr[]={20};
unsigned char read_slideoption_addr[]={21};
unsigned char read_gpiodrive1_addr[]={70};
unsigned char read_gpiodrive2_addr[]={71};
unsigned char read_gpiodirection_addr[]={73};
unsigned char read_pmw1_addr[]={74};
unsigned char read_pmw2_addr[]={75};
unsigned char read_negthreshold_addr[]={38};
unsigned char read_burstlength_addr[]={54};
unsigned char rxbuffer[100]={0};//receive data buffer
BYTE CHANGPIN_active;
unsigned char j;
/*******************************************************************
memory address and function explain as follows
0 chip id read
1 code version read
2 general status read
3 key status1 read
4 key status2 read
5 slider touch position read
6 gpio read read
10 calibrate read/write
20 slider control read/write
21 slider option read/write
70 gpio drive 1 read/write
71 gpio drive 2 read/write
73 gpio direction read/write
74 gpio pmw 1 read/write
75 gpio pmw 2 read/write
********************************************************************/
void delay(int time){
int i,j;
for (i=0;i<time;i++){
for(j=0;j<1700;j++);
}}
void write_memory(BYTE slave_addr,BYTE* target_addrordata,BYTE b_count){ //
/* Start the master */
I2CHW_1_Start();
I2CHW_1_EnableMstr();
/* Enable the global and local interrupts */
M8C_EnableGInt;
I2CHW_1_EnableInt();
// s|| slave+w|| A|| memoryaddr||A|| data||A|| P
I2CHW_1_bWriteBytes(slave_addr,target_addrordata,b_count,I2CHW_1_CompleteXfer);// the first data write to memory is memory address,and the second is data
while(!I2CHW_1_bReadI2CStatus()&I2CHW_WR_COMPLETE);
I2CHW_1_ClrWrStatus();
}
void read_memory(BYTE slave_addr,BYTE* target_addr,BYTE * self_addr,BYTE b_count){
//rcalibratebutton(txbuffer_recalibrate);
I2CHW_1_Start();
I2CHW_1_bWriteBytes(slave_addr,target_addr,1,I2CHW_1_CompleteXfer);//write address of button to slave
while(!I2CHW_1_bReadI2CStatus()&I2CHW_WR_COMPLETE);
I2CHW_1_ClrWrStatus();
I2CHW_1_Start();
I2CHW_1_fReadBytes(slave_addr,self_addr,b_count,I2CHW_1_CompleteXfer);//read data
while(!I2CHW_1_bReadI2CStatus()&I2CHW_RD_COMPLETE);
I2CHW_1_ClrRdStatus();
}
void GPIO_ISR(){//gpio interrupt process
delay(20);
write_memory(SLAVE_ADDRESS,write_calibrate_addr,2);
do {
read_memory(SLAVE_ADDRESS,read_keystatus1_addr,rxbuffer,3);
}
while(PRT2DR&0x01);
lcd_display(rxbuffer,3);
j+=1;// program runing times couter.
LCD_1_PrHexByte(j);
}
void lcd_display(char * display_data,char data_count){//show the data to LCD
unsigned char i;
for(i=0;i<data_count;i++){
LCD_1_PrHexByte(display_data[i]);
}
}
struct BUTTON_STATUS {
BYTE flag_x0y0;//slider0
BYTE flag_x1y0;//slider1
BYTE flag_x2y0;//slider2
BYTE flag_x3y0;//slider3
BYTE flag_x4y0;//slider4
BYTE flag_x0y1;//Quik lunch
BYTE flag_x1y1;//DVD cancel this function at SI
BYTE flag_x2y1;//mute
BYTE flag_x3y1;//back
BYTE flag_x4y1;//play pause
BYTE flag_x5y1;//forward
BYTE flag_x6y1;//stop
BYTE flag_x7y1;//wireless
}button_status={0,0,0,0,0,0,0,0,0,0,0,0,0};
void convert_ascii_data(float disp_ptr)//ascii code change
{
unsigned int lcddisplay;//max value limit is 65535
lcddisplay=disp_ptr;
lcd_data[0]=(lcddisplay/100000)+48;
lcddisplay%=100000;
lcd_data[1]=(lcddisplay/10000)+48;
lcddisplay%=10000;
lcd_data[2]=(lcddisplay/1000)+48;
lcddisplay%=1000;
lcd_data[3]=(lcddisplay/100)+48;
lcddisplay%=100;
lcd_data[4]=(lcddisplay/10)+48;
lcddisplay%=10;
lcd_data[5]=lcddisplay+48;
//lcd_data[6]=' ';
}
void main(){
BYTE i,l,k;
BYTE bgPos;
int adc_data;
CHANGPIN_active=0;
j=0;
LCD_1_Init();
LCD_1_Position(0,1);
LCD_1_PrCString("DIABLO sw/b tester");
LCD_1_Position(1,3);
LCD_1_PrCString("wu.changling");
LCD_1_Position(2,1);
LCD_1_PrCString("inventec.co.ltd");
LCD_1_Position(3,3);
LCD_1_PrCString("10/9/2007");delay(100);
LCD_1_Init();
/**************************************************************
initial swb
************************************************************/
write_memory(SLAVE_ADDRESS,write_reset_addr,2);//reset chip
write_memory(SLAVE_ADDRESS,write_reset_addr,2);
write_memory(SLAVE_ADDRESS,write_slider_control_addr,2); //SLIDER NUM=5
write_memory(SLAVE_ADDRESS,write_slider_option_addr,2);
M8C_EnableGInt;
M8C_EnableIntMask(INT_MSK0,INT_MSK0_GPIO);//enable gpio interrupt
write_memory(SLAVE_ADDRESS,write_calibrate_addr,2); //calibrate all pad
write_memory(SLAVE_ADDRESS,write_calibrate_addr,2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -