全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1611
推到 Plurk!
推到 Facebook!

MSP430F單晶片+NOKIA3310手機面板 製作波型顯示器

 
1666362
初階會員


發表:66
回覆:124
積分:43
註冊:2004-07-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-15 18:11:19 IP:61.222.xxx.xxx 未訂閱
前一陣子無聊 手上剛好有NOKIA3310手機的的面板 又剛好在玩TI公司出產的MSP430F系列的單晶片 所以就把這兩樣配合起來 【製作波型顯示器】 單晶片的CODE我是用C語言撰寫     當然顯示器不一定要用NOKIA3310的面板(可以去買 一片大約400吧)     用別種面板當然也可以     
 
#include          "msp430x14x.h"        // Standard Equations
#include          "ASCIIFNT.H"
#include          "stdio.h"
#define           LCD_EN    BIT3
#define           LCD_DC    BIT2
#define           LCD_SDA   BIT1
#define           LCD_SCL   BIT0
#define           LCD_port  P2OUT    void LCD_init(void);
void lcddata(unsigned char);
void lcdrow(unsigned char);
void lcdcol(unsigned char);
void lcdcolp(unsigned char);
void delay(void);
int  putchar(int);
unsigned char CX=0;
unsigned char CY=0;    void main(void)
{ 
  unsigned char adcdata;
  int i,j;      WDTCTL = WDTPW WDTHOLD;               // Stop watchdog timer
  P6SEL |= 0x01;                        // Enable A/D channel A0
  ADC12CTL0 = ADC12ON SHT0_2;           // Turn on ADC12, set    sampling time
  ADC12CTL1 = SHP;                      // Use sampling timer
  ADC12CTL0 |= ENC;                     // Enable conversions
   
  P2DIR = LCD_EN   LCD_DC   LCD_SDA  LCD_SCL ;  // DIR = output
  LCD_init();
  CX=0;
  CY=0;
  printf("MSP430F149");
  j=0;
  while (1)
  { 
    ADC12CTL0 |= ADC12SC;               // Start conversion
    //while ((ADC12IFG & ADC12BUSY)==0);
    adcdata = ADC12MEM0 /86 ; //4096/48 = 86
    for(i=0;i<6;i  ){
        lcdrow(i);
        lcdcolp(j);
        if ((adcdata >= i*8) && (adcdata <(i 1)*8))
           lcddata(1 << (adcdata % 8));
        else   
           lcddata(0);
    }   
    //delay();
    if (j   >= 84) 
       j=0; 
  }                           
}     void lcdwr(unsigned char c)
{
  int i;
  unsigned char tb = 0x80;        LCD_port &= ~LCD_EN;
    for (i=0;i<8;i  ) {
        if ((tb & c) == 0) 
           LCD_port &= ~LCD_SDA;
        else   
           LCD_port |= LCD_SDA;
        LCD_port |= LCD_SCL;
        LCD_port &= ~LCD_SCL;
        tb >>= 1;
    }
    LCD_port |= LCD_EN;
}    void lcdcmd(unsigned char c)
{
    LCD_port &= ~LCD_DC;
    lcdwr(c);    
}    void lcddata(unsigned char c)
{
    LCD_port |= LCD_DC;
    lcdwr(c);    
}    void lcdrow(unsigned char x)
{
    x &= 0x07;
    x |= 0x40;
    lcdcmd(x);
}    void lcdcol(unsigned char y)
{
    y <<= 3;
    y |= 0x80;
    lcdcmd(y);
}    void lcdcolp(unsigned char y)
{
    y |= 0x80;
    lcdcmd(y);
}    void LCD_init(void)
{
        LCD_port = ~LCD_SCL;    //  clr     LCDCLK
        lcdcmd(0x21);
        lcdcmd(0x9C);
        lcdcmd(0x20);
        lcdcmd(0x0C);
        lcdcmd(0x40);
        lcdcmd(0x80);
}    void delay(void)
{
   int i;
      for(i=0;i<30000;i  );
}    int putchar(int c) //    ;a=ASCII code     ;DPTR=FONT CODE
{
  unsigned char i;
  
    lcdrow(CY);
    lcdcol(CX);
   
    for(i=0;i<8;i  ) 
       lcddata(asciifnt[c*8 i]);        if(CX   >= 10){
       CX = 0;
       if(CY   >= 6)
          CY = 0;
    }      
  return c;  
}    
我是新手 多多指教 ^^
系統時間:2024-07-05 23:08:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!