// ************************************************
// *** 采用4位数据线的1602液晶驱动程序 ***
// *** LCD.C ***
// ************************************************
#define ENABLE_BIT_DEFINITIONS
#define LCD_C
#include "includes.h"
// ***** Define I/O pins ***** //
#define BIT7 0x80
#define BIT6 0x40
#define BIT5 0x20
#define BIT4 0x10
#define BIT3 0x08
#define BIT2 0x04
#define BIT1 0x02
#define BIT0 0x01
// *** Set port for LCD Data Bus 8 bit mode *** //
#define LCD_OP_PORT PORTB
#define LCD_IP_PORT PINB
#define LCD_DIR_PORT DDRB
// *** Set LCD Enable Port and Bit values *** //
//#define LCD_EN LCD_OP_PORT.2
// *** Set LCD Register Select Port and Bit values *** //
//#define LCD_RS LCD_OP_PORT.0
// *** Set LCD Read/Write Port and Bit values *** //
//#define LCD_RW LCD_OP_PORT.1
/****************************************************************/
#define LCD_EN (1 << 2) //引脚定义
#define LCD_RS (1 << 0)
#define LCD_RW (1 << 1)
#define lcd_set_e() (LCD_OP_PORT |= LCD_EN) //置位与清零
#define lcd_set_rs() (LCD_OP_PORT |= LCD_RS)
#define lcd_set_rw() (LCD_OP_PORT |= LCD_RW)
#define lcd_clear_e() (LCD_OP_PORT &= ~LCD_EN)
#define lcd_clear_rs() (LCD_OP_PORT &= ~LCD_RS)
#define lcd_clear_rw() (LCD_OP_PORT &= ~LCD_RW)
/****************************************************************/
#define LCD_ON 0x0C
#define LCD_CURS_ON 0x0D
#define LCD_OFF 0x08
#define LCD_HOME 0x02
#define LCD_CLEAR 0x01
#define LCD_NEW_LINE 0xC0
#define LCD_FUNCTION_SET 0x28
#define LCD_MODE_SET 0x06
void LCD_INIT(void)
{
LCD_DIR_PORT = 0xff; // LCD port output
LCD_OP_PORT = 0x30; // Load high-data to port
lcd_clear_rw(); // Set LCD to write
lcd_clear_rs(); // Set LCD to command
lcd_set_e(); // Write data to LCD
asm("nop");
asm("nop");
lcd_clear_e(); // Disable LCD
delay_nus(40);
lcd_clear_rw() ; // Set LCD to write
lcd_clear_rs(); // Set LCD to command
lcd_set_e(); // Write data to LCD
asm("nop");
asm("nop");
lcd_clear_e(); // Disable LCD
delay_nus(40);
lcd_set_e(); // Write data to LCD
asm("nop");
asm("nop");
lcd_clear_e(); // Disable LCD
delay_nus(40);
LCD_OP_PORT = 0x20;
lcd_set_e(); // Write data to LCD
asm("nop");
asm("nop");
lcd_clear_e(); // Disable LCD
delay_nus(40);
}
//*****************************************************//
// This routine will return the busy flag from the LCD //
//*****************************************************//
void LCD_Busy ( void )
{
unsigned char temp,high;
unsigned char low;
LCD_DIR_PORT = 0x0f; // Make I/O Port input
do
{
temp=LCD_OP_PORT;
temp=temp&BIT3;
LCD_OP_PORT=temp;
lcd_set_rw(); // Set LCD to READ
lcd_clear_rs();
lcd_set_e();
delay_nus(3);
high = LCD_IP_PORT; // read the high nibble.
lcd_clear_e(); // Disable LCD
lcd_set_e();
asm("nop");
asm("nop");
low = LCD_IP_PORT; // read the low nibble.
lcd_clear_e(); // Disable LCD
} while(high & 0x80);
delay_nus(20);
}
// ********************************************** //
// *** Write a control instruction to the LCD *** //
// ********************************************** //
void LCD_WriteControl (unsigned char CMD)
{
char temp;
LCD_Busy(); // Test if LCD busy
LCD_DIR_PORT = 0xff; // LCD port output
temp=LCD_OP_PORT;
temp=temp&BIT3;
LCD_OP_PORT =(CMD & 0xf0)|temp; // Load high-data to port
lcd_clear_rw(); // Set LCD to write
lcd_clear_rs(); // Set LCD to command
lcd_set_e(); // Write data to LCD
asm("nop");
asm("nop");
lcd_clear_e(); // Disable LCD
LCD_OP_PORT =(CMD<<4)|temp; // Load low-data to port
lcd_clear_rw(); // Set LCD to write
lcd_clear_rs(); // Set LCD to command
lcd_set_e(); // Write data to LCD
asm("nop");
asm("nop");
lcd_clear_e(); // Disable LCD
}
// ***************************************** //
// *** Write one byte of data to the LCD *** //
// ***************************************** //
void LCD_WriteData (unsigned char Data)
{
char temp;
LCD_Busy(); // Test if LCD Busy
LCD_DIR_PORT = 0xFF; // LCD port output
temp=LCD_OP_PORT;
temp=temp&BIT3;
LCD_OP_PORT =(Data & 0xf0)|temp; // Load high-data to port
lcd_clear_rw() ; // Set LCD to write
lcd_set_rs(); // Set LCD to data
lcd_set_e(); // Write data to LCD
asm("nop");
asm("nop");
lcd_clear_e(); // Disable LCD
LCD_OP_PORT = (Data << 4)|temp; // Load low-data to port
lcd_clear_rw() ; // Set LCD to write
lcd_set_rs(); // Set LCD to data
lcd_set_e(); // Write data to LCD
asm("nop");
asm("nop");
lcd_clear_e(); // Disable LCD
}
// ********************************* //
// *** Initialize the LCD driver *** //
// ********************************* //
void Init_LCD(void)
{
LCD_INIT();
LCD_WriteControl (LCD_FUNCTION_SET);
LCD_WriteControl (LCD_OFF);
LCD_WriteControl (LCD_CLEAR);
LCD_WriteControl (LCD_MODE_SET);
LCD_WriteControl (LCD_ON);
LCD_WriteControl (LCD_HOME);
}
// ************************************************ //
// *** Clear the LCD screen (also homes cursor) *** //
// ************************************************ //
void LCD_Clear(void)
{
LCD_WriteControl(0x01);
}
// *********************************************** //
// *** Position the LCD cursor at row 1, col 1 *** //
// *********************************************** //
void LCD_Home(void)
{
LCD_WriteControl(0x02);
}
// ****************************************************************** //
// *** Display a single character, at the current cursor location *** //
// ****************************************************************** //
void LCD_DisplayCharacter (char Char)
{
LCD_WriteData (Char);
}
// ********************************************************************* //
// *** Display a string at the specified row and column, using FLASH *** //
// ********************************************************************* //
void LCD_DisplayString_F (char row, char column , unsigned char __flash *string)
{
LCD_Cursor (row, column);
while (*string)
{
LCD_DisplayCharacter (*string++);
}
}
// ******************************************************************* //
// *** Display a string at the specified row and column, using RAM *** //
// ******************************************************************* //
void LCD_DisplayString (char row, char column ,unsigned char *string)
{
LCD_Cursor (row, column);
while (*string)
LCD_DisplayCharacter (*string++);
}
// *************************************************** //
// *** Position the LCD cursor at "row", "column". *** //
// *************************************************** //
void LCD_Cursor (char row, char column)
{
switch (row) {
case 1: LCD_WriteControl (0x80 + column - 1); break;
case 2: LCD_WriteControl (0xc0 + column - 1); break;
case 3: LCD_WriteControl (0x94 + column - 1); break;
case 4: LCD_WriteControl (0xd4 + column - 1); break;
default: break;
}
}
// ************************** //
// *** Turn the cursor on *** //
// ************************** //
void LCD_Cursor_On (void)
{
LCD_WriteControl (LCD_CURS_ON);
}
// *************************** //
// *** Turn the cursor off *** //
// *************************** //
void LCD_Cursor_Off (void)
{
LCD_WriteControl (LCD_ON);
}
// ******************** //
// *** Turn Off LCD *** //
// ******************** //
void LCD_Display_Off (void)
{
LCD_WriteControl(LCD_OFF);
}
// ******************* //
// *** Turn On LCD *** //
// ******************* //
void LCD_Display_On (void)
{
LCD_WriteControl(LCD_ON);
}
// ******************* //
// *** Clear line *** //
// ******************* //
void ClearLine(unsigned char line)
{
unsigned char *space=" ";
LCD_DisplayString(line,1,space);
}
没有合适的资源?快使用搜索试试~ 我知道了~
atmega16输出pwm波形
共35个文件
c:4个
h:4个
lis:3个
3星 · 超过75%的资源 需积分: 38 14 下载量 9 浏览量
2011-08-14
17:32:06
上传
评论
收藏 45KB RAR 举报
温馨提示
atmega16输出pwm波形的c程序,包括液晶显示部分,延时函数等等...
资源推荐
资源详情
资源评论
收起资源包目录
pwm.rar (35个子文件)
pwm
BACKUP
pwm.c.110810092150 1B
includes.h.110810092754 213B
pwm.c.110810093738 4KB
pwm._c 4KB
includes.h.110810092300 215B
pwm.c.110810092246 4KB
includes.h.110810092518 213B
LCD._c 7KB
LCD.c.051007170928 7KB
includes._h 211B
includes.h.051007164136 214B
includes.h.110810092732 211B
PWM.mp 3KB
pwm.o 6KB
main.h 324B
main.c 4KB
delay.o 1KB
PWM.lk 22B
PWM.hex 4KB
pwm.c 4KB
pwm.lis 22KB
LCD.c 7KB
delay.h 703B
pwm.prj 1KB
delay.lis 5KB
delay.c 575B
LCD.lis 33KB
lcd.h 1KB
LCD.o 7KB
PWM.dbg 5KB
PWM.SRC 56B
PWM.lst 37KB
PWM.mak 928B
includes.h 213B
PWM.cof 9KB
共 35 条
- 1
资源评论
- zhz5051800762013-04-16对我的设计很有帮助 谢谢
- 大海豚无语2014-10-02只有一大部分程序,不是很全啊。
a531868466
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功