}
/**********************************************
*函数:
SetLine(uchline)*
*描述:
设定页地址----X:
0--7*
**********************************************/
voidSetLine(uchline)
{
line=line&0x07;//0<=line<=7
line=line|0xb0;
w_com(line);
}
/**********************************************
*函数:
SetColumn(uchcolumn)*
*描述:
设定列地址----Y:
0--127*
**********************************************/
voidSetCol(uchcolumn)
{
uchcolumn_h,column_l;
column=column&0x7f;//0<=column<=127
column_h=column&0x0f0;//列地址高四位
column_h=column>>4;
column_l=column&0x0f;//列地址低四位
column_h=column_h|0x10;
column_l=column_l|0x00;
w_com(column_h);
w_com(column_l);
}
voidLCD_Init()
{
rst=0;
Delay1(10);
rst=1;
w_com(0xaf);//开显示w_com(0xaf);//ONDISPLAY
w_com(0x40);//STARDISPLAY
//w_com(0xa0);//ADCNORMAL,反向安装时0xA1,
w_com(0xa1);
w_com(0xa6);//
w_com(0xa4);//CLEAR
w_com(0xa2);//1/9BIAS
//w_com(0xc8);//COMMONOUTPUTDIRECTION,反向安装时0xC0
w_com(0xC0);
w_com(0x2f);//POWERCONTROL
w_com(0x24);//RESISTERRATIO
w_com(0x81);//VOLUMMODESET
w_com(0x24);//RESISTERRATIO
}
/*****************************************************
*函数:
Show16X16(uchline,uchcomlon,constuch*pt)*
*描述:
显示一个16X16的汉字*
*line:
显示的页(0--7)*
*column:
显示的列(0--127)*
**pt:
显示字的首地址*
*****************************************************/
voidShowHZ(uchline,uchcolumn,uch*pt)//reentrant
{
uchi;
SetCol(column);//设置起始列
SetLine(line);//设置行
for(i=0;i<16;i++)
{
wdata(*pt);//写数据
pt++;//
}
SetLine(line+1);//设置汉字下半部分显示页
SetCol(column);
for(i=0;i<16;i++)
{
wdata(*pt);
pt++;
column++;
}
}
voidShowHZs(uchline,uchcol,uch*pHz)//reentrant
{
uchi,chH,chL;
chH=*pHz++;
chL=*(pHz);
for(i=0;i<255;i++)
{
if(chH==GB_16[i].Index[0]&&chL==GB_16[i].Index[1])
{
ShowHZ(line,col,GB_16[i].Msk);
break;
}
}
}
//直接输出一个汉字串,将汉字串用双引号括起来即可
voidShowHZss(uchline,uchcol,uch*pHz)//reentrant
{
while(*pHz)
{
/*chH=*pHz++;
chL=*(pHz);
for(i=0;i<255;i++)
{
if(chH==GB_16[i].Index[0]&&chL==GB_16[i].Index[1])
{
ShowHZ(line,col,GB_16[i].Msk);
col+=16;
if(col>=128){line+=2;col=0;}
break;
}
}*/
ShowHZs(line,col,pHz);
col+=16;
if(col>=128){line+=2;col=0;}
pHz+=2;
}
}
voidShowChar(uchline,uchcolumn,constuch*pt)//reentrant
{
chari;
SetCol(column);//设置起始列
SetLine(line);//设置行
for(i=0;i<8;i++)
{
wdata(*pt);//写数据
pt++;//
}
SetCol(column);
SetLine(line+1);
for(i=0;i<8;i++)
{
wdata(*pt);//写数据
pt++;//
}
}
voidPutChar(uchx,uchy,uchuChar)//reentrant
{
unsignedchar*p;
if(uChar<128)
{
p=(uChar-0x20)*16+&Ascii[0];
ShowChar(x,y,p);
}
}
//直接输出一个字符串,直接将字符串用双引号括起来即可
voidShowString(uchx,uchy,uch*p)//reentrant
{
while(*p)
{
PutChar(x,y,*p);
p+=1;
y+=8;
if(y>=128)
{
y=0;x+=2;
}
}
}
//SHowNull函数:
显示空字符以便抹去无效的已显示字符
voidShowNull(uchline,uchcol,uchlen)//reentrant
{
while(len)
{
//ShowChar(line,col,Nul);
PutChar(line,col,'');
col+=8;
if(col>=128){col=0;line+=2;}
len--;
}
}
实验二智能仪器的通信接口设计实验
(一)
E05205502
一、实验目的:
(1)掌握AD转换器、时钟芯片、数字温度传感器、AT24C16等常见单片机外围元件的使用与编程方法。
(2)了解与掌握SPI、IIC通信的特点。
二、实验内容:
对AD转换器ADC0832、时钟芯片DS1302、数字温度传感器DS18B20、存储器AT24C16等进行编程与设置,并利用protues软件仿真程序运行;
三、接线图
四、实验步骤
1、在KeilC中编写DS1302、ADC0832、DS18B20、AT24C16的驱动程序;生成Hex文件;
2、在Protues中增加上述元器件,并按电路图中所示方式连接线路;
3、综合调试运行上述工程,理解并掌握上述元器的使用方法。
五、实验程序:
//下面是ADC0832部分
sbitAD_CS=P2^0;
sbitAD_DI=P2^1;
sbitAD_DO=P2^2;
sbitCLK=P2^3;
uintReadAD(bitb)
{
uchartem=0x00;//AD转换值
uchari=0x00;//
//uintuInt;
intInt;
//初始化AD转换
AD_DI=1;
AD_CS=0;
CLK=1;
ss();
CLK=0;
ss();
AD_DI=1;