久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2060|回復: 0
打印 上一主題 下一主題
收起左側

MSP430f5529LCD顯示

[復制鏈接]
跳轉到指定樓層
樓主
ID:597174 發表于 2019-8-7 19:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/****************************************************************************************
*  @brief: LCD驅動,S1,S2,S3按鍵,滾輪操作
*  @files: main.c
*  @date:  2015-04-24
*  @athour:zhouhai
*  @pin:
*         LCD:P3.2   <--->  SCK
*             P3.0   <--->  SDA
*             P2.6   <--->  CS
*             P3.7   <--->  CD
*             P8.2   <--->  RES
*                     按鍵:P1.6   <--->  Button1
*             P2.2   <--->  Button2
*             P2.3   <--->  Button3
*                    滾輪:P6.0   <--->  ADC
****************************************************************************************/
#include <msp430f5529.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdint.h>
#include "sysclk.h"
#include "grlib.h"
#include "Template_Driver.h"
#include "wheel.h"
#include "graph_extend.h"
#include "button.h"
#include "math.h"
static char table[]={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
//static unsigned long V_table[]={ 110,109,108,107,106,105,104,103,102,101,100,
//                                99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,
//                                84,83,82,81,80,79,78,77,76,75,74,73,72,71};
static unsigned long V_table[]={56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,
                                 40,39,38,37,36,35,34,33,32,31,30,29,28 };
#define LCDPIEXL        32          //單像素點對應的AD采樣值  4096/128
unsigned long ADC_Signal;
//unsigned char i;
tContext g_sContext;
/*
* 數據類型轉換,符點型轉換為字符型
*/
void num2char(char *str, double number, uint8_t g, uint8_t l)
{
    uint8_t i;
    int temp = number/1;
    double t2 = 0.0;
    for (i = 1; i<=g; i++)
    {
        if (temp==0)
            str[g-i] = table[0];
        else
            str[g-i] = table[temp%10];
        temp = temp/10;
    }
    *(str+g) = '.';
    temp = 0;
    t2 = number;
    for(i=1; i<=l; i++)
    {
        temp = t2*10;
        str[g+i] = table[temp%10];
        t2 = t2*10;
    }
    *(str+g+l+1) = '\0';
}
/*
* 主函數
*/
int main(void)
{
      float C_Voltage = 0;  //當前電壓
      float B_Voltage = 0;  //靠近峰的上一次電壓
      float L_Voltage = 3.3;  //靠近谷的上一次電壓
      float Vmax = 0;
      float Vmin = 0;
      float Vpp ;
      char str1[15];
      char str2[15];
      char str3[15];
   //   int count=0,n,j;   //n用于定位坐標Y軸,count用于計數實現一定時間對電壓的刷新
   //   int nn[240]={0},tt[150]={0};
     // int count_n=0,count_draw=0,VV_table;    //count_n對存入nn值的位置進行修改,count_draw對畫圖的X,Y的點進行修改

      WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer
      SysClk_Init();              //設置時鐘為25Mhz
      LCD_WheelInit();    //滾輪初始化
      LCD_ButtonInit();   //按鍵初始化
    /*
     * AD轉換設置
     */
      P6SEL=BIT0;   //P6.0采集信號
      ADC12CTL0=ADC12SHT02+ADC12ON;//采樣保持時間控制位所需ADC12CLK個數16, 內部參考電壓打開
      ADC12CTL1=ADC12SHP;  //+ADC12CONSEQ_1;//SHI信號上升沿觸發采樣定時器,采樣模式選擇序列通道單次轉換模式
      ADC12CTL0|=ADC12ENC;   //使能AD轉換
      TA0CCTL0=CCIE;//中斷使能
      TA0CCR0=1000;   //1000大約為0.94ms (100時為2.038V,1000時為)
      TA0CTL=TASSEL_2+MC_1+TACLR;   //SMCLK,定時器清楚控制位,定時器中斷使能
    //-----顯示庫函數初始化-----
    Template_DriverInit();
    GrContextInit(&g_sContext, &g_sTemplate_Driver);    //
    GrContextForegroundSet(&g_sContext, ClrWhite);       //ClrAliceBlue顏色庫中調用
    GrContextBackgroundSet(&g_sContext, ClrBlack);      //
    GrContextFontSet(&g_sContext, &g_sFontFixed6x8);    //g_sFontFixed6x8字體定義
    GrClearDisplay(&g_sContext);
   // GrStringDraw(&g_sContext,"PhaseLockedAmplifier",AUTO_STRING_LENGTH,0,0,OPAQUE_TEXT);      //LCD上繪制字符串
    GrStringDraw(&g_sContext,"VMax(V):",AUTO_STRING_LENGTH,0,0,OPAQUE_TEXT);
    GrStringDraw(&g_sContext,"VMin(V):",AUTO_STRING_LENGTH,0,9,OPAQUE_TEXT);
    GrStringDraw(&g_sContext,"VPP(V):",AUTO_STRING_LENGTH,0,20,OPAQUE_TEXT);
    //每8個像素為一行
    GrFlush(&g_sContext);                                       //刷新LCD
    _enable_interrupt();                //使能中斷
while(1)
      {
          ADC12CTL0 |=ADC12SC;
          C_Voltage = (3.3/4096)*ADC_Signal;  //采樣得到的電壓值,(字符型)
          tt[count_n]=count_n;    //X軸的位置
          n=1+(log(C_Voltage)/log(2));  //換算得到Y對應位置
         VV_table =V_table[n];
          nn[count_n] = VV_table;        //修改數組的位置

          count_n++;
          if(B_Voltage<C_Voltage)   //B_Voltage上一次的電壓值
                    {
                         B_Voltage=C_Voltage;
                    }
          else
          {
              Vmax=B_Voltage;
          }
          if(L_Voltage>C_Voltage)
           {
                        L_Voltage=C_Voltage;
           }
          else
          {
              Vmin = L_Voltage;
          }
                  Vpp=Vmax-Vmin;
                  num2char(str1, Vmax, 3,3);    //浮點型轉換為字符型
                  GrStringDraw(&g_sContext,str1,AUTO_STRING_LENGTH,64,0,OPAQUE_TEXT);
                  //__delay_cycles(750); //延時75us使參考電壓穩定
                  num2char(str2, Vmin, 3,3);    //浮點型轉換為字符型
                  GrStringDraw(&g_sContext,str2,AUTO_STRING_LENGTH,64,9,OPAQUE_TEXT);

                  num2char(str3, Vpp, 3,3);    //浮點型轉換為字符型
                  GrStringDraw(&g_sContext,str3,AUTO_STRING_LENGTH,64,18,OPAQUE_TEXT);
                  GrFlush(&g_sContext);
/*                  count++;   //計數實現一定時間對電壓的刷新
                   if(count>150)
                   {
                        L_Voltage = 3.3;
                        B_Voltage = 0;
                       count=0;
                   }
                   if(count_n>10)
                   {
                       GrStringDraw(&g_sContext,".",AUTO_STRING_LENGTH,tt[count_draw],nn[count_draw],OPAQUE_TEXT);//繪圖
                       count_draw++;
                       GrFlush(&g_sContext);
                   }
                /*   if(count_draw>123)
                   {
                      for(j=0;j<count_draw;j++)
                      {
                          tt[j]=0;
                          nn[j]=0;
                          count_draw=0;
                          count_n=0;
                      }
      }*/
      }
}
/*
* 中斷程序
*/
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void)
{
        while (ADC12CTL1 & ADC12BUSY);   //判斷是否在進行采樣轉換
        ADC_Signal=ADC12MEM0;  //保存AD轉換后的值,自動清除中斷標志位

}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲 欧美 日韩在线 | 欧美精品一区二区三区在线播放 | 91视频一88av | 97国产精品视频人人做人人爱 | 欧美精品一区在线 | 欧美黑人巨大videos精品 | 成人精品影院 | 国产精品一区在线 | 日韩欧美三级在线 | 国产精品久久一区二区三区 | 亚洲男人天堂 | 一区二区三区亚洲 | 91精品无人区卡一卡二卡三 | 欧美大片久久久 | 欧美综合一区二区三区 | 国产精品地址 | 亚洲视频在线观看 | 国产精品精品久久久 | 操人网站 | 爱爱视频在线观看 | 热久久久 | 国精产品一品二品国精在线观看 | 成年人视频免费在线观看 | 久久一二| 欧美一区二区三 | 成人在线精品视频 | 一区二区三区高清 | 欧美一区二区三区久久精品 | 麻豆视频在线免费观看 | 国产九九九 | 欧美1区 | 51ⅴ精品国产91久久久久久 | 999久久久 | 美女三区 | 久久逼逼 | 国产精品99一区二区 | 欧美一区永久视频免费观看 | 人人人人干 | 91秦先生艺校小琴 | 精品久久av | 69电影网 |