Đánh giá chủ đề:
  • 59 Vote(s) - Trung bình 2.83
  • 1
  • 2
  • 3
  • 4
  • 5
Giao tiếp màn hình OLED 168x64 với MSP430
Bài viết: #1
Hiển thị OLED cho Launchpad. Đó là 128 * 64 OLED dựa trên trình điều khiển SSD1306. giao tiếp qua SPI của MSP430G2452.

[Image: file.php?id=1097&sid=154c982b2d4b9fe8c23b0ed836e09119]

[Image: file.php?id=1098&sid=154c982b2d4b9fe8c23b0ed836e09119]

Schematic

[Image: 2712201111441424.bmp]
Code chương trình
PHP Code:
#include <msp430g2452.h>
#include "Libraries\Oled\Oled_SSD1306.h"
#include "Libraries\Oled\Oled_Printf.h"
#include "Libraries\Oled\Oled_Config.h"
#include "main.h"


unsigned long g_systemCounter=0;
unsigned char hours 0;
unsigned char minutes 0;
unsigned char seconds 0;
unsigned char hseconds 0;
              
void main(void)
{
   
// Stop WDT
   
WDTCTL WDTPW WDTHOLD;   

   
// Set P1.0 as output for LED
   
P1DIR |= 0x01;

   
// Set DCO range
   
BCSCTL1 CALBC1_16MHZ;

   
// Set DCO step + modulation 
   
DCOCTL CALDCO_16MHZ

   
// Timer 0 interrupt Enbaled
   
TA0CCTL0 |= CCIE;      

   
// Timer 0 clock source : SMCLK, sourced by the DCO
   
TA0CTL |= TASSEL_2;

   
// Timer 0 Mode : Count to period
   
TA0CTL |= MC_1;

   
// Load period register for a 1ms tick : 1e-3*16e6
   
TACCR0 =  16000;


   
// Setup USI SPI.
   // + USILSB; // Out & clk enable, SPI Master
   
USICTL0 |= USIPE6 USIPE5 USIMST USIOE
   
// Counter interrupt, flag remains set
   
USICTL1 |= USICKPH;
   
// /? SMCLK
   
USICKCTL USIDIV_3 USISSEL_2;         
   
// USI released for operation
   
USICTL0 &= ~USISWRST;                 
   
// Enable 16 bit    
   
USICNT USI16B;                           
   
// Load 9 bits into counter.
   
USICNT |= 9;   

   
// Setup the OLED pins
   
SSD1306PinSetup();
   
   
// Initialize the OLED
   
SSD1306Init();

   
// Clear the OLED screen
   
Fill_RAM(0x00);    
  
   
/* Write text on the OLED  using a font at a particular location
    * Format:OLED_PrintfSetColumnRow(
    *        unsigned char column,<-Column to start displaying (0-127)
    *        unsigned char row,   <-Row to start display(0-7) 
    *        unsigned char FONT_TYPE <-Large or small font.
    *        )
    */
   /* Example for test font 14(width)x15(height)
    * OLED_PrintfSetColumnRow(0,7,LARGE_FONT);
    *  0  : Start from column 0 
    *  7  : Start from row 7. Rows start from 0 at the bottom to 7 
    *          at the top.
    *  LARGE_FONT  : Type of font to display. There are two types of font
    *                     defined in OLED_Config.h
    */
    
OLED_PrintfSetColumnRow(0,7,LARGE_FONT);
    
   
/* Write a string
    * Format:OLED_Printf(
    *        string <-string to be displayed
    *        )
    */
   /* Example for test font 14(width)x15(height)
    * OLED_Printf("   The");
    *  The  : Any string you would like to display. 
    */    
    
OLED_Printf("   The");  
    
OLED_PrintfSetColumnRow(7,4,LARGE_FONT);
    
OLED_Printf("Terminal");     
    
    
// Delay for 4 second
    
delay_cy_1_sec();    
    
delay_cy_1_sec();
    
delay_cy_1_sec();
    
delay_cy_1_sec();
    
    
// Clear the screen
    
Fill_RAM(0x00);
    
    
OLED_PrintfSetColumnRow(0,7,SMALL_FONT);
    
OLED_Printf(" T H E  T E R M I N A L");     
    
OLED_PrintfSetColumnRow(0,3,SMALL_FONT);
    
OLED_Printf("  su mo tu we th fr sa");    
  
   
// Enter LPM0 w/ interrupt
   
_BIS_SR(LPM0_bits GIE);              
}


// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
    
g_systemCounter++;
 
   
// Check if we reached 1 second.
   
if (g_systemCounter >=1000)
   {        
      
seconds++;
      
hseconds 0;

      if(
seconds>=60)
      {
      
minutes++;
      
seconds 0;
      }

      if(
minutes >=60)
      {
      
hours++;
      
minutes 0;
      }
      
      
OLED_PrintfSetColumnRow(7,1,LARGE_FONT);
       
OLED_Printf("%d%d:%d%d:%d%d"hours/10
                                               
hours%10,
                                               
minutes/10,
                                               
minutes%10,
                                               
seconds/10,
                                               
seconds%10);       

      
// Reset system counter.
      
g_systemCounter 0;
   }
}

                           
void delay_cy_1_secvoid )
{
    
// 200ms at 16Mhz = 3200000 ticks
    
__delay_cycles(3200000);
    
__delay_cycles(3200000);
    
__delay_cycles(3200000);
    
__delay_cycles(3200000);
    
__delay_cycles(3200000);



Các tập tin thư viện chương trình đính kèm tải ở đây:
.zip   OLED.zip (Kích thước: 10.33 KB / Tải về: 10,316)
You are not allowed to view links. Register or Login to view.
Trả lời
Bài viết: #2
Cảm ơn bạn nhiều ha!
Trả lời
Bài viết: #3
link này down hoài k được bạn ơi
Trả lời
Bài viết: #4
vấn download bình thường!
Trả lời
Bài viết: #5
Kiếm đâu ra cái màn hình đó thế anh?. À anh biết chơi với cái màn hình LCD của điện thoại ko?. Ở nhà e có 1 cái của noki ủ trong tủ chưa biết interface thế nào hết1)
Trả lời
Bài viết: #6
Màn hình này bạn có thể mua tại các của hàng bán thiệt bị điện tử dành riêng cho điện thoại. ở Cần Thơ thì có thể mua ở viễn thông PT trên đường Cách Mạng Tháng 8.
website: www.eplusi.net
Phone: 0907 042 549
Mail: info@eplusi.net
Trả lời


Đi tới chuyên mục:


Thành viên đang xem chủ đề: 1 Khách