久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機LCD1602實時時鐘 為什么第二行的“T”為什么顯示不出來?
[打印本頁]
作者:
邁特拉布
時間:
2018-5-28 08:02
標題:
單片機LCD1602實時時鐘 為什么第二行的“T”為什么顯示不出來?
哪位大神幫我看看為什么 LCD的第二行的“T”為什么顯示不出來?下面是我的代碼
#include <reg52.h>
#include <string.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SDA=P1^0; // DS1302數據線
sbit CLK=P1^1; //DS1302時鐘線
sbit RST=P1^2; //DS1302復位線
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
uchar *WEEK[]={"SUN","TUS","MON","WEN","THU","FRI","SAT"};
uchar LCD_DSY_BUFFER1[]={"Date 00-00-01 "}; //LCD顯示緩沖
uchar LCD_DSY_BUFFER2[]={"Time 00:00:00 "};
uchar DateTime[7]; //所讀取的日期時間
void DelayMS(uint x)
{
uchar i;
while(x--) for(i=0;i<120;i++);
}
void DS1302_Write_Byte(uchar x)
{
uchar i;
for(i=0;i<8;i++)
{
SDA=x&1;
CLK=1;
CLK=0;
x>>=1;
}
}
uchar DS1302_Read_Byte()
{
uchar i,b,t;
for(i=0;i<8;i++)
{
b>>=1;
t=SDA;
b|=t<<7;
CLK=1;
CLK=0;
}
return b/16*10+b%16;
}
uchar Read_Data(uchar addr)
{
uchar dat;
RST=0;
CLK=0;
RST=1;
DS1302_Write_Byte(addr);
dat=DS1302_Read_Byte();
CLK=1;
RST=0;
return dat;
}
void GetTime()
{
uchar i;
for(i=0;i<7;i++)
{
DateTime[i]=Read_Data(0x81+2*i);
}
}
uchar Read_LCD_State()
{
uchar state;
RS=0;
RW=1;
EN=1;
DelayMS(1);
state=P0;
EN=0;
DelayMS(1);
return state;
}
void LCD_Busy_Wait()
{
while((Read_LCD_State()&0x08)==0x80);
DelayMS(5);
}
void Write_LCD_Data(uchar dat) //寫數據
{
LCD_Busy_Wait();
RS=1;
RW=0;
EN=0;
P0=dat;
EN=1;
DelayMS(1);
EN=0;
}
void Write_LCD_Command(uchar cmd)//寫命令
{
LCD_Busy_Wait();
RS=0;
RW=0;
EN=0;
P0=cmd;
EN=1;
DelayMS(1);
EN=0;
}
void Init_LCD() //LCD初始化
{
Write_LCD_Command(0x38); DelayMS(1);
Write_LCD_Command(0x01); DelayMS(1);
Write_LCD_Command(0x06); DelayMS(1);
Write_LCD_Command(0x0C); DelayMS(1);
}
void Set_LCD_POS(uchar p)
{
Write_LCD_Command(p+0x80);
}
void Display_LCD_String(uchar p,uchar *s)
{
uchar i;
Set_LCD_POS(p);
for(i=0;i<16;i++)
{
Write_LCD_Data(s[i]);
DelayMS(1);
}
}
void Format_DateTime(uchar d,uchar *a)
{
a[0]=d/10+'0';a[1]=d%10+'0';
}
void main()
{
Init_LCD();
while(1)
{
GetTime();
Format_DateTime(DateTime[6],LCD_DSY_BUFFER1+5); //年
Format_DateTime(DateTime[4],LCD_DSY_BUFFER1+8); //月
Format_DateTime(DateTime[3],LCD_DSY_BUFFER1+11); //日
strcpy(LCD_DSY_BUFFER1+13,WEEK[DateTime[5]]); //week
Format_DateTime(DateTime[2],LCD_DSY_BUFFER2+5); //hour
Format_DateTime(DateTime[1],LCD_DSY_BUFFER2+8);
Format_DateTime(DateTime[0],LCD_DSY_BUFFER2+11);
Display_LCD_String(0x00,LCD_DSY_BUFFER1);
Display_LCD_String(0x40,LCD_DSY_BUFFER2);
}
}
復制代碼
作者:
QIANLILI
時間:
2018-5-28 23:00
void Display_LCD_String(uchar p,uchar *s)
{
uchar i;
Set_LCD_POS(p);
for(i=0;i<16;i++) //
你這里顯示時用的是循環16次。
{
Write_LCD_Data(s[ i]);
DelayMS(1);
}
}
而上面定義的
uchar LCD_DSY_BUFFER1[]={"
Date 00-00-01
"};
//這里定義了15個字符 都沒滿16個
uchar LCD_DSY_BUFFER2[]={"
Time 00:00:00
"};
//這里定義了14個字符 都沒滿16個
應該改成
uchar LCD_DSY_BUFFER1[]={"
Date 00-00-01
"};
//后面多加個空格
uchar LCD_DSY_BUFFER2[]={"
Time 00:00:00
"};
//后面多加2個空格
其它程序沒問題。我已仿真測試過。
作者:
邁特拉布
時間:
2018-5-29 10:16
QIANLILI 發表于 2018-5-28 23:00
void Display_LCD_String(uchar p,uchar *s)
{
uchar i;
謝謝您
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
免费看一区二区三区
|
久久久久久成人
|
亚洲精品一区二区在线观看
|
一区二区三区免费
|
日韩精品在线免费
|
国产日韩一区二区三区
|
成人精品鲁一区一区二区
|
伊人伊成久久人综合网站
|
日韩高清三区
|
成人一级视频在线观看
|
性高朝久久久久久久3小时 av一区二区三区四区
|
青青久久av北条麻妃海外网
|
日韩精品久久久久
|
欧美一区二区三区在线观看
|
免费精品久久久久久中文字幕
|
亚洲精品免费视频
|
国产免费色
|
成人a视频片观看免费
|
亚洲欧美日韩中文字幕一区二区三区
|
在线观看电影av
|
国产蜜臀97一区二区三区
|
久久久影院
|
亚洲a视频
|
91成人在线
|
精品免费国产一区二区三区四区
|
午夜免费电影院
|
欧美性生活免费
|
中文字幕在线视频观看
|
亚洲精品乱码久久久久久按摩观
|
中文字幕国产视频
|
欧美日韩视频一区二区
|
欧美一区二区三区在线播放
|
亚洲欧美日韩中文字幕一区二区三区
|
国产情侣激情
|
欧美精品91爱爱
|
一区二区三区视频在线免费观看
|
91av免费看
|
国产亚洲精品综合一区
|
日本一级淫片免费啪啪3
|
日韩一区二区在线视频
|
欧美精品久久久久久久久久
|