标题:
STC15单片机ADC采集显示在LCD12864的源程序
[打印本页]
作者:
huanghu
时间:
2018-4-27 10:45
标题:
STC15单片机ADC采集显示在LCD12864的源程序
显示在LCD12864思路。把ADC采集到的值传递给LCD12864显示那部分程序,如果你直接把ADC采集到的值直接传递给LCD12864显示那块,会出现乱码,所以需要你把ADC采集的三位数,分别把这三位数的每一位数取出来在加上ASCLL中的0(48),传递给LCD12864显示那块,而且你要显示在哪一行那个位置,还有我用的STC15F2K60S2每次的端口初始化,才可以 还请大神多多指教。谢谢
12864简单显示+ADC采集单片机源程序如下:
#include <aj.h>
#include "ad.h"
//unsigned char code dis1[]={"0x31,0x32,0x33,0x34,0x35"}; //显示四行
unsigned char code dis2[]={"哈哈一热"}; //每一行只能俩中,这俩种用中文空格隔开
unsigned char code dis3[]={"我我的伟大的"};
unsigned char code dis4[]={"1231315"};
void xianshi(int j);
sbit lcd_rs=P2^0;
sbit lcd_rw=P2^1;
sbit lcd_en=P2^2;
sbit lcd_psb=P2^3;
void port_mode() // 端口模式
{
P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00;
}
void delayxms(unsigned int x)
{
unsigned int i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
bit lcd_busy() //LCD判断忙
{
bit result;
lcd_rs=0;
lcd_rw=1;
lcd_en=1;
_nop_();//4us
_nop_();
_nop_();
result=(bit)(P0&0x80);
lcd_en=0;
return(result);
}
void lcd_wcmd(unsigned char cmd) //LCD读状态
{
while(lcd_busy()); //忙状态检测
lcd_rs=0;
lcd_rw=0;
lcd_en=0;
_nop_(); //1us
_nop_();
P0=cmd;
_nop_();//4us
_nop_();
_nop_();
lcd_en=1;
_nop_();//4us
_nop_();
_nop_();
lcd_en=0;
}
void lcd_wdat(unsigned char dat) //LCD写数据
{
while(lcd_busy());
lcd_rs=1;
lcd_rw=0;
lcd_en=0;
P0=dat;
_nop_();//4us
_nop_();
_nop_();
lcd_en=1;
_nop_();//4us
_nop_();
_nop_();
lcd_en=0;
}
void lcd_init() //LCD初始化
{
lcd_psb=1; //并行
lcd_wcmd(0x34);
delay(5);
lcd_wcmd(0x30);
delay(5);
lcd_wcmd(0x0c);
delay(5);
lcd_wcmd(0x01);
delay(5);
}
void lcd_pos(unsigned char x,unsigned char y) //确定LCD显示位置
{
unsigned char pos;
if(x==0) {x=0x80;}
if(x==1) {x=0x90;}
if(x==2) {x=0x88;}
if(x==3) {x=0x98;}
pos=x+y;
lcd_wcmd(pos);
}
void xianshi()
{
unsigned char i,w1,w2,w3,j;
j=GetADCResult(0); //采集到ADC赋值给变量
delay(10);
i=0;
w1=j/100+48; //三位数取余 取第一位数
w2=j%100/10+48; //取第二位数
w3=j%100%10+48; //取第三位数
lcd_pos(0,0); //表示第一行,第零位
lcd_wdat(w1); //把ADC采集到值取出第一位,传递给12864显示
delayxms(1);
lcd_pos(0,1); //表示第一行,第一零位
lcd_wdat(w2);
delayxms(1);
lcd_pos(0,2); //表示第一行,第二零位
lcd_wdat(w3);
delayxms(1);
delay(20);
lcd_pos(1,0);
i=0;
while(dis2[i]!='\0') //判断数组dis2[i]是否等于0
{
lcd_wdat(dis2[i]); //让数组dis2[i]里的每一位数一次显示
i++;
}
delay(5);//15在此加延时解决显示不清楚
lcd_pos(2,0); //LCD显示第二行第0位
i=0;
while(dis3[i]!='\0')
{
lcd_wdat(dis3[i]);
i++;
}
delay(5);
lcd_pos(3,0); //LCD显示第三行第0位
i=0;
while(dis4[i]!='\0')
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
12864简单显示 ADC采集.zip
(42.5 KB, 下载次数: 177)
2018-4-27 10:38 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
xxdz12345
时间:
2018-11-5 11:51
我要看看
作者:
fankechang
时间:
2019-9-23 20:30
正需要,准备下学习一下
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1