清明放假这3天把全部精力都用在做电路板和调试程序上了。这就是整个系统的全部零件,
一个MC9S08LL16的最小系统,一个8*24段式LCD(拣破烂拣的),一个usb锂电池充电器,一块手机li电池,一个DC/DC电路(LINEAR的方案,空载电流10uA),还有发射部分的mcu ,本打算用C8051F来做,后来一想虽然C8051F不错,但功耗方面怎么也比不上430,于是又做了2块MSP430的板子,用来驱动NRF24L01,这样就天衣无缝拉。把功耗做到最低,LCD的驱动真不好弄,没有中文资料,弄了10多个小时才弄出来。另外还有一点,LL16的LCD驱动居然带对比度控制,不错。
接下来的任务是学习MSP430,对430了解一点,计划先用430驱动NRF24L01吧,明天就上班了,没多少时间了,过几天在更新blog。
程序如下:
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#include <string.h> /* include peripheral declarations */
/////////////////////////////////////////////////////////////////////////////////////////
// Peripheral Init
//
--------------------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////////////////
void Sys_Peripheral_Init(void){
SOPT1 = 0x63; //disable cop. enable stop.
SPMSC1 = 0x00; //LVD disabled
// For Stop2
// SPMSC2_PPDC = 1;
IRQSC_IRQPE =1;
////////////////////////////////////////////////////////////////////////////
// Clock Init ICS
////////////////////////////////////////////////////////////////////////
ICSC2 = 0x07;
ICSC1 = 0x00;
////////////////////////////////////////////////////////////////////////////
// Init GPIO
////////////////////////////////////////////////////////////////////////
/* PTADD = 0x3F;
PTBDD = 0xFF;
PTCDD =0x7f;
PTDDD = 0xFF;
PTEDD =0xff;
PTAD = 0x00;
PTBD = 0x00 ;
PTCD =0x00;
PTDD = 0x00;
PTED =0x00;
*/
////////////////////////////////////////////////////////////////////////////
// Init LCD
////////////////////////////////////////////////////////////////////////
LCDPEN0 = 0xFF;
LCDPEN1 = 0xFF;
LCDPEN2 = 0xFF;
LCDPEN3 = 0xFF;
//Enable all LCD Pins
/*
//Enable Back Plane Pins
LCDBPEN0 = 0xDB;
// 1101 1011
LCDBPEN1 = 0x03;
// 0000 0011
*/
LCDBPEN0 = 0xFF;
LCDBPEN1 = 0x0;
// LCDBPEN2 = 0x0;
// LCDBPEN3 = 0x0;
//Set Back Planes
LCDWF0 = 0x01;
LCDWF3 = 0x02;
LCDWF6 = 0x04;
LCDWF9 = 0x08;
LCDWF1 = 0x10;
LCDWF7 = 0x20;
LCDWF4 = 0x40;
LCDWF8 = 0x80;
//Front plane data
SetDisplay();
///LCD Control registers
LCDRVC = 0x8F;
LCDSUPPLY = 0x83;
LCDC0 =
0xA7;
//Set up blink mode
LCDBCTL_BRATE =4;
//LCDBCTL_BLINK = 1;
}
////////////////////////////////////////////////////////////////////////////
// Main Routine
////////////////////////////////////////////////////////////////////////
void main(void)
{
Sys_Peripheral_Init();
// SetDisplay();
// ClearDisplay();
LCDWF0 = 0x01;
LCDWF1 = 0x02;
LCDWF2 = 0x04;
LCDWF3 = 0x08;
LCDWF4 = 0x10;
LCDWF5 = 0x20;
LCDWF6 = 0x40;
LCDWF7 = 0x80;
LCDWF8 = 0x5B; //E
LCDWF9 = 0x5B; //E
LCDWF10 = 0x0;
LCDWF11 = 0x0;
LCDWF12 = 0x0;
LCDWF13 = 0x0;
LCDWF14 = 0x0;
LCDWF15 = 0x5A;
//F
LCDWF16 =
0x0;
LCDWF17 = 0x77;
//O
LCDWF18 =
0x53; //C
LCDWF19 =
0x37; //U
LCDWF20 =
0x5D; //S
LCDWF21 = 0x0;
LCDWF22 = 0x0;
LCDWF23 = 0x0;
LCDWF24 = 0x0;
LCDWF25 = 0x0;
LCDWF26 = 0x0;
LCDWF27 = 0x0;
LCDWF28 = 0x0;
LCDWF29 = 0x0;
LCDWF30 = 0x0;
LCDWF31 = 0x0;
for(;;);
}