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

📄 main.c

📁 单片机测试开发程式
💻 C
📖 第 1 页 / 共 2 页
字号:
//----------------------------------------------------------------------------
// 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 + -