{

write_command(ad);

while(*s》0)

{

write_date(*s++);

delay(100);

}

}

//****************************************************//

//函数名:delay_ms(uint xms)

//函数功能:ms级延时函数

//***************************************************//

void delay_ms(uint xms)

{

uint x,y;

for(x=xms;x》0;x--)

for(y=110;y》0;y--);

}

//***************************************************//

//函数名称:TLC549_ADC()

//函数功能:读取上一次A/D转换的数据,启动下一次A/D转换

//**************************************************//

uchar TLC549_ADC(void)

{

uchar n, tmp;

CS= 1; //CS置高,片选无效

CLK = 0;

CS= 0; //CS置低,片选有效,同时DO输出高位

_nop_();

_nop_(); //适当延迟时间1.4us Setup Time

for(n = 0; n 《 8; n++) //串行数据移位输入

{

tmp 《《= 1;

tmp |=DO;

CLK = 1; //0.4us

_nop_(); //CLK transition time Max 0.1us

CLK = 0; //0.4us

}

CS = 1; //CS置高,片选无效

for(n = 17; n != 0; n--) _nop_();//Next Coversion需要延迟17us

return (tmp);

}

//****************************************//

//函数名称ata_Conversion()

//函数功能:电压换算

//*****************************************//

void Data_Conversion(void)

{

uchar AD_Data;

AD_Data = TLC549_ADC();

delay_ms(1000);

Volt = 5.0 / 256 * AD_Data*1000;

}

void Volt_To_LCD1602(void)

{

Data_Conversion(); //电压换算并放大1000倍

LCD[0] = Volt/1000; //千位

LCD[1] = ‘。’; //小数点

LCD[2] = Volt/100%10;//百位

LCD[3] = Volt/10%10; //十位

LCD[4] = Volt%10; //个位

LCD[5] = ‘V’; //字符V

write_command(0x80+8);

write_date(0x30+LCD[0]);

write_date(LCD[1]);

write_date(0x30+LCD[2]);

write_date(0x30+LCD[3]);

write_date(0x30+LCD[4]);

write_date(LCD[5]);

}

int main()

{

//uint m;

LCD_init();

delay(100);

write_command(0x01);

write_command(0x80);

string(0x80,“Voltage:”);

delay_ms(2000);

while(1)

{

Volt_To_LCD1602();

}

}

51单片机对LCD1602液晶显示的驱动控制设计

51单片机对LCD1602液晶显示的驱动控制设计

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查