|
這個(gè)是主程序 上面是顯示部分#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; //在函數(shù)內(nèi)部定義時(shí),該變量會(huì)一直保持函數(shù)執(zhí)行后的值
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 --); //執(zhí)行此句約需24us,24x + 14 = delay(x,0)的延時(shí)時(shí)間
}
void read_data()
{
clearScreen(0);
while(i < 8)
{
if(f1 >= ii)
break;
while(k ++ < 8) //先比較,再++,例如k = 0,小于8,成立,然后k就變成1并在下程序中進(jìn)行運(yùn)算
{
display_char(1,i * 2, j * 8,receive[k + i * 16 - 1],table); //當(dāng)k在while中是7時(shí),到這里運(yùn)算已經(jīng)是8了
j ++;
f1 ++;
if(f1 >= ii)
break;
}
if(f1 >= ii)
break;
while(k ++ < 17) //每比較一次,無論以下運(yùn)算進(jìn)行與否,k都會(huì)加一
{
display_char(2,i * 2,j * 8,receive[k + i * 16 - 2],table); //當(dāng)k = 8時(shí),返回第一個(gè)while比較時(shí)變成了9,到第二個(gè)就變成了10
j ++;
f1 ++;
if(f1 >= ii)
break;
}
i ++;
k = 0;
}
ii = 0;
f1 = 0;
i = 0;
j = 0; //在本函數(shù)定義時(shí),函數(shù)執(zhí)行后也要清0,同上同下
k = 0;
}
void main()
{
TMOD = 0x20; //設(shè)置定時(shí)器1為工作方式2,低8位計(jì)數(shù)溢出后將高8位的值賦值給低8位,繼續(xù)進(jìn)行定時(shí)計(jì)數(shù)
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;
} |
|