欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
51單片機中如何用12864單獨顯示兩個獨立數(shù)字
[打印本頁]
作者:
280570255
時間:
2019-5-21 10:44
標(biāo)題:
51單片機中如何用12864單獨顯示兩個獨立數(shù)字
最近想做一件東西,卻想到一個一直沒有直視的問題,12864只能顯示32個漢字,但如何實現(xiàn)在某個位置上寫上兩個數(shù)字呢(不用數(shù)組),在網(wǎng)上也很少有這類資料,至少我沒有看到,偶然間在調(diào)試1602程序時,發(fā)現(xiàn)位置可以自動加1,也就是你定了一個位置,寫上數(shù)據(jù)后,可以連續(xù)寫,如下程序,就實現(xiàn)在在cd_pos(2,0);
//第二行第一列地址上顯示45度的字樣,你學(xué)會了嗎?
單片機源程序如下:
#include<reg52.h> //每個程序都 要包含頭文件,
typedef unsigned char uint8; //聲明定義 ,,同 #define ,但#define要加#號才能使用 ,后不加分號
typedef unsigned int uint16;
sbit rs=P2^6;//數(shù)據(jù)或命令接口
sbit rw=P2^5; //讀寫接口
sbit e=P2^7; //使能接口
sbit PSB=P3^2;
uint8 code a[]="今天2019年05月11"; //1602只能顯示每行40個字符,多余的無法顯示
uint8 code b[]="現(xiàn)在天氣真的很熱";//為了標(biāo)示顯示位置,兩行作為對比 7890
void delay(uint16 i) //1us
{ uint8 t;
while(i--)
{
for(t=0;t<12;t++) ;
}
}
//寫指令程序
void write_cmd(uint8 cmd)
{
delay(2);
rs=0; //指令接口
rw=0; //寫指令
e=0;
P0=cmd; //指令傳給IO口
e=1; //使能端高電平有效,要再拉低結(jié)束程序轉(zhuǎn)送,
delay(2);
e=0;
}
//寫數(shù)據(jù)程序
void write_dat(uint8 dat)
{
delay(2);
rs=1; //數(shù)據(jù)
rw=0; //寫
e=0;
P0=dat;
e=1;
delay(10);
e=0;
delay(2); //每寫完一個數(shù)據(jù), 延時,這樣顯示慢一點,也決定了移屏的速度
}
void init()
{
delay(1);
PSB=1;
write_cmd(0x30); // 0x30:8位數(shù)據(jù)總線,基本指令集 設(shè)置為位數(shù)據(jù)總線,單行或雙行顯示
delay(5); // 0x34:8位數(shù)據(jù)總線,擴充指令集 可實現(xiàn)翻屏操作
write_cmd(0x0c); //0X0f:光標(biāo)顯示及閃爍 0X0c:光標(biāo)不顯示及不閃爍
delay(5); //0X0e: 光標(biāo)顯示,不閃爍 0x0d:光標(biāo)不顯示閃爍
//同1602
write_cmd(0x01); //清屏顯示
delay(5);
}
void lcd_pos(uint8 x,uint8 y) //位置函數(shù),非常重要,顯示第幾行,幾列
{
uint8 pos;
if(x==0)
{
x=0x80;
}
else if(x==1)
{
x=0x90;
}
else if(x==2)
{
x=0x88;
}
else if(x==3)
{
x=0x98;
}
pos=x+y; //第幾的第幾個位置,,所以要相加,相當(dāng)于第1行的第Y列的,Y,的位置就要定為X+Y
write_cmd(pos);
}
void display()
{
uint8 i;
lcd_pos(0,0); //第一行第一列地址,若要空降某一地址,寫上即可
for(i=0;i<16;i++) //設(shè)置 80個字符顯示,第一行顯示完,自動在第二行顯示
{
write_dat(a[i]); //用了數(shù)組 ,就要以直接寫顯示 的字符,否者字符要加單引號''
}
//單獨顯示某一個字時必須寫上對應(yīng)的十六 進(jìn)制編碼;不要
//不能直接寫上
lcd_pos(1,0); //第二行第一列地址
for(i=0;i<16;i++)
{
write_dat(b[i]);
}
lcd_pos(2,0); //第二行第一列地址
write_dat('4') ; //顯示45 度
write_dat('5') ;
write_dat(0XA1); // 兩個度字節(jié)顯示0C
write_dat(0xe6); //
}
void main()
{
init();
while(1)
{
display();
}
}
復(fù)制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1