?? xspmain.c
字號:
/***************************************************************************/
/* 名稱: 車用LED顯示屏主程序 */
/* 時間: 2004.8.6 */
/* 版本: V2.0 */
/* 晶振頻率 18.432MHz */
/***************************************************************************/
//#pragma small
//#pragma SRC(A.A51) small
#include <reg52.h>
#include <string.h>
#include <intrins.h>
#include "xsp.h"
#include "UART.h"
#include "asc8-16.h"
//#include <ABSACC.H> //絕對地址訪問
/***************************************************************************/
/***************************************************************************/
/********************** 杭州尖峰********************************
顯示屏掃描工作過程:
初始輸出行掃描消隱信號(低電平)
1.輸出行移位數據(pLD變低)
2.讀取列數據寫入165(并行轉串行)
3.輸出列數據串行移位時鐘,有多少列輸出多少個時鐘
4.行掃描控制信號變低,即不允許行數據輸出到口線(消隱)
5.輸出行掃描移位信號,同時也控制列數據輸出到口線
6.行掃描控制信號變高,允許行數據輸出到口線,把這行數據顯示出來。
7.行移位數據為高。(pLD變高)
8.重復2-7步,直到16行掃描完成,即完成一屏數據的顯示
9.重復1-8步,完成。
/***************************************************************************/
//---------------------------------------------------------------------------
//\xC8\xFD\xCF\xEE\xB9\xFA\xB9\xFA 三項國
//code unsigned char StrHello2[]="歡迎光臨歡迎乘坐你是我的最好的朋友";
code unsigned char StrHello2[]="歡迎乘坐電車公司284路公共汽車 電車公司熱線:81814182 \
熱烈祝賀廣州市電車公司被評為“2003年度中國廣州最具誠信度企業” 熱烈祝賀廣州市電車公司獲得\
ISO9001質量管理體系、ISO14001環境管理體系、OHSAS18001職業健康安全體系三項國\
際標準認證 我公司管理方針是“優質服務、優先安全、優美環境、優化管理、建設綠色交通” ";
//code unsigned char StrHello[]=" ";
//code unsigned char StrKongGe[]=" ";
//code unsigned char StrHello[]="本系統由天目領航公司研制。12AZazok,.;'[]\`;']okwo我men們";
//code unsigned char StrHello[]="本系統由天目領航公司研制。";
code unsigned char StrHello[]=" 路車距離本站約 米 ";
code unsigned char StrKongGe[]=" ";
code unsigned char RecvOk[]="[OK]"; //串行口接收數據完成應答
code unsigned char DispEnd[]="[END]"; //顯示屏顯示完成應答
//code unsigned char aa[]="\x55\x0aaRD";
code unsigned char Asc_Table[][2] =
{
" ", //ASCII
" "," "," "," "," "," "," "," ", //1-8
" "," "," "," "," "," "," "," ", //9-16
" "," "," "," "," "," "," "," ", //17-24
" "," "," "," "," "," "," "," ", //25-32
"!","“","#","¥","%","—","'","(", //33-40
")","*","+",",","-","。","/","0", //41-48
"1","2","3","4","5","6","7","8", //49-56
"9",":",";","《","=","》","?","·", //57-64
"A","B","C","D","E","F","G","H", //65-72
"I","J","K","L","M","N","O","P", //73-80
"Q","R","S","T","U","V","W","X", //81-88
"Y","Z","[","\","]","︿","_","`", //89-96
"a","b","c","d","e","f","g","h", //97-104
"i","j","k","l","m","n","o","p", //105-112
"q","r","s","t","u","v","w","x", //113-120
"y","z","{","|","}","~"," "," " //121-128
};
xdata unsigned char StrHello1[USART_RECV_FIFO_SIZE];
xdata unsigned char StrHelloBuf[USART_RECV_FIFO_SIZE+60];
//xdata unsigned char pp[1000] _at_ 0x00;
//extern xdata unsigned char DispBuf[HANGSHU][LIEBYTE];// _at_ 0x00; //16*80點陣顯示屏 顯示緩沖區
//extern xdata unsigned char DispYingXiangBuf[HANGSHU][LIEBYTE]; //_at_ 1000; //16*80點陣顯示屏 映像顯示緩沖區
xdata unsigned char DispBuf[HANGSHU][LIEBYTE] _at_ 0x00; //16*80點陣顯示屏 顯示緩沖區
xdata unsigned char DispYingXiangBuf[HANGSHU][LIEBYTE]; //_at_ 1000; //16*80點陣顯示屏 映像顯示緩沖區
//data unsigned char *p;
data unsigned char DptrBakHi=0;
data unsigned char DptrBakLo=0;
xdata unsigned char DispShuBuf[(USART_RECV_FIFO_SIZE+60)/(LIEBYTE/2)+1][HANGSHU][LIEBYTE]; // _at_ 320; //顯示數據存放區
data unsigned char Timer1Count;
data unsigned int UartTimerCount;
data unsigned char ShowTimeCount=0;
//extern data unsigned char LeftShiftDelayCount;
data unsigned int LeftShiftDelayCount;
data unsigned char PingShu;
data unsigned char DisplayHangShu=0;
xdata unsigned char UsartRecvFifo[USART_RECV_FIFO_SIZE]; //串口接收緩沖區
xdata unsigned char UsartRecvBzFifo[USART_RECV_FIFO_SIZE];
//extern data unsigned char UartEnd;
data unsigned int UsartRecv_rp = 0;
bit UartStart=0;
bit UartEnd=0;
bit HelloOk=0;
bit ResetBit=0;
bit BaoZhaBit=0;
bit LoopBaoZhaBit=0;
bit GuanMenBit=0;
bit LoopXianShiBit=0;
data unsigned char UartStep=0;
data unsigned char UartCommand[5]="";
//bit UartEnd=0;
bit Uartok=0;
bit Uartok1=0;
bit Uartok2=0;
bit Uartok3=0;
data unsigned char P3Bak;
/***************************************************************************/
//函數定義
void InitAsp();
//extern void WDT_RESET();
void WDT_RESET();
void TingZhi();
//void Dshu();
//void Fontshu();
void MapDrawString(unsigned char *);
void DataCopy(unsigned char );
//void MemDataCopy(unsigned char *,unsigned char *);
//extern void MapDrawLeftShift();
void MapDrawLeftShift();
void MapDrawZhiJie(unsigned char);
void uart_init();
void ClrPing(unsigned char *);
void InitX5045();
void IicWaitSclHigh();
void IicSendByte(unsigned char);
unsigned char IicReadByte();
bit IicReadData(unsigned char *str);
void IicWriteData(unsigned char *str);
unsigned char IicStatusData();
void UartSend(unsigned char * );
extern void DispScan();
void main()
{
unsigned char MainState;
unsigned char Step=1;
//data unsigned char temp;
//WrReset:
InitAsp();
UART_init();
//IicWriteData(StrHello2);
/*
if (IicReadData(StrHello1)){
strcpy(StrHelloBuf,StrHello);
strcat(StrHelloBuf,StrHello1);
strcat(StrHelloBuf,StrKongGe);
// MapDrawString(StrHelloBuf);
}
else{
strcpy(StrHelloBuf,StrHello);
strcat(StrHelloBuf,StrKongGe);
}*/
MapDrawString(StrHello);
MapDrawZhiJie(0);
// while (1) WDT_RESET();
// ShowTimeCount=50;
while (1){
if (GPRSRecvResponse()){
UARTSend(RecvOk,4);
MainState = GPRSSaveBuff[2];
switch (MainState) {
case 1:
MapDrawString(GPRSSaveBuff+0x05);
// MapDrawString(GPRSSaveBuff+0x04,ShowBuff);
memcpy(&DispShuBuf[1][0][0],DispShuBuf,HANGSHU*LIEBYTE);
if (!Uartok1) Uartok1=1;
UARTSend(DispEnd,5);
break;
case 6:
MapDrawString(GPRSSaveBuff+0x05);
memcpy(&DispShuBuf[2][0][0],DispShuBuf,HANGSHU*LIEBYTE);
// MapDrawString(GPRSSaveBuff+0x04,ShowBuff);
// memcpy(&DispShuBuf[1][0][0],ShowBuff,HANGSHU*LIEBYTE);
if (!Uartok2) Uartok2=1;
UARTSend(DispEnd,5);
break;
case 11:
MapDrawString(GPRSSaveBuff+0x05);
memcpy(&DispShuBuf[3][0][0],DispShuBuf,HANGSHU*LIEBYTE);
// MapDrawString(GPRSSaveBuff+0x04,ShowBuff);
// memcpy(&DispShuBuf[2][0][0],ShowBuff,HANGSHU*LIEBYTE);
if (!Uartok3) Uartok3=1;
UARTSend(DispEnd,5);
break;
}
}
if (Uartok1||Uartok2||Uartok3){
if (!ShowTimeCount){
if (Uartok1 && Step==1) MapDrawZhiJie(1);
if (Uartok2 && Step==2) MapDrawZhiJie(2);
if (Uartok3 && Step==3) MapDrawZhiJie(3);
if (++Step>=4) Step=1;
if ((Uartok1&&Uartok2)||(Uartok2&&Uartok3)||(Uartok1&&Uartok3)) ShowTimeCount=GPRSSaveBuff[4];
}
}
WDT_RESET();
} // Main loop
}
/*----------------------------------------------*/
/*----------------------------------------------*/
/*----------定時掃描----------------------------*/
void Timer0Int() interrupt 1 using 1{
static bit pCEtemp;
// static data unsigned char DisplayHangShu=0;
#ifdef ChangJia_ShangHaiKaiLun
static data unsigned char DisplayHangSao=0xc3;
#endif
data unsigned char i;
data unsigned char ii;
pCEtemp=pCE; //片選保護
pCE=0;
TH0=-MSCOUNT>>8; // 1ms
TL0=-MSCOUNT;
if (Timer1Count++>=100){
Timer1Count=0;
if (ShowTimeCount) ShowTimeCount--;
}
if (LeftShiftDelayCount) LeftShiftDelayCount--;
/*
// if (Timer1Count++>=10){
// Timer1Count=0;
LeftShiftDelayCount--;
// }
if(UartStart){
UartTimerCount--;
if(UartTimerCount==0) {
UartStep=0;
UartStart=0;
}
}*/
DPH=DptrBakHi;
DPL=DptrBakLo;
pRCLK=0;
// if (DisplayHangShu<HANGSHU){
for (i=0;i<LIEBYTE;i++){
// DispYingXiangBuf[DisplayHangShu][i]=DispYingXiangBuf[DisplayHangShu][i];
// temp=*(p++);
/*
#pragma asm
MOVX A,@DPTR
INC DPTR
#pragma endasm
*/
DispScan();
for (ii=8;ii>0;ii--){
pCLK=0;
pCLK=1;
}
}
pOE=1;
for (ii=8;ii>0;ii--);
pRCLK=1;
// for (ii=8;ii>0;ii--);
pOE=0;
/* pOE=0; //4094改為595時需要此信號
pOE=1;*/
DptrBakHi=DPH;
DptrBakLo=DPL;
//上海凱倫
#ifdef ChangJia_ShangHaiKaiLun
P3=DisplayHangSao;
#endif
//杭州尖峰
#ifdef ChangJia_HangZhouJianFeng
pLD=1;
#endif
DisplayHangShu++;
#ifdef ChangJia_ShangHaiKaiLun
DisplayHangSao+=0x04;
#endif
if (DisplayHangShu>=HANGSHU){
DisplayHangShu =0;
#ifdef ChangJia_ShangHaiKaiLun
DisplayHangSao=0xc3;
#endif
DptrBakHi=0;
DptrBakLo=0;
//杭州尖峰
#ifdef ChangJia_HangZhouJianFeng
pLD=0;
#endif
}
pCE=pCEtemp; //片選
}
/*----------------------------------------------*/
/* Title : Initialize */
/* Action : 初始化 */
/*----------------------------------------------*/
void InitAsp(){
#ifdef ChangJia_HangZhouJianFeng
data unsigned char i;
#endif
TMOD=0x21; //定時器1工作在方式2(自動重裝載)
TH0=-MSCOUNT>>8; // 1ms
TL0=-MSCOUNT;
// IE=0x00; // EA=1,允許定時器0
IE=0x82; // EA=1,允許定時器0
P1=0xFF;
pCE=0;
//杭州尖峰
#ifdef ChangJia_HangZhouJianFeng
pLD=1;
for (i=0;i<16;i++){
pRCLK=0;
pRCLK=1;
}
pLD=0;
#endif
//上海凱倫
#ifdef ChangJia_ShangHaiKaiLun
P3=0xc3;
#endif
// p=&DispBuf[0][0];
ClrPing(&DispBuf[0]);
TR0=1; // Start count
// pOE=0;
}
/*************************************************/
/*
void MapDrawLeftShift(){
data unsigned char i;
data unsigned char j;
data signed char k;
data signed char h;
data unsigned char temp;
data unsigned char temp1;
for (i=0;i<LIEBYTE;i++){
for (h=7;h>=0;h--){
for (j=0;j<HANGSHU;j++){
temp=DispYingXiangBuf[j][i]>>h;
for (k=LIEBYTE-1;k>=0;k--){
temp1=DispBuf[j][k];
DispBuf[j][k]=(temp1<<1)|temp;
temp=temp1>>7;
}
}
if (UartEnd) return;
WDT_RESET();
LeftShiftDelayCount=1;
while(LeftShiftDelayCount);
}
}
}*/
void MapDrawZhiJie(unsigned char temp){
memcpy(DispBuf,&DispShuBuf[temp][0][0],HANGSHU*LIEBYTE);
}
/*
void MapDrawZhiJie(){
memcpy(DispBuf,DispYingXiangBuf,HANGSHU*LIEBYTE);
LeftShiftDelayCount=255;
while(LeftShiftDelayCount) WDT_RESET();
}*/
/**************************************************************************/
/*
void DataCopy(unsigned char temp){
memcpy(DispYingXiangBuf,& DispShuBuf[temp][0][0],HANGSHU*LIEBYTE);
}*/
/*
void MemDataCopy(unsigned char *c,unsigned char *d){
data unsigned int i;
for (i=0;i<HANGSHU*LIEBYTE;i++) {
c[i]=d[i];
if (c[i]!=d[i]) break;
}
}*/
/*********************************************************/
void MapDrawString(unsigned char *str)
{
data unsigned char *pFont;
idata unsigned char Font[32];
data unsigned int FontIndex=0;
data unsigned int FontIndexok=0;
idata unsigned long FontCount;
// data unsigned int FontCountL;
// data unsigned char FontCountH;
data unsigned char i;
data unsigned int temp;
data unsigned int LieShu=0;
data unsigned char j;
data unsigned char c, d;
// for (k = 0; k <LIEBYTE; k=k+2) {
// while ((c = str[FontIndex]) != '\0'){
while (FontIndex < LIEBYTE){
c = str[FontIndex];
if (c<0x80){
temp=c*16;
for (i = 0; i < 16; i++) {
Font[i]= Asczk[temp+i];
}
for (j = 0; j < HANGSHU; j++) {
DispShuBuf[0][j][FontIndex]= Font[j];
}
FontIndex ++;
/*
d = Asc_Table[c][1];
c= Asc_Table[c][0];
FontIndex ++;*/
}
else{
d = str[FontIndex + 1];
// WDT_RESET();
FontCount = 32*((unsigned long)(c - 160 - 1) * 94 + (d -160 - 1));
// FontCountH=P1;
P1=(P1&0x8f)|((FontCount>>12)&0x70); //送頁面地址
// P1=(FontCountH&0x9f)|((FontCount>>16)<<5); //送頁面地址
pFont = (unsigned char *)((unsigned long)FontCount&0x0ffff|0x10000);
// memcpy(Font,pFont,32);
pCE=1; //片選 選中020字庫儲存器
for (i = 0; i < 32; i++) {
if ( ( (&pFont[i]) ==0 )&& (i!=0)) P1=P1+0x10;
Font[i]= pFont[i];
}
pCE=0;
// PingShu = FontIndexok/LIEBYTE;
for (j = 0; j < HANGSHU; j++) {
// temp=LieShu%LIEBYTE;
DispShuBuf[0][j][FontIndex]= Font[ 2 * j];
DispShuBuf[0][j][FontIndex+1]=Font[2 * j + 1];
}
FontIndex += 2;
// FontIndexok += 2;
// LieShu +=2;
}
}
/*
while( (temp=LieShu%LIEBYTE) >0){
for (j = 0; j < HANGSHU; j++) {
DispShuBuf[PingShu][j][temp]= 0;
DispShuBuf[PingShu][j][temp+1]=0;
}
LieShu += 2;
} */
}
/**************************************************************/
void ClrPing(unsigned char *p){
data unsigned int i;
for (i = 0; i < HANGSHU*LIEBYTE; i++) p[i]=0x0;
}
/***************************************************************/
void WDT_RESET(){
p5045CS=0;
p5045CS=1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -