//---------------------------------------------------

lcd1602算法公式_lcd1602的工作过程lcd1602算法公式_lcd1602的工作过程


lcd1602算法公式_lcd1602的工作过程


void W_LCD_X1_Dat(uint sec)

{W_LCD_Com(0xc0 + 6);

W_LCD_Dat(0x30 + sec / 10000);

W_LCD_Dat(0x30 + (sec % 10000) / 1000);

W_LCD_Dat(0x30 + (sec % 1000) / 100);

W_LCD_Dat(0x30 + (sec % 100) / 10);

W_LCD_Dat('.');

W_LCD_Dat(0x30 + sec % 10);

}//---------------------------------------------------

void main()

{float ;

uint bbb;

init();

= 12.5;

bbb = 10;

W_LCD_X1_Dat(bbb);

while(1);

}//=========================================

初始化等函数,可见:

显示画面如下:

C语言的语句可以这样写

#include

void main()

{float fxx;

unsigned char str[10];

fxx = 12.5;

sprintf(str,"%8.2fn",fxx); //将12.5转换成8.2(2位小数)格式以ASCII方式存储到str字符串中

..........

}由于1620液晶模块支持ASCII码,所以只要将str中的内容送到1602就行了。至于1602的作我就不写了(其实我也没用过,但知道怎么用,应该不难)

#include

#include

#include "lcd_drive.h"

#define uchar unsigned char

#define uint unsigned int

void main()

{uint key();

void deplay(uchar j_p);

void deplay_s(long a);

uchar i=1;

uchar jp=-1;

uchar flat;

uint a,b;

delay_ms(10);

lcd_init();

lcd_clr();

lcd_wcmd(0x80);

while(1)

{while(jp==-1)

jp=key();

deplay(jp);

switch (jp)

{case '=': switch(flat)

{case '+': a+=b; deplay_s(a); break;

case '-': a=b-a; deplay_s(a); break;

case '': a=b; deplay_s(a); break;

case '/': a=b/a; deplay_s(a); break;

default:break;

}break;

case '+':flat='+';b=a;i=0;break;

case '-':flat='-';b=a;i=0;break;

case '':flat='';b=a;i=0;break;

case '/':flat='/';b=a;i=0;break;

case 'c':a=0;b=0;lcd_clr();break;

case 0:

case 1:

case 2:

case 3:

case 4:

case 5:

case 6:

case 7:

case 8:

case 9:a=a10i+jp;i=1;break;

}jp=-1;

}}

//-------矩阵键盘扫描-------

uint key()

{uchar h = 0,l = 0;//矩阵行h,列l

uchar j_p;

P3 = 0x0f;

if(P3 != 0x0f)

{delay_ms( 2 );

if(P3!=0x0f)

{l = P3 & 0x0f ;

P3 = 0xf0;

h = P3 & 0xf0;

}}

switch(l | h)

{case 0x7e:j_p=0;break; //按键0

case 0x7d:j_p=1;break; //按键1

case 0x7b:j_p=2;break; //按键2

case 0x77:j_p=3;break; //按键3

case 0xbe:j_p=4;break; //按键4

case 0xbd:j_p=5;break; //按键5

case 0xbb:j_p=6;break; //按键6

case 0xb7:j_p=7;break; //按键7

case 0xde:j_p=8;break; //按键8

case 0xdd:j_p=9;break; //按键9

case 0xdb:j_p='+';break; //按键a

case 0xd7:j_p='-';break; //按键b

case 0xee:j_p='=';break; //按键Enter

case 0xed:j_p='';break; //按键c

case 0xeb:j_p='/';break; //按键e

case 0xe7:j_p='c';break; //按键取消

default:return -1;break;

}P3=0x0f;

while(P3!=0x0f);

return j_p;

}void deplay(uchar j_p)

{if(j_p != -1)

{if(j_p >= 0 && j_p <= 9)

j_p+=48;

lcd_wdat(j_p);

}}

void deplay_s(long a)

{int n[10];

uint i=0;

while(a)

{n[i]=a%10;

a/=10;

i++;

}while(i)

deplay(n[--i]);

}

做数字时钟,我有现成的程序,和我的毕业设计,但是我的毕业设计是关于实验板的,AT89S52的程序,程序是成品可以单独运行。

达拉斯公司的单总线温度传感器加STC51单片机,连线简单,时序稍有点复杂。一个简单的应用。

正常算法,乘以 3,600,000,即换算成了 km/h。

在程序中,故意,多写了两个零,于是,速度,就放大了100倍。

但是,显示的时候,在的两位之前,写上了一个小数点,

这样一来,人,观察数值时,又缩小了100倍。

实际上,是在速度数值里面,包括了两位小数。

time是微秒,所以hour=3600秒=36001000000微秒,

速度=周长/转一圈的时间。

L=50 也不知道这个源程序定义这个50是个什么。你别管他怎么定义的吧。就算电机的转速,你就按照公式来就行了。单位时间内前进的距离,就是速度。

情况1:

要门测转一圈的速度,要么测转50圈所需要的时间,然后用50圈的周长除以时间。 这单位是m/s

情况2:

设源程序的L=50 意思是转50圈,那么没准源程序不是周长/转一圈的时间,而是转50圈的时间/50,是一圈的速度,单位不是m/s,而是R/m 圈 每秒。