完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
回帖奖励 +1 分积分
这个问题很含糊啊,首先,51单片机自带AD么,如果没带,AD芯片怎样选型……反正网上一大堆,楼主的要求不够详细
51单片机AD转换程序_百度文库 http://wenku.baidu.com/link?url= ... 6wn_sFJeWL7jTSu-Tz7 |
|
|
|
z***hello 发表于 2016-5-17 09:41 不知道带不带啊 但是我有例程 和 连接图 #ifndef __XPT2046_H_ #define __XPT2046_H_ //---包含头文件---// #include #include //---重定义关键词---// #ifndef uchar #define uchar unsigned char #endif #ifndef uint #define uint unsigned int #endif #ifndef ulong #define ulong unsigned long #endif //---定义使用的IO口---// ***it CLK = P1^0; //时钟 ***it CS = P1^1; //片选 ***it DIN = P1^2; //输入 ***it DOUT = P1^3; //输出 uint Read_AD_Data(uchar cmd); uint SPI_Read(void); void SPI_Write(uchar dat); #endif #include"XPT2046.h" /**************************************************************************** *函数名:TSPI_Start *输 入:无 *输 出:无 *功 能:初始化触摸SPI ****************************************************************************/ void SPI_Start(void) { CLK = 0; CS = 1; DIN = 1; CLK = 1; CS = 0; } /**************************************************************************** *函数名:SPI_Write *输 入:dat:写入数据 *输 出:无 *功 能:使用SPI写入数据 ****************************************************************************/ void SPI_Write(uchar dat) { uchar i; CLK = 0; for(i=0; i<8; i++) { DIN = dat >> 7; //放置最高位 dat <<= 1; CLK = 0; //上升沿放置数据 CLK = 1; } } /**************************************************************************** *函数名:SPI_Read *输 入:无 *输 出:dat:读取 到的数据 *功 能:使用SPI读取数据 ****************************************************************************/ uint SPI_Read(void) { uint i, dat=0; CLK = 0; for(i=0; i<12; i++) //接收12位数据 { dat <<= 1; CLK = 1; CLK = 0; dat |= DOUT; } return dat; } /**************************************************************************** *函数名:Read_AD_Data *输 入:cmd:读取的X或者Y *输 出:endValue:最终信号处理后返回的值 *功 能:读取触摸数据 ****************************************************************************/ uint Read_AD_Data(uchar cmd) { uchar i; uint AD_Value; CLK = 0; CS = 0; SPI_Write(cmd); for(i=6; i>0; i--); //延时等待转换结果 CLK = 1; //发送一个时钟周期,清除BUSY _nop_(); _nop_(); CLK = 0; _nop_(); _nop_(); AD_Value=SPI_Read(); CS = 1; return AD_Value; } #include"reg51.h" #include"XPT2046.h" //--定义使用的IO--// #define GPIO_DIG P0 ***it LSA=P2^2; ***it LSB=P2^3; ***it LSC=P2^4; //--定义全局变量--// unsigned char code DIG_CODE[17]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码 unsigned char DisplayData[8]; //用来存放要显示的8位数的值 void DigDisplay(void); void main(void) { uint temp,count; while(1) { if(count==50) { count=0; // temp = Read_AD_Data(0x94); // AIN0 电位器 // temp = Read_AD_Data(0xD4); // AIN1 热敏电阻 temp = Read_AD_Data(0xA4); // AIN2 光敏电阻 // temp = Read_AD_Data(0xE4); // AIN3 外部输入 } count++; DisplayData[0]=DIG_CODE[0]; DisplayData[1]=DIG_CODE[0]; DisplayData[2]=DIG_CODE[0]; DisplayData[3]=DIG_CODE[0]; DisplayData[4]=DIG_CODE[temp%10000/1000]; DisplayData[5]=DIG_CODE[temp%1000/100]; DisplayData[6]=DIG_CODE[temp%100/10]; DisplayData[7]=DIG_CODE[temp%10/1]; DigDisplay(); } } void DigDisplay(void) { unsigned char i; unsigned int j; for(i=0;i<8;i++) { switch(i) //位选,选择点亮的数码管, { case(0): LSA=0;LSB=0;LSC=0; break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//显示第1位 case(2): LSA=0;LSB=1;LSC=0; break;//显示第2位 case(3): LSA=1;LSB=1;LSC=0; break;//显示第3位 case(4): LSA=0;LSB=0;LSC=1; break;//显示第4位 case(5): LSA=1;LSB=0;LSC=1; break;//显示第5位 case(6): LSA=0;LSB=1;LSC=1; break;//显示第6位 case(7): LSA=1;LSB=1;LSC=1; break;//显示第7位 } GPIO_DIG=DisplayData;//发送段码 j=50; //扫描间隔时间设定 while(j--); GPIO_DIG=0x00;//消隐 } } |
|
|
|
z***hello 发表于 2016-5-17 09:41 不知道带不带啊 但是我有例程 和 连接图 #ifndef __XPT2046_H_ #define __XPT2046_H_ //---包含头文件---// #include #include //---重定义关键词---// #ifndef uchar #define uchar unsigned char #endif #ifndef uint #define uint unsigned int #endif #ifndef ulong #define ulong unsigned long #endif //---定义使用的IO口---// ***it CLK = P1^0; //时钟 ***it CS = P1^1; //片选 ***it DIN = P1^2; //输入 ***it DOUT = P1^3; //输出 uint Read_AD_Data(uchar cmd); uint SPI_Read(void); void SPI_Write(uchar dat); #endif #include"XPT2046.h" /**************************************************************************** *函数名:TSPI_Start *输 入:无 *输 出:无 *功 能:初始化触摸SPI ****************************************************************************/ void SPI_Start(void) { CLK = 0; CS = 1; DIN = 1; CLK = 1; CS = 0; } /**************************************************************************** *函数名:SPI_Write *输 入:dat:写入数据 *输 出:无 *功 能:使用SPI写入数据 ****************************************************************************/ void SPI_Write(uchar dat) { uchar i; CLK = 0; for(i=0; i<8; i++) { DIN = dat >> 7; //放置最高位 dat <<= 1; CLK = 0; //上升沿放置数据 CLK = 1; } } /**************************************************************************** *函数名:SPI_Read *输 入:无 *输 出:dat:读取 到的数据 *功 能:使用SPI读取数据 ****************************************************************************/ uint SPI_Read(void) { uint i, dat=0; CLK = 0; for(i=0; i<12; i++) //接收12位数据 { dat <<= 1; CLK = 1; CLK = 0; dat |= DOUT; } return dat; } /**************************************************************************** *函数名:Read_AD_Data *输 入:cmd:读取的X或者Y *输 出:endValue:最终信号处理后返回的值 *功 能:读取触摸数据 ****************************************************************************/ uint Read_AD_Data(uchar cmd) { uchar i; uint AD_Value; CLK = 0; CS = 0; SPI_Write(cmd); for(i=6; i>0; i--); //延时等待转换结果 CLK = 1; //发送一个时钟周期,清除BUSY _nop_(); _nop_(); CLK = 0; _nop_(); _nop_(); AD_Value=SPI_Read(); CS = 1; return AD_Value; } #include"reg51.h" #include"XPT2046.h" //--定义使用的IO--// #define GPIO_DIG P0 ***it LSA=P2^2; ***it LSB=P2^3; ***it LSC=P2^4; //--定义全局变量--// unsigned char code DIG_CODE[17]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码 unsigned char DisplayData[8]; //用来存放要显示的8位数的值 void DigDisplay(void); void main(void) { uint temp,count; while(1) { if(count==50) { count=0; // temp = Read_AD_Data(0x94); // AIN0 电位器 // temp = Read_AD_Data(0xD4); // AIN1 热敏电阻 temp = Read_AD_Data(0xA4); // AIN2 光敏电阻 // temp = Read_AD_Data(0xE4); // AIN3 外部输入 } count++; DisplayData[0]=DIG_CODE[0]; DisplayData[1]=DIG_CODE[0]; DisplayData[2]=DIG_CODE[0]; DisplayData[3]=DIG_CODE[0]; DisplayData[4]=DIG_CODE[temp%10000/1000]; DisplayData[5]=DIG_CODE[temp%1000/100]; DisplayData[6]=DIG_CODE[temp%100/10]; DisplayData[7]=DIG_CODE[temp%10/1]; DigDisplay(); } } void DigDisplay(void) { unsigned char i; unsigned int j; for(i=0;i<8;i++) { switch(i) //位选,选择点亮的数码管, { case(0): LSA=0;LSB=0;LSC=0; break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//显示第1位 case(2): LSA=0;LSB=1;LSC=0; break;//显示第2位 case(3): LSA=1;LSB=1;LSC=0; break;//显示第3位 case(4): LSA=0;LSB=0;LSC=1; break;//显示第4位 case(5): LSA=1;LSB=0;LSC=1; break;//显示第5位 case(6): LSA=0;LSB=1;LSC=1; break;//显示第6位 case(7): LSA=1;LSB=1;LSC=1; break;//显示第7位 } GPIO_DIG=DisplayData;//发送段码 j=50; //扫描间隔时间设定 while(j--); GPIO_DIG=0x00;//消隐 } }
|
|
|
|
z***hello 发表于 2016-5-17 09:41 以上是数码管显示光敏电阻阻值 但是我想实现lcd1206显示光敏电阻阻值 程序代码不会啊 我看霖锋视频教材他用lcd1206显示阻值代码特别简单 为甚么这个用数码管显示代码却这么复杂 费劲 |
|
|
|
dj*ac 发表于 2016-5-17 22:16 因为数码管显示一般是利用位选数码管和眼睛的余辉扫描显示的,共用的数据线,需要进行数码管选通 LCD只要把字符串输进去就可以了,而且需要SPI协议,也不存在谁容易的概念吧 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
7 浏览 0 评论
26 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
13 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
644 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1000 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11770 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 06:35 , Processed in 0.697257 second(s), Total 80, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号