?? 1602._c
字號:
#include <iom16v.h>
#include <macros.h>
#include <stdio.h> //標準輸入輸出頭文件
#define uchar unsigned char
#define uint unsigned int
//uchar DATA[16] = {'W','e','l','c','o','m','e',' ','t','o',' ','C','U','M','T','!'};
uchar DATA1[] = {" Welcome to "};
uchar DATA2[] = {" CUMT! "};
/********** LCD1602接線引腳定義 ***********/
//E -- PD4
//RW -- PD5
//RS -- PD6
//DB0~7 -- PC0~7
/****************** 延時函數 *****************/
void delay(uint t)
{
while(t--);
}
void delay_ms(uint t)
{
uint i,j;
for(i=t;i>0;i--)
for(j=0;j<1140;j++);
}
/****************** 端口初始化 *****************/
void port_init(void)
{
PORTA = 0x00;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00;
DDRC = 0xFF;
PORTD = 0x00;
DDRD = 0xFF;
}
/****************** mega16 初始化 *****************/
void init_devices(void)
{
CLI();
port_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00;
SEI();
}
/****************** 檢查忙信號 *****************/
void lcd_busy()
{
DDRC = 0X00; //PC 口改為輸入
PORTD = 0X20;
delay(10);
PORTD = 0X30;
while(PINC & 0X80); //lcd 忙,則在此循環
PORTD = 0X20;
DDRC = 0XFF; //PC 口改為輸出
}
/****************** 寫命令函數 *****************/
void lcd_cmd(uchar cmd)
{
lcd_busy();
PORTD = 0X00;
delay(1);
PORTC = cmd; //PC 口輸出命令
delay(1);
PORTD = 0X10;
delay(1); //延時
PORTD = 0X00;
}
/****************** 寫數據函數 *****************/
void lcd_data(uchar data)
{
lcd_busy();
PORTD = 0X40;
delay(1);
PORTC = data; //寫要顯示的字
delay(1);
PORTD = 0X50;
delay(1);
PORTD = 0X40;
}
/****************** 顯示函數 *****************/
void lcd_DAT(uchar x,uchar y,uchar DAT)
{
if(y) x += 0x40;
x |= 0x80;
lcd_cmd(x); //寫要顯示的地址
lcd_data(DAT); //寫顯示的內容
}
/****************** lcd 初始化 *****************/
void lcd_init()
{
lcd_cmd(0x38);
lcd_cmd(0x08);
lcd_cmd(0x01);
lcd_cmd(0x06);
lcd_cmd(0x0c);
}
/****************** 主函數 *****************/
void main(void)
{
uchar i,p=1;
char m = 11;
init_devices();
delay_ms(100);
lcd_init();
/*lcd_DAT(0,0,'G');
lcd_DAT(1,0,'O');
lcd_DAT(2,0,'O');
lcd_DAT(3,0,'D');
lcd_DAT(5,1,'B');
lcd_DAT(6,1,'Y');
lcd_DAT(7,1,'E');*/
lcd_cmd(0x80);
for(i=0;DATA1[i] != '\0';i++)
{
lcd_DAT(i,0,DATA1[i]);
}
while(1)
{
for(i=0;i<16;i++)
{
lcd_DAT(i,1,DATA2[i+m]);
}
delay_ms(700); //滾動屏
if(p == 1) m --;
else if(p == 0) m++;
if(m >= 11) p = 1;
else if(m <= 0) p = 0;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -