//************************************************************** // main() //************************************************************** int main(){ #define Adresse 0x9E // evtl 9F für schreiben? #define Read 1 #define Write 0 unsigned char ucTemp1,ucTemp2; // Deklaration der Variablen display_init(); // Initialisiere Display int i; while(1) { signed int avg = 0; for(i = 0; i < 64; i++) { // Setzen der Startbedingung und warten bis slave antwortet mit ACK0 while(i2c_start(Adresse+Read)); ucTemp1 = i2c_rbyte(0); // Erstes Byte einlesen ucTemp2 = i2c_rbyte(1); // Zweites Byte einlesen i2c_stop(); // I2C wieder freigeben // Ausgabe der gelesenen Werte display_set_cursor(0, 0); print_temp(tempwert(ucTemp1, ucTemp2)); avg += tempwert(ucTemp1, ucTemp2); delay5ms(100); // Verzögerung 100 ms } display_set_cursor(0, 1); print_temp(avg >> 6); } while(1); // Endlosschleife }
//-------------------------- // init_lcd1602 //-------------------------- void init_lcd1602(void) { unsigned char i; //char init_logo[32]; delay5ms(); wr_com(0x38); //设置显示模式:8位2行5x7点阵 delay5ms(); wr_com(0x38); //设置显示模式:8位2行5x7点阵 wr_com(0x38); //设置显示模式:8位2行5x7点阵 wr_com(0x38); //设置显示模式:8位2行5x7点阵 // 8bit / 4bit wr_com(0x06); //文字不动,光标自动右移 wr_com(0x01); //清屏并光标复位 wr_com(0x0c); //显示器开、光标关、光标允许闪烁关 }
uint16_t Single_Write(unsigned char SlaveAddress,unsigned char REG_Address,unsigned char REG_data) //void { if(!I2C_Start())return FALSE; I2C_SendByte(SlaveAddress); //发送设备地址+写信号//I2C_SendByte(((REG_Address & 0x0700) >>7) | SlaveAddress & 0xFFFE);//设置高起始地址+器件地址 if(!I2C_WaitAck()){I2C_Stop(); return FALSE;} I2C_SendByte(REG_Address ); //设置低起始地址 I2C_WaitAck(); I2C_SendByte(REG_data); I2C_WaitAck(); I2C_Stop(); delay5ms(); return TRUE; }
bool Single_Write(unsigned char SlaveAddress,unsigned char REG_Address,unsigned char REG_data) //void { if(!I2C_Start())return FALSE; I2C_SendByte(SlaveAddress); //发送设备地址+写信号 if(!I2C_WaitAck()){I2C_Stop(); return FALSE;} I2C_SendByte(REG_Address ); //设置低起始地址 I2C_WaitAck(); I2C_SendByte(REG_data); I2C_WaitAck(); I2C_Stop(); delay5ms(); return TRUE; }
//----------------------- // wr_data //----------------------- void wr_data(unsigned char dat) { LCDE_L; RW_L; RS_H; LCDE_H; SET_LCMDATA(dat); delay50us(); LCDE_L; RS_L; delay5ms(); //delay50us(); }
//************************************************************** // main() //************************************************************** int main(){ // unsigned char ucTemp1,ucTemp2; // Deklaration der Variablen unsigned char Adresse = 0b10011110; display_init(); // Initialisiere Display i2c_start(Adresse); // Führt die Startbedingung aus // Erstes Byte einlesen // Zweites Byte einlesen i2c_stop(); // I2C wieder freigeben // Programm zur Verarbeitung der // eingelesenen Werte delay5ms(20); // Verzögerung 100 ms while(1); // Endlosschleife }
//----------------------- // wr_com //----------------------- void wr_com(unsigned char comm) { // 8bit LCDE_L; RS_L; RW_L; LCDE_H; SET_LCMDATA(comm); delay50us(); LCDE_L; delay5ms(); //delay50us(); }
//************************************************************** // main läßt LED am Port P30 für ca. 1 Minute mit 1 Hz blinken //************************************************************** int main(){ unsigned char ucB=120; // lokale Variable ucB unsigned int mask = (LED1 | LED2 | LED3 | LED4 | LED5); AT91C_BASE_PIOA->PIO_OER = mask; // Freigabe des LED-Port-Pins AT91C_BASE_PIOA->PIO_OWER = mask; // Register: Schreib-Freigabe des Output Write Enable Register AT91C_BASE_PIOA->PIO_PPUDR = mask; // Ausschalten des Pull-up-Widerstandes AT91C_BASE_PIOA->PIO_ODSR &= ~mask; AT91C_BASE_PIOA->PIO_ODSR = (LED1 | LED3 | LED5); while (ucB--){ AT91C_BASE_PIOA->PIO_ODSR ^= mask; // LED1 ein delay5ms(100); // Verzögerung von 500ms } while (1); // Endlosschleife nach eigentlichem // Programm: niemals vergessen! }