![]() |
發(fā)布時間: 2020-6-20 11:43
正文摘要:#ifndef _DS1302_H_ #define _DS1302_H_ #define uchar unsigned char sbit SCLK=P2^3; //ds1302時鐘線定義 sbit IO=P2^4; //數(shù)據(jù)線 sbit RST=P2^5; & ... |
#ifndef _LCD1602_H_ #define _LCD1602_H_ #define uchar unsigned char #define uint unsigned int uchar sec,min,hour,day,min,year,week; sbit RS = P2^0; //寄存器選擇信號 H:數(shù)據(jù)寄存器 L:指令寄存器 sbit RW = P2^1; //讀寫選擇信號 H:讀 L:寫 sbit EN = P2^2; //片選信號 下降沿觸發(fā) #define yh 0x80 //第一行的初始位置 #define er 0x80+0x40 //第二行初始位置 uchar code tab1[]={"2020-06-19 FRI"}; uchar code tab2[]={"10:32:48"}; /***********************延時函數(shù)************************/ void delay(uint xms)//延時函數(shù) { uint x,y; for(x=xms;x>0;x--) for(y=110;y>0;y--); } void delay_uint(uint q) { while(q--); } /*------------------------------------------------ 寫入命令函數(shù) ------------------------------------------------*/ void LCD_Write_Cmd(uchar cmd) { RS=0; // 選擇指令寄存器 RW=0;//寫操作 EN=0;//正跳變,將命令寫入液晶模塊 P0=cmd; //將命令送入P0 delay_uint(3); EN=1; delay_uint(25); EN=0; } /*------------------------------------------------ 寫入數(shù)據(jù)函數(shù) ------------------------------------------------*/ void LCD_Write_Data(uchar Data) { RS=1; //選擇數(shù)據(jù)寄存器 RW=0; //寫操作 EN=0; P0= Data; //將數(shù)據(jù)送入P0 delay_uint(3); EN=1; delay_uint(25); EN=0; } /*------------------------------------------------ 寫入星期函數(shù) ------------------------------------------------*/ void LCD_Write_week(uchar week) { LCD_Write_Cmd(yh+0x0d);//將星期顯示到LCD的第一行的13位 switch(week) { case 1:LCD_Write_Data('M'); LCD_Write_Data('O'); LCD_Write_Data('N'); break; case 2:LCD_Write_Data('T'); LCD_Write_Data('U'); LCD_Write_Data('E'); break; case 3:LCD_Write_Data('W'); LCD_Write_Data('E'); LCD_Write_Data('D'); break; case 4:LCD_Write_Data('T'); LCD_Write_Data('H'); LCD_Write_Data('U'); break; case 5:LCD_Write_Data('F'); LCD_Write_Data('R'); LCD_Write_Data('I'); break; case 6:LCD_Write_Data('S'); LCD_Write_Data('T'); LCD_Write_Data('A'); break; case 7:LCD_Write_Data('S'); LCD_Write_Data('U'); LCD_Write_Data('N'); break; } } /*------------------------------------------------ 寫入時分秒函數(shù) ------------------------------------------------*/ void LCD_Write_sfm(uchar add,uchar dat) { uchar gw,sw;//定義十位 個位 gw=dat%10; sw=dat/10; LCD_Write_Cmd(er+add); ///將時分秒顯示到LCD的第二行的add位 LCD_Write_Data(0x30+sw); LCD_Write_Data(0x30+gw);//0x30=48 十進制數(shù)+48=等于其ascll值 lcd1602為字符型 } /*------------------------------------------------ 寫入年月日函數(shù) ------------------------------------------------*/ void LCD_Write_nyr(uchar add,uchar dat) { uchar gw,sw;//定義十位 個位 gw=dat%10; sw=dat/10; LCD_Write_Cmd(yh+add); ///將時分秒顯示到LCD的第二行的add位 LCD_Write_Data(0x30+sw); LCD_Write_Data(0x30+gw);//0x30=48 十進制數(shù)+48=等于其ascll值 lcd1602為字符型 } /*------------------------------------------------ 寫入字符串函數(shù) ------------------------------------------------*/ void LCD_Write_String(uchar x,uchar y,uchar *s) { if (x == 0) { LCD_Write_Cmd(0x80 + y); //表示第一行 } else { LCD_Write_Cmd(0xC0 + y); //表示第二行 } while (*s) { LCD_Write_Data( *s); s ++; } } /*------------------------------------------------ 開機液晶顯示函數(shù) ------------------------------------------------*/ void Init_1602() //初始化液晶 { LCD_Write_String(0,2,"Hello world"); } /*------------------------------------------------ 初始化函數(shù) ------------------------------------------------*/ void LCD_Init(void) { uchar i; LCD_Write_Cmd(0x38);//顯示模式設置:16x2顯示,5x7點陣,8位數(shù)據(jù)接口 LCD_Write_Cmd(0x0c); //顯示模式設置:顯示開,有光標 LCD_Write_Cmd(0x06); //顯示模式設置:光標右移,字符不移 LCD_Write_Cmd(0x01); //清屏 Init_1602(); delay(1000); LCD_Write_Cmd(yh+2);//字符寫入的位置--第一行第2位 for(i=0;i<14;i++) { LCD_Write_Data(tab1[i]); } LCD_Write_Cmd(er+4); for(i=0;i<8;i++) { LCD_Write_Data(tab2[i]); } } #endif 這是LCD1602的程序 |