打印

用430那块板子作一个电池供电的LCD显示仪表

[复制链接]
818|7
手机看帖
扫描二维码
随时随地手机跟帖
沙发
liliang9554|  楼主 | 2014-10-18 21:54 | 只看该作者
我的程序,请大侠们有时间帮我看一下,是什么问题?应该怎么去修改?
//******************************************************************************
//******************************************************************************
#include  <msp430x42x0.h>
// LCD segment definitions.
#define d 0x80
#define e 0x40
#define g 0x20
#define f 0x10
#define h 0x08
#define c 0x04
#define a 0x01
#define b 0x02
const char char_gen[] = {                   // definitions for digits
  a+b+c+d+e+f,                              // Displays "0"
  b+c,
  a+b+g+e+d,                                      // Displays "1"
  a+b+d+c+g,                                // Displays "2"
  b+c+f+g,                                // Displays "3"
  a+f+g+c+d+h,                                  // Displays "4"
  a+f+e+d+c+g,                                // Displays "5"
  a+b+c,                              // Displays "6"
  a+b+c+d+e+f+g,                                 // Displays "7"
  a+b+c+d+f+g                       // Displays "9"
};
unsigned int num=0;
volatile unsigned int i;                  // Use volatile to prevent removal
unsigned int result; // by compiler optimization
unsigned int index;
unsigned char dis_buf[5];
unsigned char n;
void lcd()
{
   
   dis_buf[0]=result/10000%10;
   dis_buf[1]=result/1000%10;
   dis_buf[2]=result/100%10;
   dis_buf[3]=result/10%10;
   dis_buf[4]=result%10;
   
   for (n=0; n<5; ++n)                      // Display "0123456"
   LCDMEM[n] = char_gen[dis_buf[n]];
  
}
//******************************************************************************
//******************************************************************************

void main(void)
{
   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  FLL_CTL0 |= XCAP18PF;                     // Set load cap for 32k xtal
   for (i = 0; i < 10000; i++);              // Delay for 32 kHz crystal to
   
  LCDACTL = LCDON + LCD4MUX + LCDFREQ_128;  // 4mux LCD, ACLK/128
  LCDAPCTL0 = 0x0F;                         // Segments 0-13
  P5SEL  = 0x1C;    // Set COM pins for LCD
  
   for( n = 0; n <20 ; n ++)
  {
    LCDMEM[n] = 0;                          // Clear LCD
   }
  
   index=0;
   num=0;
   
  P1DIR |= 0x01;                            // Set P1.0 as output
  BTCTL = BTDIV + BT_fCLK2_DIV16;           // ACLK/(256*16)
  IE2 |= BTIE;                              // Enable BT interrupt
  while(1)
  {
    SD16CTL = SD16REFON+SD16SSEL1;            // 1.2V ref, SMCLK
    SD16CCTL0 |= SD16SNGL;                    // Single conv
    for (i = 0; i < 0x3600; i++);             // Delay for 1.2V ref startup                                    
    SD16CCTL0 |= SD16SC;                     // Set bit to start conversion
    while ((SD16CCTL0 & SD16IFG)==0);       // Poll interrupt flag
        result = SD16MEM0;   
if (++index == 10)
    {
   
    index = 0;                            // SET BREAKPOINT HERE
    }
    _NOP();
    SD16CTL=0x00;
   IE2=0x80;
    _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3, enable interrupts
  }
}
// Basic Timer Interrupt Service Routine
#pragma vector=BASICTIMER_VECTOR
__interrupt void basic_timer_ISR(void)
{
  P1OUT ^= 0x01;                             // Toggle P1.0
  num=num+1;
  if(num>10)
  {
   num=0;
   lcd();
   for (i = 0; i < 0x9000; i++);             // Delay   
  _BIC_SR_IRQ(LPM3_bits);
  IE2=0x00;
  }
}

使用特权

评论回复
板凳
zhenykun| | 2014-10-18 21:55 | 只看该作者
是不是你扫描的频率不够快啊?

使用特权

评论回复
地板
dengdc| | 2014-10-18 21:55 | 只看该作者
这个段式的LCD,一个是扫描时间,还要看硬件连接了

使用特权

评论回复
5
lizye| | 2014-10-18 21:58 | 只看该作者
你有没有加消影程序  就是一个数码管显示之后,立马把这段数码管关闭。这个必须要加  我以前用C51时遇到过  仅供参考  呵呵

使用特权

评论回复
6
dengdc| | 2014-10-18 21:58 | 只看该作者
建议在定时器里面执行

使用特权

评论回复
7
liliang9554|  楼主 | 2014-10-18 22:00 | 只看该作者
哦,我知道了,多谢大家啊

使用特权

评论回复
8
liliang9554|  楼主 | 2014-10-18 22:00 | 只看该作者
结贴了,晚安

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

950

主题

11568

帖子

6

粉丝