資源簡介
LCD1602時鐘可翻頁代碼,不錯,有proteus仿真,程序完整,大家可下載。

代碼片段和文件信息
//單行或雙行顯示
//顯示的起始位置設定
//屏幕左右移動,動畫效果
//給定一個字符數組,如何通過strlen()來判斷字符串的長度?這樣在for初始化時,也許可以簡化程序
//最后的一行,會再次顯一遍,又返回到了第一行
//遇到\n?自動換行
//兩個外部中斷調節,自動翻頁的速度。
//暫停鍵,再次按,開始
//設置一個手動翻頁,上下鍵
//如果全用中斷那么中斷太多,如何擴展中斷?
#include?
#include?
#define?uchar?unsigned?char
#define?uint??unsigned?int
sbit?lcd_RS=P2^5;????????????????????????????????//定義寄存器
sbit?lcd_RW=P2^6;????????????????????????????????//定義是否讀寫
sbit?lcd_E=P2^7;????????????????????????????????//定義使能端
sbit?lcd_flag=P0^7;?????????????????????????????//定義是否Busy標志
sbit?pd=P1^0;
sbit?pu=P1^1;
sbit?spdd=P1^2;
sbit?spdu=P1^3;
uint?spd=600;
uchar?*app;
//uchar?dis1[]=“0123456789012345“;
//uchar?dis2[]=“abcdefghijklmnop“;
?uchar?code?dis[]=“you?bought?all?the?books?you?need?thiss?emester?yet?“;
//uchar?dis1[]=“012345“;
bit?lcd_busy()????????????????????????????????//判斷是否忙碌?RS=Low,RW=High,E=High:讀狀態
{?
????????bit?flag;????????????????
????????lcd_RS=0;?????????????????????????????//寄存器為Low
????????lcd_RW=1;?????????????????????????????//是否讀寫為High
????????lcd_E=1;??????????????????????????????//使能端為High
????????if?(lcd_flag==1)?flag=1;
????????else?flag=0;
????????lcd_E=0;
????????return?flag;?????????????????????????//返回標志,判斷是否LCD忙碌
}
void?lcd_putcommand(uchar?command)?????//寫指令?RS=LowRW=LowE=High:寫指令
{?
????????while?(lcd_busy());????????????//判斷是否忙碌
????????lcd_RS=0;??????????????????????????????????????????????????????????????????????????
????????lcd_RW=0;
????????lcd_E=0;???????????????????????
????????P0=command;???????????????????
????????lcd_E=1;??????????????????????
????????lcd_E=0;
}
void?lcd_putchar(uchar?putchar)??????//寫數據?RS=HighRW=LowE=High:寫數據
{?
????????while(lcd_busy());???????????//判斷是否忙碌
????????lcd_RS=1;
????????lcd_RW=0;
????????lcd_E=0;?????????????????????
????????P0=putchar;??????????????????
????????lcd_E=1;???????????????????
????????lcd_E=0;
}
void?lcd_moveto(uchar?xuchar?y)????????????????????//顯示字符的位置:第x行y列(X=1或2Y=1~16)
{?
????????if?(x==0)?lcd_putcommand(0x80|y-1);?????//第一行,并初始化從第y-1個字符開始顯示
????????if?(x==1)?lcd_putcommand(0xc0|y-1);?????//第二行,并............
}
void?lcd_delay(uint?ms) //延時函數
{?
????????uchar?i;
????????while(ms--)
????????{
????????????????for(i=0;i<250;i++)
????????????????{
????????????????_nop_();_nop_();_nop_();_nop_();
????????????????}
????????}
}
void?lcd_init(void)
{
????????lcd_putcommand(0x38);??lcd_delay(1);?//LCD為2行,5×7字
????????lcd_putcommand(0x0e);??//打開顯示,顯示光標,光標不閃
// lcd_putcommand(0x0f);??//....................光標閃爍??
????????lcd_delay(1);
????????lcd_putcommand(0x06);?lcd_delay(1);//每次右移一字符
????????
}
void?main(void)
{
// IT0=1;??//設置中斷觸發方式,下降沿
// ????IE=0X81;
????????//uchar?flagmi;
uchar?*p;
app=dis;
????????//m=strlen(dis);
????????lcd_init();??????????????????????????????????????????????????????????????????????????//初始化
//????????lcd_delay(10);
???? IT0=1;????//設置中斷觸發方式,下降沿
IE=0X81;??//中斷放在前面,會引起指針變量聲明錯誤
while
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????8313??2008-03-30?11:45??1602L13\1602
?????文件???????4589??2008-03-30?11:45??1602L13\1602.c
?????文件???????2102??2008-03-30?11:45??1602L13\1602.hex
?????文件?????????41??2008-03-30?11:45??1602L13\1602.lnp
?????文件??????25604??2008-03-30?11:45??1602L13\1602.LST
?????文件??????11012??2008-03-30?11:45??1602L13\1602.M51
?????文件???????9084??2008-03-30?11:45??1602L13\1602.OBJ
?????文件???????1237??2008-03-30?11:45??1602L13\1602.Opt
?????文件????????552??2008-03-30?11:45??1602L13\1602.plg
?????文件???????2160??2008-03-30?11:18??1602L13\1602.Uv2
????.......??????1239??2008-03-30?11:43??1602L13\1602_Opt.Bak
????.......??????2160??2008-03-30?11:18??1602L13\1602_Uv2.Bak
?????文件??????88263??2008-12-25?11:05??1602L13\Last?Loaded?test.DBK
?????文件???????6376??2005-03-22?15:22??1602L13\STARTUP.A51
?????文件??????14048??2008-03-30?11:45??1602L13\STARTUP.LST
?????文件????????749??2008-03-30?11:45??1602L13\STARTUP.OBJ
?????文件??????88263??2008-12-25?11:05??1602L13\test.DSN
?????文件????????768??2008-12-25?11:07??1602L13\test.PWI
?????目錄??????????0??2009-05-31?18:47??1602L13
?????文件???????8313??2008-03-30?11:45??1602L13\1602L13\1602
?????文件???????4589??2008-03-30?11:45??1602L13\1602L13\1602.c
?????文件???????2102??2008-03-30?11:45??1602L13\1602L13\1602.hex
?????文件?????????41??2008-03-30?11:45??1602L13\1602L13\1602.lnp
?????文件??????25604??2008-03-30?11:45??1602L13\1602L13\1602.LST
?????文件??????11012??2008-03-30?11:45??1602L13\1602L13\1602.M51
?????文件???????9084??2008-03-30?11:45??1602L13\1602L13\1602.OBJ
?????文件???????1237??2008-03-30?11:45??1602L13\1602L13\1602.Opt
?????文件????????552??2008-03-30?11:45??1602L13\1602L13\1602.plg
?????文件???????2160??2008-03-30?11:18??1602L13\1602L13\1602.Uv2
????.......??????1239??2008-03-30?11:43??1602L13\1602L13\1602_Opt.Bak
............此處省略11個文件信息
- 上一篇:用DSP控制nrf24L01
- 下一篇:生物多樣性計算軟件
評論
共有 條評論