完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
`#include #include #include #include "12864.c" #define uint unsigned int #define uchar unsigned char ***it clock = P1^0; ***it input = P1^1; ***it output = P1^2; ***it CS = P1^3; uchar voltage=0; uint u,data0=0;//,datal,datah; //转换结果,低位,高位 uchar data disp_buf[] ={"0000"};//显示缓冲区 uchar data disp_buf1[] ={"0.00"}; void delay(uchar N) { while(N--); } uint read2543(uchar CON_WORD) //通道号 { uint ad=0; uchar i; CON_WORD<<=4; clock=0; CS=0; for(i=0;i<12;i++) //默认12位ADC,输出十二个二进制数 { if(output==1) ad=ad|0x01; if(CON_WORD&0x80) input=1; else input=0; clock=1; delay1(10); clock=0; delay1(10); CON_WORD<<=1; ad<<=1; } CS=1; ad>>=1; return(ad); } void calculate() { uchar temp1,temp2; disp_buf[0]=(uchar)((data0/1000)+'0'); //千位 temp1=(data0%1000); disp_buf[1]=(uchar)((temp1/100)+'0'); //百位 temp2=(temp1%100); disp_buf[2]=(uchar)((temp2/10)+'0'); //十位 disp_buf[3]=(uchar)((temp2%10)+'0'); //个位 //u=(uint)(data0+'0');//disp_buf[0]*1000+disp_buf[1]*100+disp_buf[2]*10+disp_buf[3]; voltage=(uchar)(((data0*5)/4096)+'0'); disp_buf1[0]=(uchar)(voltage+'0'); } void Display() { uchar i; lcd_pos(1,0); //设置显示位置为第一行 for(i=0;i<4;i++) { lcd_wdat(disp_buf); delay(10); } lcd_pos(2,0); for(i=0;i<4;i++) { lcd_wdat(disp_buf1); delay(10); } delay(30); } void main() { lcd_init(); while(1) { data0=read2543(0); //0表示通道号,可以改变。 data0是测得的AD转换数据 calculate(); Display(); //调显示函数 } } /******************************************************************************* * 描述: * * 12864标准字库液晶演示 数据p1,控制p2 * ********************************************************************************/ #include #include #define uchar unsigned char #define uint unsigned int /************* 12864LCD引脚定义 *************/ #define LCD_data P0 //数据口 ***it LCD_RS = P2^4; //寄存器选择输入 ***it LCD_RW = P2^3; //液晶读/写控制 ***it LCD_EN = P2^2; //液晶使能控制 ***it LCD_PSB = P3^6; //串/并方式控制 ***it LCD_RST = P3^7; //液晶复位端口 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; void delay2(int ms) { while(ms--) { uchar i; for(i=0;i<150;i++) { _nop_(); _nop_(); _nop_(); _nop_(); } } } /*******************************************************************/ /* 延时函数 */ /*******************************************************************/ void delay1(int ms) { while(ms--) { uchar y; for(y=0;y<100;y++) ; } } /*******************************************************************/ /*检查LCD忙状态 */ /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */ /*******************************************************************/ bit lcd_busy() { bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); } /*******************************************************************/ /*写指令数据到LCD */ /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */ /*******************************************************************/ void lcd_wcmd(uchar cmd) { while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; } /*******************************************************************/ /*写显示数据到LCD */ /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */ /*******************************************************************/ void lcd_wdat(uchar dat) { while(lcd_busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; } /*********************************/ /* LCD初始化设定 */ /*********************************/ void lcd_init() { LCD_PSB = 1; //并口方式 LCD_RST = 0; //液晶复位 delay2(3); LCD_RST = 1; delay2(3); lcd_wcmd(0x34); //扩充指令操作 delay2(5); lcd_wcmd(0x30); //基本指令操作 delay2(5); lcd_wcmd(0x0C); //显示开,关光标 delay2(5); lcd_wcmd(0x01); //清除LCD的显示内容 delay2(5); } /*********************************************************/ /* 设定显示位置 */ /*********************************************************/ void lcd_pos(uchar X,uchar Y) { uchar pos; if (X==1) {X=0x80;} else if (X==2) {X=0x90;} else if (X==3) {X=0x88;} else if (X==4) {X=0x98;} pos = X+Y ; lcd_wcmd(pos); //显示地址 } /********************************************************* * 闪烁函数 * *********************************************************/ void clr_screen() { lcd_wcmd(0x34); //扩充指令操作 delay2(5); lcd_wcmd(0x30); //基本指令操作 delay2(5); lcd_wcmd(0x01); //清屏 delay2(5); } 5V的时候显示: |
|
相关推荐
4个回答
|
|
有很多方面的原因,提高精度减少误差的办法在软件方面可以通过软件滤波的方式对采集到的数据进行处理(你可以百度常用软件滤波)或者自己采集数据利用matlab建模的方式解决,硬件方面的处理简单可以通过接个0.1uf以及10uf的电容,一般都得用运放做个缓冲处理,最直接的看看数据手册中有什么电路
|
|
|
|
好像是读取数据的那部分程序有错
|
|
|
|
你上边那是全部的程序?
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
828 浏览 0 评论
824 浏览 0 评论
861 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
836 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1292 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11821 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 09:37 , Processed in 0.657046 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号