欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
LCD12864仿真顯示正常 但下載到板子上就只顯示左半邊了 確定屏幕好的 片選管腳接對了
[打印本頁]
作者:
我在東北玩51
時間:
2021-5-18 20:25
標題:
LCD12864仿真顯示正常 但下載到板子上就只顯示左半邊了 確定屏幕好的 片選管腳接對了
程序如下
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs = P3^5; //RS為0--命令,1--數據
sbit rw = P3^6; //RW為1--讀,0--寫
sbit en = P3^4; //使能端
sbit cs1 = P2^4; //片選1低電平有效,控制左半屏
sbit cs2 = P2^0; //片選1低電平有效,控制右半屏
void read_busy() //讀“忙”函數--數據線的最高位的DB71則busy
{
P0 = 0x00;
rs = 0;
rw = 1;
en = 1;
while(P0 & 0x00);
en = 0;
}
void write_LCD_command(uchar value) //寫命令函數
{
read_busy(); //對LCD的每次讀寫都要讀忙
rs = 0; //選擇命令
rw = 0; //寫操作
en = 1; //EN由1--0鎖存有效數據
P0 = value;
en = 0;
rw = 1;
}
void write_LCD_data(uchar value) //寫數據函數
{
read_busy();
rs = 1; //選擇數據
rw = 0;
en = 1;
P0 = value;
en = 0;
rw = 1;
}
void set_page(uchar page) //設置“頁”LCD23875共8頁
{
page |= 0xb8; //頁的首地址0xB8
write_LCD_command(page);
}
void set_column(uchar column) //設置顯示的列
{
column &= 0x3f; //列的最大值為64
column += 0x40; //列的首地址為0x40
write_LCD_command(column); //規定顯示的列的位置
}
void selectScreen(uchar screen) //選擇屏幕
{
switch(screen)
{
case 0:
cs1 = 0;
cs2 = 0;
break; //全屏
case 1:
cs1 = 0;
cs2 = 1;
break; //左半屏
case 2:
cs1 = 1;
cs2 = 0;
break; //右半屏
default:
break;
}
}
void clearScreen(uchar screen) //清屏函數
{
uchar i,j;
selectScreen(screen); //0--全屏,1--左半屏,2--右半屏
for(i = 0;i < 8;i ++) //控制頁數0-7,共8頁
{
set_page(i);
set_column(0);
for(j = 0;j < 64;j ++) //控制列數0-63,共64列
{
write_LCD_data(0x00); //寫入0,地址指針自加1
}
}
}
void initLCD() //LCD的初始化
{
read_busy();
write_LCD_command(0x3f); //開顯示,0x3e是關顯示,0x3f是開顯示
selectScreen(0); //選全屏
clearScreen(0); //清屏
}
void display(uchar ss,uchar page,uchar column,uchar p[]) //顯示漢字
{
uchar i;
selectScreen(ss);
set_page(page); //寫上半頁
set_column(column); //控制列
for(i = 0;i < 16;i ++)
{
write_LCD_data(p
); //漢字的上半部分
}
set_page(page + 1); //寫下半頁
set_column(column); //控制列
for(i = 0;i < 16;i ++) //控制16列的數據輸出
{
write_LCD_data(p[i + 16]); //漢字的下半部分
}
}
void display_char(uchar ss,uchar page,uchar column,uchar asc,uchar p1[][16]) //顯示字符
{
uchar i;
selectScreen(ss);
set_page(page); //寫上半頁
set_column(column); //控制列
asc -= 0x20; //ASC2碼與字符表相差20個模擬值
for(i = 0;i < 8;i ++)
{
write_LCD_data(p1[asc]
); //字符的上半部分
}
set_page(page + 1); //寫下半頁
set_column(column); //控制列
for(i = 0;i < 8;i ++) //控制8列的數據輸出
{
write_LCD_data(p1[asc][i + 8]); //字符的下半部分
}
}
void display_BMP(uchar img[][64]) //顯示圖形
{
uchar i,j;
for(j = 0;j < 4;j ++)
{
selectScreen(1);
set_page(j + 4);
set_column(0);
for(i = 0;i < 64;i ++) //顯示左屏
{
write_LCD_data(img[2 * j]
); //每隔一行取一次數組中的數據(0頁為左半屏,1頁為右半屏,依此類推)
}
selectScreen(2);
set_page(j + 4);
set_column(0);
for(i = 0;i < 64;i ++) //顯示右屏
{
write_LCD_data(img[2 * j + 1]
); //每隔一行取一次數組中的數據
}
}
}
//void main()
//{
// initLCD(); //初始化12864
// clearScreen(0); //清屏
// display_BMP(img);
//
// while(1);
//}
作者:
我在東北玩51
時間:
2021-5-18 20:30
這個是主程序 上面是顯示部分#include<reg52.h>
#include"ZK.h"
#define uchar unsigned char
#define uint unsigned int
sbit db5 = P1^4;
bit flag;
uchar ii,f1,i,j,k; //在函數內部定義時,該變量會一直保持函數執行后的值
extern void initLCD();
extern void clearScreen(uchar screen);
extern void display(uchar ss,uchar page,uchar column,uchar p[]);
extern void display_BMP(uchar img[][64]);
extern void display_char(uchar ss,uchar page,uchar column,uchar asc,uchar p1[][16]);
void delay(uint i,uint j) //delay(1,82)為1.01779ms
{
uint x,y; //delay(x,0):15.19,39.07,62.94,86.9,110.68,134.55,158.42,182.29,206.17,230.04,253.91(x取0 ~ 10)us
for(x = i;x > 0;x --)
for(y = j;y > 0;y --); //執行此句約需24us,24x + 14 = delay(x,0)的延時時間
}
void read_data()
{
clearScreen(0);
while(i < 8)
{
if(f1 >= ii)
break;
while(k ++ < 8) //先比較,再++,例如k = 0,小于8,成立,然后k就變成1并在下程序中進行運算
{
display_char(1,i * 2, j * 8,receive[k + i * 16 - 1],table); //當k在while中是7時,到這里運算已經是8了
j ++;
f1 ++;
if(f1 >= ii)
break;
}
if(f1 >= ii)
break;
while(k ++ < 17) //每比較一次,無論以下運算進行與否,k都會加一
{
display_char(2,i * 2,j * 8,receive[k + i * 16 - 2],table); //當k = 8時,返回第一個while比較時變成了9,到第二個就變成了10
j ++;
f1 ++;
if(f1 >= ii)
break;
}
i ++;
k = 0;
}
ii = 0;
f1 = 0;
i = 0;
j = 0; //在本函數定義時,函數執行后也要清0,同上同下
k = 0;
}
void main()
{
TMOD = 0x20; //設置定時器1為工作方式2,低8位計數溢出后將高8位的值賦值給低8位,繼續進行定時計數
TH1 = 0xfd;
TL1 = 0xfd; //方式1的波特率 =(2SMOD/32)·{fosc /{12×[256 -(TH1)]}}
TR1 = 1;
SM0 = 0;
SM1 = 1;
REN = 1;
EA = 1;
ES = 1;
initLCD(); //初始化12864
clearScreen(0); //清屏
while(1)
{
if(db5 == 0 && flag == 0)
{
delay(2,82);
if(db5 == 0)
{
flag = 1;
while(!db5);
clearScreen(0); //清屏
display(1,0,2 * 16,huan); //歡
display(1,0,3 * 16,ying); //迎
display(2,0,0 * 16,liu); //瀏
display(2,0,1 * 16,lan); //覽
display(1,2 + 0,0 * 16,tu); //圖
display(1,2 + 0,1 * 16,wen); //文
display(1,2 + 0,2 * 16,shu); //輸
display(1,2 + 0,3 * 16,ru); //入
display(2,2 + 0,0 * 16,yan); //演
display(2,2 + 0,1 * 16,shi); //示
display(2,2 + 0,2 * 16,cheng); //程
display(2,2 + 0,3 * 16,xu); //序
display_BMP(img);
}
}
else if(db5 == 0 && flag == 1)
{
delay(2,82);
if(db5 == 0)
{
flag = 0;
while(!db5);
clearScreen(0);
delay(5,82);
}
}
if(flag == 0 && ii != 0)
{
read_data();
}
}
}
void received() interrupt 4
{
RI = 0;
receive[ii ++] = SBUF;
}
作者:
wwh2382
時間:
2021-5-19 08:38
先確認其它程序能否在板子上正常顯示
作者:
我在東北玩51
時間:
2021-5-19 14:30
wwh2382 發表于 2021-5-19 08:38
先確認其它程序能否在板子上正常顯示
確認過 正常顯示
作者:
我在東北玩51
時間:
2021-5-30 19:00
已經找到問題
作者:
人人學會單片機
時間:
2021-6-19 08:48
LCD12864中文資料包 容易看明白
http://m.raoushi.com/bbs/dpj-200462-1.html
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1