最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

貼一個LCD通訊的程序-標(biāo)準(zhǔn)接口

作者:wanglele 欄目:單片機(jī)
貼一個LCD通訊的程序-標(biāo)準(zhǔn)接口
//LCD顯示,接口控制,串行通訊 ,PA7-DE,PA6-~RE,返回的數(shù)據(jù)是發(fā)送的數(shù)據(jù)
//LCD的PB0~PB7(7~14腳)接8515的PC0~PC7,E-PB7,RS-PB6,R/W-PB5
#include "io8515v.h"
//#include "macros.h"
//#include "stdio.h"
  // simple helper macros'
#define LCD_E  (1 << 7)
#define LCD_RS (1 << 6)
#define LCD_RW (1 << 5)
#define lcd_set_e()  (PORTB |= LCD_E)
#define lcd_set_rs() (PORTB |= LCD_RS)
#define lcd_set_rw() (PORTB |= LCD_RW)
#define lcd_clear_e()  (PORTB &= ~LCD_E)
#define lcd_clear_rs() (PORTB &= ~LCD_RS)
#define lcd_clear_rw() (PORTB &= ~LCD_RW)

void delay(unsigned int t);             //time delay
void init_uart(void);                   //UART and LCD initialize
unsigned CHAR rece_byte( void );        //rececive bytes
void trans_byte(unsigned CHAR d);       //transimit bytes
void lcd_pulse(void);
putCHAR(CHAR c);                        //OUTPUT signal CHARachter
void outtext(CHAR* text);               //OUTPUT string
void lcd_send(unsigned CHAR data);      //LCD send data
void clrscr(void);                      //clear screen
void second_display(unsigned CHAR TEMP);
/****************************
   延 遲 函 數(shù)
****************************/
void delay(unsigned int t)
{
while(t--);
}
/*****************************
   串口和LCD初始化
******************************/
void init_uart(void)
{
  UBRR=0X8F;                          //設(shè)置波特率BAUD=4800
  UCR = BIT(RXEN) | BIT(TXEN);        //接收使能/發(fā)送使能
  DDRC=0XFF;
  DDRB |= (LCD_E |  LCD_RS | LCD_RW);
  lcd_clear_rs();
  lcd_clear_rw();
  lcd_send(0x38);      //8位數(shù)據(jù)線,2行顯示,
  lcd_send(0x06);      //AC加1,S=0顯示不移位
  lcd_send(0x0e);     //開顯示,光標(biāo)顯示,閃耀開
}
/*****************************
  發(fā)送數(shù)據(jù)函數(shù)
******************************/
void trans_byte(unsigned CHAR d)
{
  DDRA=0XFF;
  PORTA=0XFF;
  while ( !(USR & (1<<UDRE)) )
        ;                             /* wait for empty transmit buffer */
  UDR = d;                          /* start transmittion */
  while(!(USR&0x40))  ;           /*判斷TXC是否發(fā)完*/
  USR|=0x40;             //關(guān)TXC
  PORTA=0X00;
  
}
/******************************
  接收數(shù)據(jù)函數(shù)
*******************************/
unsigned CHAR rece_byte( void )
{
   unsigned CHAR TEMP0;
   DDRA=0XFF;
   PORTA=0X00;
   while ( !(USR & (1<<RXC)) )      /* wait for incomming data */
        ;  
   TEMP0=UDR;
   second_display(TEMP0);                       
   return UDR;                      /* return the data */
//   clrscr();
//   lcd_send(0x38);      //8位數(shù)據(jù)線,2行顯示,
//   lcd_send(0x06);      //AC加1,S=0顯示不移位
//   lcd_send(0x0e);     //開顯示,光標(biāo)顯示,閃耀開
//   outtext("receiving");
}
/*****************************
LCD
*****************************/
// lcd strobe
  void lcd_pulse(void)
  {
  lcd_set_e();                 //write
  delay(4);
  lcd_clear_e();               //read
  delay(4);
  }
// OUTPUT SINGLE CHARacter
putCHAR(CHAR c)
  {
  lcd_clear_rw();            //data regesiter write(DR)
  lcd_set_rs();
  lcd_send(c);
  }
// OUTPUT string
void outtext(CHAR* text)
  {
   unsigned CHAR i;
   for(i = 0; text[i] && i < 16; i++)
   putCHAR(text[i]);
  }
// send byte to lcd
void lcd_send(unsigned CHAR data)
  {
  delay(800);              //加快顯示速度
  PORTC = data;  
  lcd_pulse();
  }
// clear screen     
void clrscr(void)
{      
  lcd_clear_rs();
  lcd_clear_rw();
  lcd_send(0x01);
  delay(1500);
}
//顯示第2行
void second_display(unsigned CHAR TEMP)
{
  lcd_clear_rs();
  lcd_clear_rw();
  lcd_send(0xc0);                   //第2行地址
  lcd_send(0x06);  
  putCHAR('0'+TEMP/16);
  putCHAR('0'+TEMP%16);
}

/***************************
         主  函  數(shù)
****************************/
void main(void)
{  
  DDRA=0XFF;
  PORTA=0X00;
  clrscr();
  init_uart();
  outtext("ready receiving");         
  while(1)
  {
   trans_byte(rece_byte());
  }
}

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
誰能講講mega系列里熔絲位配置。
IO口方向配置成輸入時,PORTX不同的值對數(shù)據(jù)的輸入有什么影響嗎?
求救:關(guān)于AVR內(nèi)部SRAM和外部RAM
圣西諾技術(shù)論壇為您解答技術(shù)上的疑惑
有沒有WINDOWS版的GCC 啊?
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號