搜索
bottom↓
回复: 1

在单片机中,普通的收音机或者电子表的液晶如何定义数组,即0-9

[复制链接]

出0入0汤圆

发表于 2010-5-12 22:58:38 | 显示全部楼层 |阅读模式
我们在做以课题,水果时钟,用430单片机来做,由于要求功耗很低,所以不能用数码管或者1602来显示,不但功耗大,而且有可能无法驱动。我先有一收音机的液晶显示器件,包括数据手册,但手册中说要加方波信号,而且还有不同弓攻击,我不知道如果是这样在单片机中如何定义数组,不知哪位高手懂得一些,指导一下,最好能详细一点,我将不胜感激,我会追加分的。如果需要这个液晶的数据手册的话,我可以发你们。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-2-15 10:48:18 | 显示全部楼层
430单片机可以直接驱动段码液晶(仅限4XX系列)。当然,也可以用外接驱动芯片如HT1621等,很方便的。你是做时钟的,以你的条件,选一种能显示数字和少量符号的液晶就可以啦。数字可以定义为数组,符号一般是独立的。我给一个例子吧

//名称:LCD.C
//功能:测试MSP430FE42X系列的LCD接口
//日期:2011-2-11

#include "msp430xe42x.h"

typedef unsigned char uint8;
typedef signed char int8;
typedef unsigned int uint16;
typedef signed int int16;
typedef unsigned long uint32;
typedef signed long int32;

#define a 0x01
#define b 0x02
#define c 0x10
#define d 0x04
#define e 0x80
#define f 0x20
#define g 0x08
#define h 0x40     //各段定义

//显示代码
//4MUX
const uint8 dispcode[]=
{
  a+b+c+d+e+f,      //0
  b+c,              //1
  a+b+d+e+g,        //2
  a+b+c+d+g,        //3
  b+c+f+g,          //4
  a+c+d+f+g,        //5
  a+c+d+e+f+g,      //6
  a+b+c,            //7
  a+b+c+d+e+f+g,    //8
  a+b+c+d+f+g,      //9
  a,                //下
  g,                //上
  a+g,              //前置1
  d,               //+
  a+g+d,           //1+
};

//函数声明
void init_bt(void);    //初始化BT
void init_lcd(void);   //初始化LCD
void delay(void);      //延时


//主函数
void main(void)
{
  uint8 i;
  uint8 j;
  uint8 *mem_addr;
  
  init_bt();
  init_lcd();
  //测试
  
  mem_addr=(unsigned char*)&LCDM1;
  for(j=0;j<10;j++)
  {
    for(i=0;i<7;i++)
   {
    *(mem_addr+i)=dispcode[j];   //循环显示0~9
   }
  }
  
   for(i=10;i<15;i++)
   {
     *(mem_addr+7)=dispcode;
   }                           //显示前置
   
  for(i=0;i<8;i++)
  {
    *(mem_addr+i)=0xff;     //全亮
  }
  
  for(i=0;i<8;i++)
  {
    *(mem_addr+i)=0;        //全灭
  }
  while(1);  
}


//初始化BT
void init_bt(void)
{
  __disable_interrupt();      //禁止中断
  
  WDTCTL|=WDTPW+WDTHOLD;     //关闭看门狗
  BTCTL|=BTHOLD;             //关闭BT
  BTCTL=BT_fLCD_DIV256;       //256分频驱动LCD
  BTCTL&=~BTHOLD;           //开BT
  IE2|=BTIE;               //允许中断
  
  __enable_interrupt();     //开中断
}

//初始化LCD
void init_lcd(void)
{
  LCDCTL=LCD4MUX
         +LCDSG0_5
         +LCDON;  //4MUX,S0~S31,开LCD
}

//延时
void delay(void)
{
  uint32 t;
  
  for(t=0;t<500000;t++);
}

//BT中断服务子程序
#pragma vector=BASICTIMER_VECTOR
__interrupt void basic_timer(void)
{
  ;
}
这是我刚试验过的MSP430FE425驱动LCD048液晶的程序。希望有用
还有不清楚的,014.bg@163.com
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-28 15:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表