?? tempexecuted.c.c
字號:
/* @brief This file is an example to use spi in master mode. */
#include <stdio.h>
#include <string.h>
#include <reg8253.h>
sfr ldata=0x80; /* port0 for lcd data*/
sbit busy=P0^7; /*busy flag for lcd p0.7 */
sbit rs=P2^0; /*register select of lcd p2.0 */
sbit rw=P2^1; /*read or write select for lcd*/
sbit en=P2^2; /* enable lcd */
sbit RESET=P1^0; /*SOFTWARE RESET FOR CS5463*/
sbit led1=P2^3; /* indication start of programme execution*/
sbit led2=P2^4;
sbit led3=P2^5;
sbit led4=P2^6;
sbit led5=P2^7;
unsigned char code CS5463[9]={0x64,0x00,0x00,0x60,0x74,0x00,0x00,0x04,0xe8};
unsigned char code CS5463DATA[4]={0x26,0xFF,0xFF,0xFF};
unsigned char BUF1[12],ascii[1][12];
void lcddisplay()
{
unsigned char stringcmd[6]={0x38,0x0E,0x01,0x06,0x0C,0x80};
int len1 = strlen(stringcmd),countcmd,count;
unsigned char string[]="B.M.S.C.E ELECTRICAL DEPARTMENT ";
unsigned int len=strlen(string);
unsigned char lccmd;
unsigned char lcdata;
unsigned char second_line;
void lcddata(unsigned char);
void lcdcmd(unsigned char);
void delay(void);
void lcdready(void);
void msdelay(unsigned int);
for (countcmd = 0; countcmd < len1; countcmd++)
{
lccmd=stringcmd[countcmd];
lcdcmd(lccmd);
}
for (count =0;count<len;count++)
{
lcdata=string[count];
lcddata(lcdata);
}
second_line=0xc0;
lcdcmd(second_line);
}
/*---------------------------------------------*/
void lcdcmd(unsigned char value)
{
lcdready(); /*is LCD ready?*/
ldata=value; /*issue command code*/
rs=0; /*RS=0 for command*/
rw=0; /*R/W=0 to write to LCD*/
en=1; /*E=1 for H-to-L pulse*/
msdelay(1);
en=0;
} /*---------------------------------------------*/
void lcddata(unsigned char value)
{
lcdready(); /*is LCD ready?*/
ldata=value; /*issue data */
rs=1; /*RS=1 for data*/
rw=0; /*R/W=0 to write to LCD*/
en=1; /*E=1 for H-to-L pulse*/
msdelay(1);
en=0;
}
/*---------------------------------------------*/
void lcdready()
{
busy=1; /*make P0.7 input port*/
rs=0; /*RS=0 access command reg*/
rw=1; /*R/W=1 read command reg*/
while(busy==1) /*stay until busy flag=0*/
{
en=0; /*E=1 for H-to-L pulse*/
msdelay(1);
en=1; /*E=0 H-to-L pulse*/
// busy=0; //forcing to zero for testing
}
}
/*-----------------------------------------------*/
void msdelay(unsigned int itime)
{
unsigned int i,j;
for(i=0;i<itime;i++)
for(j=0;j<1275;j++);
}
/*----------Initialize the serial port------------*/
serialportint()
{
TMOD=0x20 ; /*T1 is mode2 */
TH1=0xfd ; /*9600 baud */
SCON=0x50 ; /*8b, 1stop, 1start, REN enabled */
}
serialport(unsigned char RS232)
{ TR1=1;
TI=0; /*ready to transmit */
SBUF=RS232;
while(TI==0); /*poll TI until all the bits are transmitted */
TR1=0;
}
masterio(unsigned char SENDDATA)
{ unsigned char RECEDATA;
SPDR = SENDDATA;
while ((SPSR & 0x80) == 0);
RECEDATA=SPDR;
return(RECEDATA);
//SPCR=0x23; /*00010011 disable spi*/
}
/*------------Initialize the spi port------------*/
CS5463int()
{
int i;
unsigned dat;
P1_4=1;
MOSI=1;
MISO=1;
SCK=1;
SPCR = 0x53; /* 01010011 enable spi*/
for (i=0;i< sizeof(CS5463);i++)
{
dat=CS5463[i];
masterio(dat);
}
}
/*----------ascii conversion---------------------*/
asciiconv(unsigned char FIRST,unsigned char HH,unsigned char MM,unsigned char LL)
{
int k=0,units,tens,huns,i,mask=0x80,j,jj,a[8];
long int v1=50000000,val1=0;
FIRST=0x00;
LL=0x00;
units=HH%0x0a;
tens=(HH/0x0a)%0x0a;
huns=HH/0x64;
ascii[k][0]=huns+48;
ascii[k][1]=tens+48;
ascii[k][2]=units+48;
ascii[k][3]='.';
for(i=0;i<8;i++)
{
if(MM&mask)
val1=val1+v1;
v1=v1/2;
mask=mask>>1;
} /*ascii conversion of fractional part of number*/
for(j=0;j<8;j++)
{
a[j]=(val1%0x0a)+48;
val1=val1/0x0a;
}
j=7;
for(jj=4;jj<12;jj++)
{
ascii[k][jj]=a[j];
j--;
}
ascii[k][12]='\n';
}
/*-------main----------*/
void main(void)
{
int I,J=0,jj,mm;
unsigned char BUFFER[4];
led1=1;
led2=0;
led3=1;
led4=0;
led5=1;
CS5463int();
led1=1 ; /* indication end of programme execution*/
led2=1 ;
led3=1 ;
led4=1 ;
led5=1 ;
RESET=0;
while(1){
for(I=0;I<4;I++)
BUFFER[I]=masterio(CS5463DATA[I]);
for(J=0;J<sizeof(BUFFER);J=J+4)
asciiconv(BUFFER[J],BUFFER[J+1],BUFFER[J+2],BUFFER[J+3]); /*conversion from hex to ascii */
serialportint();
for (mm = 0; mm <1; mm++)
{
for (jj=0;jj<12;++jj)
serialport(ascii[mm][jj]);
}
lcddisplay();
for (mm = 0; mm <1; mm++)
{
for (jj=0;jj<12;++jj)
lcddata(ascii[mm][jj]);
}
if(RESET==1)
{masterio(0x80);
while(1)
{
// RESET=0; //FORCING RESET TO ZERO testing
if(RESET==0)
break;}
msdelay(2);
CS5463int();
}
}
// while(1)
// { shift_data=0x18;
// lcdcmd(shift_data);
// delay();
// }
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -