MSP430F單晶片+NOKIA3310手機面板 製作波型顯示器 |
|
1666362
初階會員 ![]() ![]() 發表:66 回覆:124 積分:43 註冊:2004-07-07 發送簡訊給我 |
前一陣子無聊 手上剛好有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; }我是新手 多多指教 ^^ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |