}
/*-----------------------------------------*/
/*------------写数据到LCD12864-------------*/
void write_dat(uchar dat)
{
uchar i;
uchar i_data;
i_data=0xfa;
CS=1;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=dat;
i_data=i_data&0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=dat;
i_data=i_data<<4;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
CS=0;
delay1ms(5);
}
/*-----------------------------------------*/
/*--------------显示坐标-------------------*/
void lcd_pos(uchar x,uchar y) //汉字显示坐标,x为哪一行,y为哪一列
{
uchar pos;
if(x==0)
x=0x80; //第一行
else if(x==1)
x=0x90; //第二行
else if(x==2)
x=0x88; //第三行
else if(x==3)
x=0x98; //第四行
pos=x+y; //显示哪一行(总共有4行)哪一竖(总共有8竖,每16列为1竖)
write_cmd(pos);
}
/*-----------------------------------------*/
/*--------------显示8个汉字-------------------*/
void disp_hanzi(uchar code *chn)
{
uchar i;
write_cmd(0x30); //基本指令操作方式
for(i=0;i<16;i++) //16列*8个汉字=128(刚好)
write_dat(chn[i]);
}
/*-----------------------------------------*/
/*--------------显示数字-------------------*/
void disp_num(uchar code *chn)
{
uchar i;
write_cmd(0x30); //基本指令操作方式
for(i=0;i<2;i++) //1个数字
write_dat(chn[i]);
}
void disp_number(uchar num)
{
switch(num)
{
case 0: disp_num(num0);break;
case 1: disp_num(num1);break;
case 2: disp_num(num2);break;
case 3: disp_num(num3);break;
case 4: disp_num(num4);break;
case 5: disp_num(num5);break;
case 6: disp_num(num6);break;
case 7: disp_num(num7);break;
case 8: disp_num(num8);break;
case 9: disp_num(num9);break;
default: break;
}
}
/*----------- --LCD初始化------------------*/
void lcd_init()
{
PSB=0;
write_cmd(0x30); //基本指令
write_cmd(0x02); //地址归位
write_cmd(0x06); //游标右移
write_cmd(0x0c); //整体显示
write_cmd(0x01); //清屏
}
/*-----------------------------------------*/
void displayP10()
{
float ad1;
//unsigned int temp1,sh1,ge1,n1,m1;
//uchar code dis2[]={0x01,0x02,0x00};
//ad1=x*7.8125; //电压修正
uchar i;
ad1=Vin*3.9608; //具体线性参数由输入电压值调整,该值的测量范围为0-10.00V,5V左右的测量比较准确,
//两端的最大误差为70mv,其他一般在40mv以内
temp1=(int)ad1;
sh1=temp1/1000; //十位
ge1=(temp1%1000)/100; //个位
n1=((temp1%1000)%100)/10; //小数点后一位
m1=((temp1%1000)%100)%10; //小数点后二位
//write_cmd(0x01);
write_cmd(0x30); //基本指令操作方式
lcd_pos(0,0);
for(i=0;i<6;i++) write_dat(ma1[i]);
lcd_pos(0,3);
disp_number(sh1);
lcd_pos(0,4);
disp_number(ge1);
lcd_pos(0,5);
for(i=0;i<2;i++) write_dat(ma2[i]);
lcd_pos(0,6);
disp_number(n1);
lcd_pos(0,7);
disp_number(m1);
/*lcd_pos(2,0);
disp_hanzi(disp1);
lcd_pos(3,0);
disp_hanzi(disp2);*/
}
void main()
{
EA=1;
AD_initiate(); //初始化
ADC_Power_On(); //开AD电源
//init();
lcd_init();
delay(10);
while(1)
{
caiyangP10(); //测电压
send_ad_result();
//Vin=Vin*4007;
displayP10();
delay(10);
}
}
上一页 [1] [2]
本文关键字:程序 STC单片机(,单片机-工控设备 - STC单片机(