3754|2

1万

帖子

16

TA的资源

版主

楼主
 

LM3S811DDLLXXRR笔记之五:AD转换5110联合军演 [复制链接]

 

首先:我先说下这个的难点,这个是两个程序往一起摄,摄不了也得摄,我就用EXTERN哈,也不必费劲的搞H

 

但这还不算难点,难点是那个带小数点的显示我又搞了两个晚上。上图哈:(又是大奔拍地,照像机老忘拿回下次注意)

 

 

 

我先说我的显示是什么

 

 

the volate is:

 

1.6**

 

因为我采样是1.6伏多点后两位显示什么不一定反证是1.6几,有一次是1.663好象来这

 

不费话了上图先

 

 

 

 

 

上程序:

 

5110部分

 


#include <LM3Sxxx.H>
#include "english_6x8_pixel.h"
#include "DriverLCD_Nokia5110.h"
#include "gpio.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define true 1
#define flase 0

/*-----------------------------------------------------------------------
LCD_init          : 3310LCD初始化

编写日期          :2004-8-10
最后修改日期      :2004-8-10
-----------------------------------------------------------------------*/
#define LCD_DC GPIO_PIN_0  //   PA
#define LCD_RST GPIO_PIN_7
#define LCD_SCLK GPIO_PIN_1  //PA时钟信号
#define LCD_SDIN GPIO_PIN_6  //数据输入
#define LCD_CE GPIO_PIN_5  //

#define c_Lcd_Max_x 84
#define c_Lcd_Max_y 6   //以字节为单位

#define c_LCD_Max_Dot_X 84
#define c_LCD_Max_Dot_Y 48

#define COM  0  //指令
#define DAT  1  //数据
//-------------------
#define STR  1  //字符
#define HAN  2  //汉字
//--------------------------LPH7366指令集---------------------------
#define Nokia5110_basic_fun_set  0x20 //基本功能设置
#define Nokia5110_expand_fun_set 0x21 //扩展功能设置
//  D7  D6  D5  D4  D3  D2  D1  D0
//  0   0   1   0   0   PD  V   H
//                      |   |   |_______1->扩展指令集  0->基本指令集
//                      |   |___________1->垂直寻址    0->水平寻址
//                      |_______________1->低功耗模式  0->正常模式
//-------------------------------------------------------------------
//基本指令集
#define Nokia5110_dis_set  0x0c//显示模式设置
#define Nokia5110_DispMode_AllLightOff 0x08
#define Nokia5110_DispMode_AllLightOn 0x09
#define Nokia5110_DispMode_Reverse 0x0d
//  D7  D6  D5  D4  D3  D2  D1  D0
//  0   0   0   0   1   D   0   E
//                      |       |_______0    0        1    1
//                      |_______________0    1        0    1
//                                      白屏 正常显示 全显 反转
//-------------------------------------------------------------------
#define Nokia5110_add_Yset  0x40 //设置Y地址
//  D7  D6  D5  D4  D3  D2  D1  D0
//  0   1   0   0   0   Y1  Y2  Y3
//-------------------------------------------------------------------
#define Nokia5110_add_Xset  0x80 //设置X地址
//  D7  D6  D5  D4  D3  D2  D1  D0
//  0   1   X6  X5  X4  X3  X2  X1
//-------------------------------------------------------------------
//扩展指令集
#define Nokia5110_tem_set  0x06   //温度系数设置
//  D7  D6  D5  D4  D3  D2  D1  D0
//  0   0   0   0   0   1  TC1  TC0
//-------------------------------------------------------------------
#define Nokia5110_vot_set  0xBF  //电压系数设置  0xD7
//  D7  D6  D5  D4  D3  D2  D1  D0
//  1   vo6 vo5 vo4 vo3 vo2 vo1 vo0 
//-------------------------------------------------------------------
//void Delay_1uS(void);


void delay_1us(void)                 //1us延时函数
  {
   unsigned int i;
  for(i=0;i<1;i++);
  }

//1ms Delayfunction
void Delay(uint uiDelayCount)
{
 uint uiTempCount;
 uint uci;

 for(uiTempCount=0; uiTempCount<uiDelayCount; uiTempCount++)
 {

  uci = 1000;
  while(uci--)
  {
   delay_1us();
     }
 }
}


 

/*-----------------------------------------------------------------------
LCD_write_byte    : 使用SPI接口写数据到LCD

输入参数:data    :写入的数据;
          command :写数据/命令选择;

编写日期          :2004-8-10
最后修改日期      :2004-8-13
-----------------------------------------------------------------------*/
void LCD_write_CMD(unsigned char ucWriteData)
{
    unsigned char uci;

   
    GPIOPinWrite(GPIO_PORTC_BASE, LCD_CE,~LCD_CE);

 GPIOPinWrite(GPIO_PORTA_BASE, LCD_DC,~LCD_DC);
 for(uci=0;uci<8;uci++)
 {
  if(ucWriteData & 0x80)
  {
   
   GPIOPinWrite(GPIO_PORTC_BASE, LCD_SDIN,LCD_SDIN);
    }
  else
  {
   
   GPIOPinWrite(GPIO_PORTC_BASE, LCD_SDIN,~LCD_SDIN);
    }
  
  GPIOPinWrite(GPIO_PORTA_BASE, LCD_SCLK,~LCD_SCLK);
  ucWriteData = ucWriteData << 1;
 
  GPIOPinWrite(GPIO_PORTA_BASE, LCD_SCLK,LCD_SCLK);
 }

   //LCD_CE = 1;
 GPIOPinWrite(GPIO_PORTC_BASE, LCD_CE,LCD_CE);
}

/*-----------------------------------------------------------------------
LCD_write_byte    : 使用SPI接口写数据到LCD

输入参数:data    :写入的数据;
          command :写数据/命令选择;

编写日期          :2004-8-10
最后修改日期      :2004-8-13
-----------------------------------------------------------------------*/
void LCD_write_Data(unsigned char ucWriteData)
{
    unsigned char uci;

  
    GPIOPinWrite(GPIO_PORTC_BASE, LCD_CE,~LCD_CE);

 GPIOPinWrite(GPIO_PORTA_BASE, LCD_DC,LCD_DC);

 for(uci=0;uci<8;uci++)
 {
  if(ucWriteData & 0x80)
  {
  
   GPIOPinWrite(GPIO_PORTC_BASE, LCD_SDIN,LCD_SDIN);
    }
  else
  {
  
   GPIOPinWrite(GPIO_PORTC_BASE, LCD_SDIN,~LCD_SDIN);
    }
  
  GPIOPinWrite(GPIO_PORTA_BASE, LCD_SCLK,~LCD_SCLK);
  ucWriteData = ucWriteData << 1;
 
  GPIOPinWrite(GPIO_PORTA_BASE, LCD_SCLK,LCD_SCLK);
 }


 GPIOPinWrite(GPIO_PORTC_BASE, LCD_CE,LCD_CE);
}
/*-----------------------------------------------------------------------
LCD_set_XY        : 设置LCD坐标函数

输入参数:X     -83
          Y       :0-5

编写日期          :2004-8-10
最后修改日期      :2004-8-10
-----------------------------------------------------------------------*/
void LCD_set_XY(unsigned char X, unsigned char Y)
{
    LCD_write_CMD(0x40 | (Y & 0X07));  // column
    LCD_write_CMD(0x80 | (X & 0X7F));           // row
}

 

/*-----------------------------------------------------------------------
LCD_clear         : LCD清屏函数

-----------------------------------------------------------------------*/
void LCD_Clear(void)
{
 uint uii;

 LCD_set_XY(0,0);
 for(uii=0; uii<c_Lcd_Max_x * c_Lcd_Max_y; uii++)
 {
  LCD_write_Data(0x00);
 }
 
}


void LCD_Init(void)
  {

   
 GPIOPinWrite(GPIO_PORTC_BASE, LCD_CE,~LCD_CE);
 
    GPIOPinWrite(GPIO_PORTC_BASE, LCD_RST,~LCD_RST);
 
 delay_1us();
  
    GPIOPinWrite(GPIO_PORTC_BASE, LCD_RST,LCD_RST);
 
    delay_1us();

    delay_1us();

    LCD_write_CMD(0x21); // 使用扩展命令设置LCD模式
   LCD_write_CMD(Nokia5110_vot_set);
    LCD_write_CMD(0x06); // 温度校正
    LCD_write_CMD(0x13); // 1:48
    LCD_write_CMD(0x20); // 使用基本命令
    LCD_Clear();         // 清屏
    LCD_write_CMD(0x0c); // 设定显示模式,正常显示
       
     
 GPIOPinWrite(GPIO_PORTC_BASE, LCD_CE,LCD_CE);
  }


/*-----------------------------------------------------------------------
LCD_write_char    : 显示英文字符

输入参数:c       :显示的字符;

编写日期          :2004-8-10
最后修改日期      :2004-8-10
-----------------------------------------------------------------------*/
void LCD_write_char(unsigned char c)
{
    unsigned char line;

    c -= 32;

    for (line=0; line<6; line++)
 {
       LCD_write_Data(font6x8[c][line]);
   }
}

/*-----------------------------------------------------------------------
LCD_write_english_String  : 英文字符串显示函数

输入参数:*s      :英文字符串指针;
          X、Y    : 显示字符串的位置,x 0-83 ,y 0-5

编写日期          :2004-8-10
最后修改日期      :2004-8-10   
-----------------------------------------------------------------------*/
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
{
    LCD_set_XY(X,Y);
    while (*s)
    {
   LCD_write_char(*s);
   s++;
   }
}

 

void TestLCD_Nokia5110(void)
{

 LCD_Init(); //初始化液晶   
 LCD_Clear();
     while(1) 
    {
  LCD_write_english_string(0,0,"NOKIA 5110 LCD");
  Delay(100);
  LCD_write_english_string(0,2,"Designed by :");
  Delay(100);
  LCD_write_english_string(0,3,"  DDLLXXRR ");
  Delay(100);

  LCD_write_english_string(0,5," Very Good!");
  Delay(1000);

  LCD_Clear();
  Delay(100);
  }
}

void init(void)
{
    //SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
    //               SYSCTL_XTAL_6MHZ);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
 GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 );
 GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);


}

 

 

ADC部分:

 

 

#include <LM3Sxxx.H>
#include <systick.h>  
#include <adc.h>
#include <stdio.h>
#define ADCSequEnable ADCSequenceEnable
#define ADCSequDisable ADCSequenceDisable
#define ADCSequConfig ADCSequenceConfigure
#define ADCSequStepConfig ADCSequenceStepConfigure
#define ADCSequDataGet ADCSequenceDataGet
tBoolean ADC_EndFlag = false; // 定义ADC转换结束的标志
extern void init(void);
extern void LCD_Init(void);
extern void LCD_write_english_string(unsigned char X,unsigned char Y,char *s);
unsigned long ulVal;

//  防止JTAG失效
void jtagWait(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);          //  使能KEY所在的GPIO端口
GPIOPinTypeGPIOInput(GPIO_PORTC_BASE,GPIO_PIN_4);     //  设置KEY所在管脚为输入
if (GPIOPinRead(GPIO_PORTC_BASE,GPIO_PIN_4) == 0x00)  //  若复位时按下KEY,则进入
    {
       while(1);                             //  死循环,以等待JTAG连接
    }
  SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOC);   //  禁止KEY所在的GPIO端口
}
// ADC初始化
void adcInit(void)
{
SysCtlLDOSet(SYSCTL_LDO_2_75V);    //配置PLL前需将LDO电压设置为2.75V                   
        SysCtlClockSet(SYSCTL_USE_PLL |    // 系统时钟设置,采用PLL                         
        SYSCTL_OSC_MAIN |                  // 主振荡器         
  SYSCTL_XTAL_6MHZ |                 // 外接6MHz晶振        
  SYSCTL_SYSDIV_4);        // 分频结果为50MHz

SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC); // 使能ADC模块
SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); // 设置ADC采样速率
ADCSequDisable(ADC_BASE, 0); // 配置前先禁止采样序列
// 采样序列配置:ADC基址,采样序列编号,触发事件,采样优先级
ADCSequConfig(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);
// 采样步进设置:ADC基址,采样序列编号,步值,通道设置
ADCSequStepConfig(ADC_BASE, 0, 0, ADC_CTL_CH0 |
ADC_CTL_END |
ADC_CTL_IE);
ADCIntEnable(ADC_BASE, 0); // 使能ADC中断
IntEnable(INT_ADC0); // 使能ADC采样序列中断
IntMasterEnable( ); // 使能处理器中断
ADCSequEnable(ADC_BASE, 0); // 使能采样序列
}
// ADC采样
unsigned long adcSample(void)
{
unsigned long ulValue;
ADCProcessorTrigger(ADC_BASE, 0); // 处理器触发采样序列
while (!ADC_EndFlag); // 等待采样结束
ADC_EndFlag = false; // 清除ADC采样结束标志
ADCSequDataGet(ADC_BASE, 0, &ulValue); // 读取ADC转换结果
return(ulValue);
}
// 主函数(程序入口)
int main(void)
{
unsigned char i;

char cBuf[8];
jtagWait( ); // 防止JTAG失效,重要!
init();   //管脚初始化
LCD_Init();      //LCD5110初使化
SysTickEnable( ); // 使能SysTick计数器
adcInit( ); // ADC初始化

LCD_write_english_string(0,1,"the volat is:");
for (;;)
{
ulVal = adcSample( ); // ADC采样
ulVal = (ulVal *3000UL)/1024UL; // 转换成电压值
 for(i=0;i<8;i++)
 {
      cBuf = 32;   //把不显示的地方添空格
 }
cBuf[6]='V'; //显示伏
cBuf[2]='.'; //显示点
 for(i=0;i<10;i++)          //从数组末开始存储
      {   
            if(i==3)
   {
            ;
     }
   else
   {
     cBuf[5 - i] = (ulVal % 10) + 0x30;   //从末位开始取
        ulVal /= 10;                     //截取末位
            }
   if(ulVal==0)
    break;
   }

LCD_write_english_string(0,3,cBuf);
SysCtlDelay(1500);//* (SysTickValueGet( ) / 3000)); // 延时约1500ms
}
}
// ADC采样序列0的中断
void ADC_Sequence_0_ISR(void)
{
unsigned long ulStatus;
ulStatus = ADCIntStatus(ADC_BASE, 0, true); // 读取中断状态
ADCIntClear(ADC_BASE, 0); // 清除中断状态,重要
if (ulStatus != 0) // 如果中断状态有效
{
ADC_EndFlag = true; // 置位ADC采样结束标志
}
}


 

程序打包:

myADC5110.zip (5.28 KB, 下载次数: 78)

 

[ 本帖最后由 ddllxxrr 于 2011-6-9 19:42 编辑 ]

最新回复

串型的LCD配811不错! 可以做中文菜单了!  详情 回复 发表于 2011-6-9 21:32
 
点赞 关注
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr

回复
举报

4138

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
不错支持一下哈哈哈
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

板凳
 
串型的LCD配811不错!

可以做中文菜单了!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表