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

📄 lcd.c

📁 Working with DS1820 temperature sensor on SAM7 mC. Watch for timings!
💻 C
字号:
//lcd.c
#include <string.h>
#include "include/includes.h"

// POINTER
AT91PS_PIO    l_pPio   = AT91C_BASE_PIOA;


unsigned long data;
void Delay_mS (unsigned long a) { while (--a!=0); }

unsigned long codr = 0x0;
unsigned long sodr = 0x0;
unsigned long oer  = 0x0;
unsigned long per  = 0x0;

void SetPinsOnly(unsigned long pin) {
  l_pPio->PIO_SODR = l_pPio->PIO_ODSR | pin;
}

void ClearPinsOnly(unsigned long pin) {
  l_pPio->PIO_CODR = (~l_pPio->PIO_ODSR) | pin;
}


void E_Pulse()
{
  l_pPio->PIO_SODR = E;   //set E to high
  Delay_mS(10);              //delay				//it was 100
  l_pPio->PIO_CODR = E;   //set E to low
}

void LCDInit()
{
  // First set D4, D5, D6, D7, RS, RW, E to output ports + BIT23 (light)
  l_pPio->PIO_OER = (BIT16|BIT17|BIT18|BIT19|BIT20|E|BIT22|LCD_LIGHT);

  // Enable D4, D5, D6, D7, RS, RW, E ports + BIT23 (light)
  l_pPio->PIO_PER = (BIT16|BIT17|BIT18|BIT19|BIT20|E|BIT22|LCD_LIGHT);


  l_pPio->PIO_CODR = BIT20|E|BIT22;   //clear RS, E, RW
  Delay_mS(1100000);                      //delay ~110ms

  l_pPio->PIO_SODR = BIT16|BIT17;         //set D4 and D5 port to 1
  E_Pulse();                              //high->low to E port (pulse)

  //Delay_mS(100000);                       //delay ~10ms
  Delay_mS(50000);                       //delay ~5ms

  l_pPio->PIO_SODR = BIT16|BIT17;         //set D4 and D5 port to 1
  E_Pulse();                              //high->low to E port (pulse)

  //Delay_mS(100000);                        //delay ~10ms
    Delay_mS(50000);                       //delay ~5ms

  l_pPio->PIO_SODR = BIT16|BIT17;         //set D4 and D5 port to 1
  E_Pulse();                              //high->low to E port (pulse)

  Delay_mS(100000);                       //delay ~10ms

  l_pPio->PIO_CODR = BIT16;               //set D4 port to 0
  l_pPio->PIO_SODR = BIT17;               //set D5 port to 1
  E_Pulse();                              //high->low to E port (pulse)

  //Delay_mS(100000);                       //delay ~10ms
  Delay_mS(50000);                       //delay ~5ms
  
  LCDSendCommand(DISP_ON);            //LCD on
  LCDSendCommand(CLR_DISP);           //LCD clear
  LCDSendCommand(DD_RAM_ADDR);        //LCD set first row
  LCDSendCommand(CUR_ON_UNDER);    
}

void LCDSendCommand(unsigned long a)
{

  l_pPio->PIO_CODR =  BIT22;                  //set RW port to 0

  Delay_mS(20000);                            //delay for LCD char ~2ms

  data = 0x0;                                 //clear data

  data = 0xffffff0f | a;                      //get high 4 bits

  l_pPio->PIO_CODR = BIT16|BIT17|BIT18|BIT19; //clear D4-D7

  data = data << 12;                          //shift data

  l_pPio->PIO_SODR = 0x000f0000 & data;       //set data

  l_pPio->PIO_CODR =  BIT20;                  //set RS port to 0 -> display set to comand mode

  E_Pulse();                                  //pulse to set d4-d7 bits

  data = 0x0;                                 //clear data

  a = a<<4;                                   //shift to get low 4 bits

  data = 0xffffff0f | a;                      //get low 4 bits

  l_pPio->PIO_CODR = BIT16|BIT17|BIT18|BIT19; //clear D4-D7

  data = data << 12;                          //shift data

  l_pPio->PIO_SODR = 0x000f0000 & data;       //set D4-D7

  l_pPio->PIO_CODR =  BIT20;                  //set RS port to 0 -> display set to comand mode

  E_Pulse();                                  //pulse to set d4-d7 bits

}

void LCDSendChar(unsigned long a)
{
	
//腻豚弪 忸珈铈眍

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -