/********************************************************************
串行 12864 显示.c
***********************************************************************/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit CS=P2^7;
sbit SID=P2^6;
sbit SCLK=P2^5;
//片选信号
//数据信号
//时钟信号
//sbit RST=P2^4;
//sbit CH=P2^3;
RST 及 WR 为低电平
CH 及 PSB
低电平使用串行显示
STR=P2^3;
sbit
sbit
EOC=P2^4;
sbit OE=P0^4;
sbit A7=P0^5;
sbit B7=P0^6;
sbit C7=P0^7;
uint adc0808_init();
uint adc0809_init();
uint adc0810_init();
void init_timer();
int i,s,dat_1,dat_2,dat_3,t,n;
/********************************************************************
* 名称 : delay()
* 功能 : 延时,延时时间为 100us * t。这是通过软件延时,有一定误差。
* 输入 : t
* 输出 : 无
***********************************************************************/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0; ivoid sendbyte(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
SID = 1;
}
else
{
SID = 0;
}
SCLK = 0;
SCLK = 1;
}
}
/********************************************************************
* 名称 : write_com()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_com(unsigned char cmdcode)
{
CS = 1;
sendbyte(0xf8);
sendbyte(cmdcode & 0xf0);
sendbyte(cmdcode << 4);
delay(2);
}
/********************************************************************
* 名称 : write_data()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_data(unsigned char Dispdata)
{
CS = 1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte(Dispdata << 4);
delay(2);
}
/********************************************************************
* 名称 : lcdinit()
* 功能 : 初始化函数
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void lcdinit()
{
delay(100);
delay(20000);
write_com(0x30);
delay(50);
write_com(0x0c);
delay(50);
}
/********************************************************************
* 名称 : hzkdis()
* 功能 : 显示字符串
* 输入 : *s
* 输出 : 无
***********************************************************************/
void hzkdis(unsigned char code *s)
{
while(*s > 0)
{
write_data(*s);
s++;
delay(50);
}
}
/********************************************************************
* 名称 : Test()
* 功能 : 显示子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Test()
{
");
BMW
write_com(0x03);
delay(50);
write_com(0x80);
hzkdis("
write_com(0x90);
hzkdis("1.");
write_com(0x88);
hzkdis("2.");
write_com(0x98);
hzkdis("3.");
/*s++;
if(s==10)
{
s=0;
}
write_com(0x89);
write_data(s+0x30);*/
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{
init_timer();
delay(1);
lcdinit();
delay(10);
i=0;
s=1;
while(1)
{
adc0808_init();
delay(50);
dat_1=dat_1*1.0/255*500;
write_com(0x91);
write_data(dat_1/100+0x30);
hzkdis(".");
write_com(0x92);
write_data(dat_1/10%10+0x30);
write_data(dat_1/100%10+0x30);
adc0809_init();
dat_2=dat_2*1.0/255*500;
write_com(0x89);
write_data(dat_2/100+0x30);
hzkdis(".");
write_com(0x8A);
write_data(dat_2/10%10+0x30);
write_data(dat_2/100%10+0x30);
adc0810_init();
dat_3=dat_3*1.0/255*500;
write_com(0x99);
write_data(dat_3/100+0x30);
hzkdis(".");
write_com(0x9A);
write_data(dat_3/10%10+0x30);
write_data(dat_3/100%10+0x30);
Test();
delay(500);
}
}
uint adc0808_init()
{
A7=1;
B7=1;
C7=1;
STR=0;
STR=1;
STR=0;
OE=1;
while(EOC==0);
OE=0;
dat_1=P1;
return dat_1;
}
uint adc0809_init()
{
A7=0;
B7=1;
C7=1;
STR=0;
//ADC0809 采样
//ADC0809 采样
//ADC0809 采样
STR=1;
STR=0;
OE=1;
while(EOC==0);
OE=0;
dat_2=P1;
return dat_2;
}
uint adc0810_init()
{
A7=1;
B7=0;
C7=1;
STR=0;
STR=1;
STR=0;
OE=1;
while(EOC==0);
OE=0;
dat_3=P1;
return dat_3;
}
void init_timer()
{
EA=1;
ET0=1;
ET1=1;
TMOD=0x11;
TH0=0xfc;
TL0=0x18;
TR0=1;
}
void t0() interrupt 1 using 0 //更改这里可以完成 8 路采样
{
TH0=0x15;
TL0=0x9f;
t++;
if(t==7)
{
adc0808_init();
}
//每 10ms 启动 A/D
if(t==14)
{
adc0809_init();
}
//每 10ms 启动 A/D
if(t==20)
{
adc0810_init();
t=0;
}
}