- 註冊時間
- 2006-1-29
- 最後登錄
- 2022-8-18
- 主題
- 查看
- 積分
- 72
- 閱讀權限
- 30
- 文章
- 35
- 相冊
- 0
- 日誌
- 0
 
狀態︰
離線
|
#include "reg51.h"
#define COLS 16/*每個字16行*/
#define ROWS 2/*每行2個位元組*/
#define NUMS 7/*7個中文字數*/
void delay(unsigned int);/*移位速度控制延遲函數*/
char ScanLine=0;/* 行掃描信號*/
char i=0;/*行資料指標*/
char j;/* 列資料指標*/
char k=COLS;/*下一個中文字的第0行位置*/
sbit ctrls=0x96;/*74154智能*/
sbit P1_4=0x94; /*8051接腳定義*/
sbit P1_5=0x95; /*8051接腳定義*/
unsigned char *ptr1[COLS];
unsigned char *ptrn[COLS];
unsigned char code pattern[COLS*NUMS][ROWS]=
{
0xff~略~0xff
};
main()
{
void ShiftLeft(void); /*左移函數原型宣告*/
char i;
IE=0x82; /*致能計時器0中斷*/
TMOD=0x01; /*設定計時器0工作於模式1*/
TH0=(65536-1000)/256; /*計時器0初值 */
TL0=(65536-1000)%256;
P1_4=0; /*除能第一個74373*/
P1_5=0; /*除能第二個74373*/
TR0=1; /*啟動計時器0*/
for(i=0;i<COLS;i++)/*ptr1指標指向第1個字元*/
*(ptr1+i)=*(pattern+i);
while(1)
{
for(i=0;i<COLS;i++)/*ptr1指標指向下1個字元*/
*(ptrn+i)=*(pattern+i+k);
for(i=0;i<COLS;i++)/*左移位16次*/
{
delay(20000);/*延遲*/
ShiftLeft();/*左移位1行*/
}
k=k+COLS; /*K指向下一個字元起始行號*/
if(k==(COLS)*7)/*以顯示完7個字?*/
k=0;
}
}
void ShiftLeft(void)
{
char i;
char *temp;
TR0=0;
temp=*ptrn;
for(i=0;i<COLS-1;i++)/*左移1行*/
{
*(ptr1+i)=*(ptr1+i+1);
*(ptrn+i)=*(ptrn+i+1);
}
*(ptr1+COLS-1)=temp;
TR0=1;
}
void T0_int(void) interrupt 1 /*計時器0中斷*/
{
TH0=(65536-1000)/256;/*重設計十時初值*/
TL0=(65536-1000)%256;
ctrls=1; /*開啟74154 G2智能*/
j=0;/*第0列*/
P2=*(*(ptr1+i)+j); /*輸出第一位元組字型資料*/
P1_4=1; /*閂鎖*/
P1_4=0;
j++;
P2=*(*(ptr1+i)+j); /*輸出第2位元組字型資料*/
P1_5=1; /*閂鎖*/
P1_5=0;
P1=ScanLine; /*輸出行掃描信號*/
ctrls=0; /*關閉74154 G2智能*/
ScanLine++; /*掃描下一行*/
i++;/*指向下一行字型資料*/
if(ScanLine==16) /*已掃描完16行*/
{
ScanLine=0; /*重設掃描信號*/
i=0; /*重設行資料指標*/
}
}
void delay(unsigned int count) /*延遲函數*/
{
int i;
for(i=0;i<count;i++)
;
}
|
|