1.LED點(diǎn)陣簡(jiǎn)介
1.1鞠绰、什么是LED點(diǎn)陣
內(nèi)部結(jié)構(gòu)原理圖厢洞。點(diǎn)陣的優(yōu)勢(shì)就是8+8個(gè)IO口獨(dú)立控制8*8個(gè)LED亮滅绳锅。
1.2西饵、原理圖分析
(1)單片機(jī)端口直接驅(qū)動(dòng)。要驅(qū)動(dòng)88的點(diǎn)陣需要2個(gè)IO端口(16個(gè)IO口)鳞芙、要驅(qū)動(dòng)1616的點(diǎn)陣需要4個(gè)IO端口(32個(gè)IO口)眷柔。
(2)使用串轉(zhuǎn)并移位鎖存器驅(qū)動(dòng)。要驅(qū)動(dòng)16*16點(diǎn)陣只需要4個(gè)74HC595+3個(gè)IO口即可(數(shù)據(jù)口积蜻、SLCK闯割、RCLK)
2.原理圖分析
2.1、POS1-16和NEG1-16分別接移位鎖存器并行輸出端
POS就是Positive正極竿拆,NEG就是Negetive負(fù)極宙拉。
2.1、74HC595的接法分析
(1)QA-QH 8路并行輸出接到點(diǎn)陣的一個(gè)接口
(2)QH'串行輸出口接下一個(gè)74HC595的串行輸入SER(串聯(lián)順序按照ABCD)
(3)SER串行輸入接:第一個(gè)595的SER通過(guò)跳線帽JP595接P3.4丙笋,后面的每一個(gè)SER接前一個(gè)的QH'谢澈。這樣就構(gòu)成了ABCD4個(gè)595芯片依次串聯(lián)。所以將來(lái)編程時(shí)整個(gè)4個(gè)74HC595的串行數(shù)據(jù)都是從P3.4出來(lái)的御板。
(4)SCLK(SRCLK)接P3.6
(5)RCLK接P3.5
總結(jié):
①SCLK和RCLK是一樣的接法锥忿,都是接在P3.5和P3.6上
②總共涉及到的IO口有3個(gè):P3.4、P3.5怠肋、P3.6
③外部接線重點(diǎn):2個(gè)8pin杜邦線+1個(gè)跳線帽
3.LED點(diǎn)陣編程實(shí)踐1
3.1敬鬓、74HC595的時(shí)序分析
(1)芯片與芯片之間的通信,都是按照一定的時(shí)序進(jìn)行的。
(2)時(shí)序就是芯片與芯片之間的通信引腳上電平變化以時(shí)間軸為參考的變化順序钉答。
(3)時(shí)序是通信雙方事先定義好的础芍,通信的發(fā)送方必須按照時(shí)序來(lái)發(fā)送有意義的信息,通信的接收方按照時(shí)序去接收解析發(fā)送方發(fā)來(lái)的電平變化信息数尿,然后就知道發(fā)送方要給我發(fā)送什么東西了仑性。
(4)我們編程時(shí):發(fā)送方是單片機(jī),接收方是74HC595右蹦。因?yàn)?95芯片本身是不能編程的诊杆,他的時(shí)序芯片出廠時(shí)已經(jīng)設(shè)定好了。因此我們單片機(jī)必須遷就595芯片何陆,按照595芯片的時(shí)序來(lái)給它發(fā)信息晨汹。
(5)所以我們要先搞清楚74HC595的時(shí)序規(guī)則。595的芯片手冊(cè)上就有它的時(shí)序描述(時(shí)序圖)甲献,參考描述就可以明白595芯片的時(shí)序規(guī)則宰缤,然后將其用編程語(yǔ)言表述出來(lái)就是程序了。
(6)74HC595的時(shí)序關(guān)鍵是:SCLK和RCLK晃洒。SCLK是移位時(shí)鐘,595芯片內(nèi)部在每個(gè)SCLK的上升沿會(huì)對(duì)SER引腳進(jìn)行一次采樣輸入朦乏,就向595內(nèi)部輸入了1位球及,如此循環(huán)8次就輸入了8位二進(jìn)制。RCLK是鎖存時(shí)鐘呻疹,QA-QH的8位并行輸出信號(hào)在RCLK的上升沿進(jìn)行一次鎖存更新吃引。
(7)理解74HC595芯片的通信時(shí)序關(guān)鍵,其實(shí)就是:SER進(jìn)行數(shù)據(jù)的串行輸入刽锤,SCLK提供移位時(shí)鐘镊尺,RCLK提供鎖存時(shí)鐘。
3.2并思、sbit定義位變量
(1)之前編程都是直接操作一個(gè)IO端口庐氮,可以用端口名(P0、P1)來(lái)整體操作一個(gè)IO端口中的8個(gè)引腳宋彼。但是這種方法不能操控單獨(dú)1個(gè)IO口弄砍。
(2)今天編程需要單獨(dú)操作1個(gè)IO引腳,比如要操作P3.4输涕,但是直接寫P3.4的話C語(yǔ)言是不認(rèn)識(shí)的音婶,而必須使用sbit關(guān)鍵字來(lái)定義一個(gè)引腳。sibt SER = P3^4;
4.LED點(diǎn)陣編程實(shí)踐2
4.1莱坎、編寫移位寄存器傳送函數(shù)SendData
(1) SER = d1 >> 7; SCLK = 0衣式;SCLK = 1;
這個(gè)代碼的意思可以形象的這樣理解,SCLK是一個(gè)貨梯碴卧,SER是貨梯上的籃子弱卡,SCLK為0的時(shí)候就是就位狀態(tài),這時(shí)候你要把數(shù)據(jù)放到SER里螟深,當(dāng)SCLK為1的時(shí)候就啟動(dòng)貨梯谐宙,把數(shù)據(jù)運(yùn)上去給QA-QH。
(2) RCLK = 0; RCLK = 1;
沒(méi)有運(yùn)行這兩句鎖存語(yǔ)句時(shí)界弧,點(diǎn)陣也會(huì)亮凡蜻,但是不可保證電平時(shí)穩(wěn)定一直不變的。當(dāng)鎖存后才可以保證電平是穩(wěn)定的垢箕。
4.2划栓、全屏點(diǎn)亮測(cè)試
(1)編寫硬件控制代碼,時(shí)序理解是關(guān)鍵条获。只要時(shí)序理解正確的忠荞,并且代碼按照時(shí)序的要求去寫,就沒(méi)問(wèn)題帅掘。
(2)時(shí)序操作部分的代碼只要寫好了并且是正確的委煤,下來(lái)這一塊就沒(méi)問(wèn)題,很簡(jiǎn)單修档,因?yàn)樗撬腊宓牟蛔兊摹?/p>
#include <reg51.h>
sbit SER = P3^4;
sbit RCLK = P3^5;
sbit SCLK = P3^6;
void main(void)
{
unsigned char i = 0;
unsigned char d1, d2, d3, d4; // 要給4個(gè)595并行輸出端輸出的值
SCLK = 0;
RCLK = 0;
d1 = 0x0; // d1和d2負(fù)極
d2 = 0x0;
d3 = 0xff; // d3和d4負(fù)極
d4 = 0xff;
for (i =0; i<8; i++)
{
SER = d1 >> 7; // 將d1的最高bit取出來(lái)給SER
SCLK = 0碧绞;
SCLK = 1; // 電位一低一高吱窝,2步制造一個(gè)SCLK的上升沿
d1 = d1 << 1; // 最高位丟掉讥邻,第二高位排到最高位給第一條語(yǔ)句執(zhí)行取出
}
// 至此已經(jīng)在8個(gè)SLCK上升沿把d1的8位依次全部發(fā)出去了,
// 但是還沒(méi)有進(jìn)行鎖存院峡,所以QA-QH有東西但是不能保證一直不變
for (i =0; i<8; i++)
{
SER = d2 >> 7; // 將d2的最高bit取出來(lái)給SER
SCLK = 0兴使;
SCLK = 1; // 2步制造一個(gè)SCLK的上升沿
d2 = d2 << 1; // 最高位丟掉照激,第二高位排到最高位給第一條語(yǔ)句執(zhí)行取出
}
// 至此已經(jīng)把d1和d2發(fā)出去了发魄,并且d1已經(jīng)被d2擠到第2個(gè)595芯片里面,
// 但是還沒(méi)有進(jìn)行鎖存实抡,所以QA-QH有東西但是不能保證一直不變
for (i =0; i<8; i++)
{
SER = d3 >> 7; // 將d3的最高bit取出來(lái)給SER
SCLK = 0欠母;
SCLK = 1; // 2步制造一個(gè)SCLK的上升沿
d3 = d3 << 1; // 最高位丟掉吆寨,第二高位排到最高位給第一條語(yǔ)句執(zhí)行取出
}
// 至此已經(jīng)把d1和d2和d3發(fā)出去了赏淌,并且d1已經(jīng)被d2和d3擠到第3個(gè)595芯片里面,
// 但是還沒(méi)有進(jìn)行鎖存啄清,所以QA-QH有東西但是不能保證一直不變
for (i =0; i<8; i++)
{
SER = d4 >> 7; // 將d4的最高bit取出來(lái)給SER
SCLK = 0六水;
SCLK = 1俺孙; // 2步制造一個(gè)SCLK的上升沿
d4 = d4 << 1; // 最高位丟掉,第二高位排到最高位給第一條語(yǔ)句執(zhí)行取出
}
// 至此已經(jīng)把d1和d2和d3和d4發(fā)出去了掷贾,
// 并且d1已經(jīng)被d2和d3和d4擠到第4個(gè)595芯片里面睛榄,
// 但是還沒(méi)有進(jìn)行鎖存,所以QA-QH有東西但是不能保證一直不變
/*
至此想帅,4個(gè)字節(jié)的數(shù)據(jù)d1场靴、d2、d3港准、d4已經(jīng)順著74HC595的SER→QH'的串行輸出旨剥,
串行輸出路線,已經(jīng)爬滿了4個(gè)74HC595(最先送出去的到了最后一個(gè)595中)
// 但是還沒(méi)有進(jìn)行鎖存浅缸,所以QA-QH有東西但是不能保證一直不變
然后要進(jìn)行一次鎖存轨帜,4個(gè)595芯片同時(shí)在進(jìn)行鎖存,各自鎖存住了自己的數(shù)據(jù)衩椒。
*/
RCLK = 0; // 電尾一低一高就完成鎖存了
RCLK = 1;
// 這兩句之后595就完成了鎖存蚌父,d1-d4就會(huì)影響4個(gè)595芯片的并行輸出端,
// 進(jìn)而會(huì)影響點(diǎn)陣中LED的正負(fù)極的值毛萌,然后LED就會(huì)亮或者滅
// 按照我們寫的程序苟弛,d1和d2是負(fù)極,d3和d4是正極
}
5.LED點(diǎn)陣編程實(shí)踐3
5.1阁将、宏定義的引入和uchar嗡午、u8
#include <reg51.h>
sbit SER = P3^4;
sbit RCLK = P3^5;
sbit SCLK = P3^6;
#define uchar unsigned char
// 函數(shù)聲明
void SendData(uchar d1, uchar d2, uchar d3, uchar d4)
void main(void)
{
// d1、d2對(duì)應(yīng)負(fù)極冀痕,d3、d4對(duì)應(yīng)正極
// d1狸演、d3對(duì)應(yīng)9-16言蛇,d2、d4對(duì)應(yīng)1-8
// d1-d4都是最低bit位表示編號(hào)小的數(shù)字宵距,比如d4的bit0對(duì)應(yīng)1
// d3和d4是正極腊尚,規(guī)律是1亮0滅;d1和d2是負(fù)極满哪,規(guī)律是1滅0亮
// SendData(0x00, 0x00, 0xff, 0xff); // 全亮
// SendData(0x00, 0x00, 0x00, 0xff); // 亮上半屏
// SendData(0x00, 0x00, 0xff, 0x00); // 亮下半屏
// SendData(0x00, 0x00, 0x00, 0x01); // 亮上半屏第一行
// SendData(0x00, 0x00, 0x80, 0x00); // 亮下半屏最后一行
// SendData(0xff, 0xfe, 0xff, 0xff); // 亮最左一列
// SendData(0x7f, 0xff, 0xff, 0xff); // 亮最右一列
// SendData(0x7f, 0xff, 0x00, 0x01); // 亮右上角一顆
// SendData(0x7f, 0xff, 0x80, 0x00); // 亮右下角一顆
// SendData(0x7f, 0xfe, 0x80, 0x01); // 亮角上四顆
}
void SendData(uchar d1, uchar d2, uchar d3, uchar d4)
{
unsigned char i = 0;
SCLK = 0;
RCLK = 0;
for (i =0; i<8; i++)
{
SER = d1 >> 7; // 將d1的最高bit取出來(lái)給SER
SCLK = 0婿斥;
SCLK = 1; // 電位一低一高哨鸭,2步制造一個(gè)SCLK的上升沿
d1 = d1 << 1; // 最高位丟掉民宿,第二高位排到最高位給第一條語(yǔ)句執(zhí)行取出
}
// 至此已經(jīng)在8個(gè)SLCK上升沿把d1的8位依次全部發(fā)出去了,
// 但是還沒(méi)有進(jìn)行鎖存像鸡,所以QA-QH有東西但是不能保證一直不變
for (i =0; i<8; i++)
{
SER = d2 >> 7; // 將d2的最高bit取出來(lái)給SER
SCLK = 0活鹰;
SCLK = 1; // 2步制造一個(gè)SCLK的上升沿
d2 = d2 << 1; // 最高位丟掉,第二高位排到最高位給第一條語(yǔ)句執(zhí)行取出
}
// 至此已經(jīng)把d1和d2發(fā)出去了志群,并且d1已經(jīng)被d2擠到第2個(gè)595芯片里面着绷,
// 但是還沒(méi)有進(jìn)行鎖存,所以QA-QH有東西但是不能保證一直不變
for (i =0; i<8; i++)
{
SER = d3 >> 7; // 將d3的最高bit取出來(lái)給SER
SCLK = 0锌云;
SCLK = 1荠医; // 2步制造一個(gè)SCLK的上升沿
d3 = d3 << 1; // 最高位丟掉,第二高位排到最高位給第一條語(yǔ)句執(zhí)行取出
}
// 至此已經(jīng)把d1和d2和d3發(fā)出去了桑涎,并且d1已經(jīng)被d2和d3擠到第3個(gè)595芯片里面彬向,
// 但是還沒(méi)有進(jìn)行鎖存,所以QA-QH有東西但是不能保證一直不變
for (i =0; i<8; i++)
{
SER = d4 >> 7; // 將d4的最高bit取出來(lái)給SER
SCLK = 0石洗;
SCLK = 1幢泼; // 2步制造一個(gè)SCLK的上升沿
d4 = d4 << 1; // 最高位丟掉,第二高位排到最高位給第一條語(yǔ)句執(zhí)行取出
}
// 至此已經(jīng)把d1和d2和d3和d4發(fā)出去了讲衫,
// 并且d1已經(jīng)被d2和d3和d4擠到第4個(gè)595芯片里面缕棵,
// 但是還沒(méi)有進(jìn)行鎖存,所以QA-QH有東西但是不能保證一直不變
/*
至此涉兽,4個(gè)字節(jié)的數(shù)據(jù)d1招驴、d2、d3枷畏、d4已經(jīng)順著74HC595的SER→QH'的串行輸出别厘,
串行輸出路線,已經(jīng)爬滿了4個(gè)74HC595(最先送出去的到了最后一個(gè)595中)
// 但是還沒(méi)有進(jìn)行鎖存拥诡,所以QA-QH有東西但是不能保證一直不變
然后要進(jìn)行一次鎖存触趴,4個(gè)595芯片同時(shí)在進(jìn)行鎖存,各自鎖存住了自己的數(shù)據(jù)渴肉。
*/
RCLK = 0; // 電尾一低一高就完成鎖存了
RCLK = 1;
// 這兩句之后595就完成了鎖存冗懦,d1-d4就會(huì)影響4個(gè)595芯片的并行輸出端,
// 進(jìn)而會(huì)影響點(diǎn)陣中LED的正負(fù)極的值仇祭,然后LED就會(huì)亮或者滅
// 按照我們寫的程序披蕉,d1和d2是負(fù)極,d3和d4是正極
}
6.字模介紹
6.1乌奇、何為字模
(1)如何記錄組成字的LED點(diǎn)陣亮滅信息(1616點(diǎn)陣一共有256點(diǎn)没讲,顯示一個(gè)特定的字需要其中有些亮而不亮,如何記錄哪些點(diǎn)亮哪些點(diǎn)不亮礁苗?用字模)
字模如何工作?
256個(gè)點(diǎn)用256個(gè)二進(jìn)制位表示爬凑,1表示這個(gè)點(diǎn)亮,0表示不亮寂屏。256個(gè)點(diǎn)就是256個(gè)二進(jìn)制位贰谣,也就是256/8=32個(gè)字節(jié)娜搂。所以一個(gè)大小為1616的字的字模是32個(gè)字節(jié)大小。所以字模的表現(xiàn)形式就是32個(gè)unsigned char型數(shù)據(jù)吱抚。
(2)字模如何獲劝儆睢?
一般都是用專門的字模提取軟件去提取的秘豹。這種軟件的作用就是給一個(gè)字就能自動(dòng)得到這個(gè)字對(duì)應(yīng)的32個(gè)字節(jié)的字模編碼携御。
(3)字模的結(jié)果不是唯一的,和你提取字模的方式有關(guān)的既绕。(橫向縱向啄刹、從上到下之類區(qū)分)提取字模時(shí)是沒(méi)有標(biāo)準(zhǔn)的,怎么做都是對(duì)的或者都是錯(cuò)的凄贩,關(guān)鍵是你提取字模的方式和你用來(lái)在點(diǎn)陣上顯示這個(gè)字模的函數(shù)必須對(duì)應(yīng)誓军。
6.2、字模提取軟件的使用
(1)使用方式:第一步先選擇字形(實(shí)際開(kāi)發(fā)板上點(diǎn)陣多大就選擇多大)疲扎,第二步再選擇合適的字體昵时、字號(hào)等,第三步選擇編碼方式和取模方向椒丧,第四步直接將得到的數(shù)組復(fù)制走壹甥。
6.3、字模的手工分析和驗(yàn)證
(1)手工對(duì)比字模內(nèi)容和屏幕顯示壶熏,從而確認(rèn)取模方式
7.橫向取模的顯示函數(shù)1
7.1句柠、工程建立
7.2、先顯示一行
7.3棒假、多顯示2行去探索規(guī)律
(1)規(guī)律1:d1和d2用字模來(lái)填充溯职,填充時(shí)要取反。因?yàn)樽帜\浖?為亮0為滅帽哑,d1和d2對(duì)應(yīng)負(fù)極缸榄,1為滅0為亮。
(2)規(guī)律2:d3和d4來(lái)選擇哪一行被點(diǎn)亮祝拯,而d1和d2選擇這行中哪一列被點(diǎn)亮。
(3)規(guī)律3:SendData依次送16個(gè)LED的亮滅信息(2字節(jié))她肯,所以必須調(diào)用256/16=16次SendData函數(shù)佳头,才能把整個(gè)點(diǎn)陣全部點(diǎn)亮完畢。
(4)規(guī)律4:每次調(diào)用SendData時(shí)晴氨,d1-d4變化都是有規(guī)律的康嘉,因此有希望通過(guò)循環(huán)來(lái)調(diào)用SendData而無(wú)需手工調(diào)用16次。
#include <reg51.h>
sbit SER = P3^4;
sbit RCLK = P3^5;
sbit SCLK = P3^6;
#define uchar unsigned char
// 函數(shù)聲明
void SendData(uchar d1, uchar d2, uchar d3, uchar d4)
unsigned char zhu[32] =
{
128, 0, 136, 0, 136, 0, 248, 31,
132, 0, 130, 0, 128, 0, 255, 127,
192, 1, 160, 2, 144, 4, 136, 8,
132, 16, 131, 96, 128, 0, 128, 0
};
void main(void)
{
SendData(~0, ~128, 0x00, 0x01); // 顯示第1行
SendData(~0, ~136, 0x00, 0x02); // 顯示第2行
SendData(~0, ~136, 0x00, 0x04); // 顯示第3行
SendData(~31, ~248, 0x00, 0x08); // 顯示第4行
SendData(~0, ~132, 0x00, 0x10); // 顯示第5行
SendData(~0, ~130, 0x00, 0x20); // 顯示第6行
SendData(~0, ~128, 0x00, 0x40); // 顯示第7行
SendData(~127, ~255, 0x00, 0x80); // 顯示第8行
}
void SendData(uchar d1, uchar d2, uchar d3, uchar d4)
{
unsigned char i = 0;
SCLK = 0;
RCLK = 0;
for (i =0; i<8; i++)
{
SER = d1 >> 7; // 將d1的最高bit取出來(lái)給SER
SCLK = 0籽前;
SCLK = 1亭珍; // 電位一低一高敷钾,2步制造一個(gè)SCLK的上升沿
d1 = d1 << 1; // 最高位丟掉,第二高位排到最高位給第一條語(yǔ)句執(zhí)行取出
}
// 至此已經(jīng)在8個(gè)SLCK上升沿把d1的8位依次全部發(fā)出去了肄梨,
// 但是還沒(méi)有進(jìn)行鎖存阻荒,所以QA-QH有東西但是不能保證一直不變
for (i =0; i<8; i++)
{
SER = d2 >> 7; // 將d2的最高bit取出來(lái)給SER
SCLK = 0;
SCLK = 1众羡; // 2步制造一個(gè)SCLK的上升沿
d2 = d2 << 1; // 最高位丟掉侨赡,第二高位排到最高位給第一條語(yǔ)句執(zhí)行取出
}
// 至此已經(jīng)把d1和d2發(fā)出去了,并且d1已經(jīng)被d2擠到第2個(gè)595芯片里面粱侣,
// 但是還沒(méi)有進(jìn)行鎖存羊壹,所以QA-QH有東西但是不能保證一直不變
for (i =0; i<8; i++)
{
SER = d3 >> 7; // 將d3的最高bit取出來(lái)給SER
SCLK = 0;
SCLK = 1齐婴; // 2步制造一個(gè)SCLK的上升沿
d3 = d3 << 1; // 最高位丟掉油猫,第二高位排到最高位給第一條語(yǔ)句執(zhí)行取出
}
// 至此已經(jīng)把d1和d2和d3發(fā)出去了,并且d1已經(jīng)被d2和d3擠到第3個(gè)595芯片里面柠偶,
// 但是還沒(méi)有進(jìn)行鎖存情妖,所以QA-QH有東西但是不能保證一直不變
for (i =0; i<8; i++)
{
SER = d4 >> 7; // 將d4的最高bit取出來(lái)給SER
SCLK = 0;
SCLK = 1嚣州; // 2步制造一個(gè)SCLK的上升沿
d4 = d4 << 1; // 最高位丟掉鲫售,第二高位排到最高位給第一條語(yǔ)句執(zhí)行取出
}
// 至此已經(jīng)把d1和d2和d3和d4發(fā)出去了,
// 并且d1已經(jīng)被d2和d3和d4擠到第4個(gè)595芯片里面该肴,
// 但是還沒(méi)有進(jìn)行鎖存情竹,所以QA-QH有東西但是不能保證一直不變
/*
至此,4個(gè)字節(jié)的數(shù)據(jù)d1匀哄、d2秦效、d3、d4已經(jīng)順著74HC595的SER→QH'的串行輸出涎嚼,
串行輸出路線阱州,已經(jīng)爬滿了4個(gè)74HC595(最先送出去的到了最后一個(gè)595中)
// 但是還沒(méi)有進(jìn)行鎖存,所以QA-QH有東西但是不能保證一直不變
然后要進(jìn)行一次鎖存法梯,4個(gè)595芯片同時(shí)在進(jìn)行鎖存苔货,各自鎖存住了自己的數(shù)據(jù)。
*/
RCLK = 0; // 電尾一低一高就完成鎖存了
RCLK = 1;
// 這兩句之后595就完成了鎖存立哑,d1-d4就會(huì)影響4個(gè)595芯片的并行輸出端夜惭,
// 進(jìn)而會(huì)影響點(diǎn)陣中LED的正負(fù)極的值,然后LED就會(huì)亮或者滅
// 按照我們寫的程序铛绰,d1和d2是負(fù)極诈茧,d3和d4是正極
}
8.橫向取模的顯示函數(shù)2
8.1、定義行選擇數(shù)組
8.2捂掰、使用for循環(huán)進(jìn)行顯示
8.3敢会、編寫點(diǎn)陣字顯示函數(shù)
#define uchar unsigned char
unsigned char zhu[32] =
{
128, 0, 136, 0, 136, 0, 248, 31,
132, 0, 130, 0, 128, 0, 255, 127,
192, 1, 160, 2, 144, 4, 136, 8,
132, 16, 131, 96, 128, 0, 128, 0
};
unsigned char hang[32] =
{
0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08,
0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,
0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00,
0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00
};
void main(void)
{
uchar i = 0;
for (i=0; i<16; i++)
{
SendData(~zhu[2*i+1], ~zhu[2*i], hang[2*i], hang[2*i+1]);
}
}
9.縱向取模的顯示函數(shù)
9.1曾沈、先觀察總結(jié)縱向取模的取模規(guī)律
9.2、顯示第1列
9.3鸥昏、多顯示幾列尋找規(guī)律
9.4狼电、編寫成函數(shù)然后實(shí)驗(yàn)測(cè)定
#define uchar unsigned char
unsigned char zhu[32] =
{
128, 160, 144, 142, 136, 136, 136, 255,
136, 136, 136, 136, 136, 128, 128, 0,
32, 32, 16, 8, 4, 2, 1, 255,
1, 2, 4, 8, 16, 32, 32, 0
};
unsigned char lie[32] =
{
0xff, 0xfe, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xf7,
0xff, 0xef, 0xff, 0xdf, 0xff, 0xbf, 0xff, 0x7f,
0xfe, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xf7, 0xff,
0xef, 0xff, 0xdf, 0xff, 0xbf, 0xff, 0x7f, 0xff,
};
void main(void)
{
uchar i = 0;
for (i=0; i<16; i++)
{
SendData(lie[2*i], lie[2*i+1], zhu[i+16], zhu[i]);
// SendData(0xff, 0xfe, 32, 128); // 最左邊一列
// SendData(0xff, 0xfd, 32, 160); // 左邊第2列
}
}