?? main.c
字號:
/*********************************************************
程序名稱:LED3216點陣交替變化顯示漢字
簡要說明:本程序只利用左半屏顯示
P0口接上行線,P2口接下行線,P3口接掃描線
P3.0接左屏譯碼器使能端(CS1)
P3.1接右屏譯碼器使能端(CS2)
編 寫:JiangX.net
*********************************************************/
#include<AT89X52.h>
#include<ziku.h>
#define uchar unsigned char //宏定義
#define hang1 P0 //上半屏行線
#define hang2 P2 //下半屏行線
#define lie P1 //掃描列線
#define CS1 P3_0 //接左屏154譯碼器使能端,低電平使能
#define CS2 P3_1 //接右屏154譯碼器使能端,低電平使能
#define num sizeof(hanzi)/16 //自動計算字數(shù)
uchar a=0,b=0; //全局變量用于漢字切換
/*****參數(shù)調(diào)整項*****/
#define speed 100 //變化速度調(diào)節(jié)
#define light 120 //顯示亮度調(diào)節(jié),數(shù)值不可過大,以不感到屏幕閃爍為準
/*****延時子程序*****/
void delay(void) //專門設(shè)置的延時程序用來改變掃描速度以方便調(diào)節(jié)亮度
{
uchar i;
for(i=0;i<light;i++);
}
/*****初始化子程序*****/
void init(void) //定時器初始化,設(shè)置定時器0工作方式1,定時時間5ms
{
TMOD=0x1;
TH0=0xec;
TL0=0x78;
}
/*****定時器中斷服務(wù)程序*****/
void time0(void)interrupt 1
{
TH0=0xec;
TL0=0x78;;
a++;
if (a==speed){a=0;b++;}
if(b>num/2-1) b=0; //所有漢字顯示完畢,回到第一個漢字
}
/*****顯示子程序*****/
void display(void)
{
uchar i; //關(guān)右屏
CS2=1; //開左屏
CS1=0;
for(i=0;i<16;i++)
{
lie=i; //列掃描信號輸出
hang1=hanzi[32*b+i];
hang2=hanzi[32*b+i+16]; //行信號輸出
delay();
hang1=0;
hang2=0;
}
}
/*****主程序*****/
void main(void)
{
init();
TR0=1;
ET0=1;
EA=1; //開中斷
while(1)
{
display();
}
}
/*****END*****/
/*****歡迎到作者博客交流:http://www.jiangx.net*****/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -