当前位置:首页 > 基于ADC0809的数字电压表 - 图文
南京信息工程大学
/* 写入字节函数 */ /******************************************************************/ void ShowChar(unsigned char pos,unsigned char c) {
unsigned char p; if (pos>=0x10)
p=pos+0xb0; //是第二行则命令代码高4位为0xc else
p=pos+0x80; //是第二行则命令代码高4位为0x8 WriteCommand (p);//写命令 WriteData (c); //写数据 }
/******************************************************************/ /* 写入字符串函数 */ /******************************************************************/ void ShowString (unsigned char line,char *ptr,uchar num) {
unsigned char l,i; l=line<<4;
for (i=0;i ShowChar (l++,*(ptr+i));//循环显示16个字符 } /******************************************************************/ - 13 - 南京信息工程大学 /* 初始化函数 */ /******************************************************************/ void InitLcd() { delayms(15); WriteCommand(0x38); //display mode WriteCommand(0x38); //display mode WriteCommand(0x38); //display mode WriteCommand(0x06); //显示光标移动位置 WriteCommand(0x0c); //显示开及光标设置 WriteCommand(0x01); //显示清屏 } /******************************************************************/ /* AD转换 */ /******************************************************************/ void adc0809() { oe=0; delayus(20); ale_start=0; delayus(20); ale_start=1; delayus(20); - 14 - 南京信息工程大学 ale_start=0; //ale和start正脉冲,锁存地址,同时启动AD转换 while(!eoc); //等待转换结束 oe=1; //输出使能 delayus(20); value=adcdat; //value 采集到的电压值的数字量 delayms(50); oe=0; delayms(300); } /************************************** AD转换后进行数据处理比较 ***************************************/ void compare(void) { adc0809(); tt=value*1500/255; delayms(10); } /************************************** 刷新当前显示 ***************************************/ void new_disp_buf(void) - 15 - 范围0~255 南京信息工程大学 { } /************************************** 当前电压显示 compare(); //'1' disp_buf[0]=disp_table[tt/1000]; disp_buf[1]=disp_table[tt00/100]; //'2' disp_buf[2]=disp_table[10]; //'.' disp_buf[3]=disp_table[tt0/10]; //'du' disp_buf[4]=disp_table[tt]; // disp_buf[5]=disp_table[11]; // V ***************************************/ void displaycurrent(void) { } void main() { new_disp_buf(); //显示前先刷新缓冲区 ShowString (0,ptr1,16); //在第一行显示 ShowString (1,disp_buf,6); //第二行显示 InitLcd(); EA=1; ET0=1; - 16 -
共分享92篇相关文档