单片机 数字电压表设计 - 图文(5)

2019-05-17 12:57

delayNOP();

i=(bit)(P0&0x80); en=0;

return(i); }

void writecmd(unsigned char cmd) writecmd(0x01); delay2(5); }

void lcdpos(uchar X,uchar Y) { uchar pos; if(X==0) {

{

while(busy()); rs=0; rw=0; en=0; _nop_(); _nop_(); P0=cmd; delayNOP(); en=1;

delayNOP(); en=0; }

void writedat(unsigned char dat) {

while(busy()); rs=1; rw=0; en=0; _nop_(); _nop_(); P0=dat; delayNOP(); en=1;

delayNOP(); en=0; }

void init() {

psb=1; delay2(3);

writecmd(0x34); delay2(10);

writecmd(0x30); delay2(10);

writecmd(0x0c); delay2(10);

X=0x80; }

if(X==1) {

X=0X90; }

if(X==2) {

X=0X88; }

if(X==3) {

X=0x98; }

pos=X+Y;

writecmd(pos); }

void disphoto(uchar *photo) //图片显示 {

unsigned char i,j;

writecmd(0x34); //关闭绘图

for(i=0;i<32;i++) {

writecmd(0x80+i); //垂直坐标

writecmd(0x80); //平坐标

for(j=0;j<16;j++) //一行可显示16个字符 {

writedat(*photo++); delay2(1); }

水8

} for(i=0;i<6;i++) //测值: 共 for(i=0;i<32;i++) { writecmd(0x80+i); writecmd(0x88); for(j=0;j<16;j++) { writedat(*photo++); delay2(1); } } writecmd(0x36); } void display_jiemian() { uchar i; lcdpos(0,0); for(i=0;i<17;i++) //量程: 共有6个字符 { writedat(dis1[i]); delay1(1); } lcdpos(1,0); for(i=0;i<14;i++) //量程: 共有6个字符 { writedat(dis2[i]); delay1(1); } lcdpos(2,0); for(i=0;i<10;i++) //所选量程:共有10个字符 { writedat(dis3[i]); delay1(1); } lcdpos(3,0);

有6个字符 { writedat(dis4[i]); delay1(1); } } void clear() { writecmd(0x34); delay1(5); writecmd(0x30); delay1(5); writecmd(0x01); delay1(5); } void displayB() { if(aaa<400) { aaa=0; } aaa=aaa*1.0146; aaa=aaa/4.0; aaa_h=aaa/100.00; writecmd(0x9B); writedat('U'); writedat(':'); writedat(table[(aaa_h/100)]); writedat('.'); writedat(table[(aaa_h/10)]); writedat(table[(aaa/100)]); writedat(table[(aaa/10)]); writedat(table[(aaa/1)]); writecmd(0xdf); writecmd(0x02); delay1(50); } void displayD() { if(aaa<400) { aaa=0;

9

}

aaa=aaa*1.1012; aaa=aaa/4.0;

aaa_h=aaa/100.00; writecmd(0x9B); writedat('U'); writedat(':'); writedat(' ' );

writedat(table[(aaa_h/10)]); writedat('.');

writedat(table[(aaa_h)]); writedat(table[(aaa/10)]); writedat(table[aaa]); writecmd(0xdf); writecmd(0x02); delay1(50); }

void displayA() {

if(aaa<400) {

aaa=0; }

aaa=aaa*1.02; aaa=aaa/4.0;

aaa_h=aaa/100.00; writecmd(0x9B); writedat('U'); writedat(':'); writedat(' ');

writedat(table[(aaa_h/10)]); writedat('.');

writedat(table[(aaa_h/1)]); writedat(table[(aaa/10)]); writedat(table[(aaa/1)]); writecmd(0xdf); writecmd(0x02); delay1(50); }

void displayC() {

if(aaa<1300) {

aaa=0;

}

aaa=aaa*1.0638; aaa=aaa/4; aaa_h=aaa/100; writecmd(0x9B); writedat('U'); writedat(':'); writedat(' ');

writedat(table[(aaa_h/10)]); writedat(table[(aaa_h)]); writedat('.');

writedat(table[(aaa/10)]); writedat(table[(aaa/1)]); writecmd(0xdf); writecmd(0x02); delay1(50); }

void display1() {

uchar a,b; a=0xA1; b=0xE6; ds_getT();

writecmd(0x01); lcdpos(0,0);

for(i=0;i<10;i++) {

writedat(dis5[i]); delay1(1); }

writecmd(0x90); writedat('T'); writedat(':'); writedat(' ' );

writedat(table[(TemH/10)]); writedat(table[TemH]); writedat('.');

writedat(table[(count/10)]); writedat(table[count]); writedat(a); writedat(b); if(TemH>=30) {

lcdpos(3,0);

10

for(i=0;i<17;i++) {

writedat(dis9[i]); delay1(1); } }

if(TemH<=30&&TemH>=20) {

lcdpos(3,0); for(i=0;i<17;i++) {

writedat(dis10[i]); delay1(1); } }

if(TemH<=20) {

lcdpos(3,0); for(i=0;i<17;i++) {

writedat(dis11[i]); delay1(1); } }

writecmd(0xdf); writecmd(0x02); delay1(500); }

void display() {

lcdpos(3,3);

for(i=0;i<8;i++) {

writedat(dis8[i]); delay1(1); } }

/*ds18b20.h*/

#define BUSY1 (DQ1==0) 义busy信号

//定

sbit DQ1=P2^5; //定义18B20单总线引脚

void ds_reset_1(void); //声明18B20复位函数

void wr_ds18_1(char dat); //声明18B20写入函数

void time_delay(unsigned char time);//声明延时函数

int get_temp_1(void); //声明18B20读入温度函数

void delay(unsigned int x); //声明延时函数

void read_ROM(void); //声明18B20读ROM函数

int get_temp_d(void); //声明获取温度函数

void ds_init(void); //声明18B20初始化函数

void ds_getT(void); //声明18B20获得温度显示值函数

/****************以下定义各种变量********************/

unsigned char ResultSignal; int

ResultTemperatureLH,ResultTemperatureLL,ResultTemperatureH; unsigned char ROM[8]; unsigned char idata TMP; unsigned char idata TMP_d; unsigned char f;

unsigned char rd_ds18_1();

unsigned int TemH,TemL; //温度的整数部分和小数部分

unsigned int count; //定义小数计算部分

/***********************延时程序=a*1ms**************************************/

void delay111(unsigned char a) {

unsigned char i; while(a-- !=0)

11

{

/* reset ds18b20 for(i=0;i<80;i++); } }

void ds_init(void) {

unsigned int k=0; ds_reset_1();

ds_reset_1(); //reset wr_ds18_1(0xcc); //skip rom

_nop_();

wr_ds18_1(0x7f); ds_reset_1(); wr_ds18_1(0xcc); _nop_();

wr_ds18_1(0x44);

for(k=0;k<11000;k++)

time_delay(255); ds_reset_1(); }

void ds_getT(void) {

wr_ds18_1(0xcc); wr_ds18_1(0xbe); TemH=get_temp_1(); TemL=get_temp_d(); TemH&=0x00ff; TemL&=0x00ff;

count=(TemH*256+TemL)*6.25; }

/***************延时程序,单位us,大于10us*************/

void time_delay(unsigned char time) {

time=time-10; time=time/6;

while(time!=0)time--; }

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

*/

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

void ds_reset_1(void) {

unsigned char idata count=0; DQ1=0;

time_delay(240); time_delay(240); DQ1=1; return; }

void check_pre_1(void) {

while(DQ1); while(~DQ1);

time_delay(30); }

void read_ROM(void) {

int n;

ds_reset_1(); check_pre_1(); wr_ds18_1(0x33);

for(n=0;n<8;n++){ROM[n]=rd_ds18_1();} }

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

/* Read a bit from 1820 位读取*/

/*****************************************************/ bit tmrbit_1(void) {

idata char i=0;

12


单片机 数字电压表设计 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中高档养生膳食馆餐饮管理创业计划书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: