12864显示屏菜单程序

发布者:as233632621最新更新时间:2018-01-30 来源: eefocus关键字:显示屏  菜单程序 手机看文章 扫描二维码
随时随地手机看文章

/*34864中文字库*/ 
// 单片机 的连接 
//******************************************************* 
//p3=>数据口 
//p4--控制口 
//p4.0=>rs 
//p4.1=>r/w 
//p4.2=>e 
//p4.4=>psb 
//p4.5=>rst 

//******************************************************* 
//库函数 
//******************************************************* 
#include "MSP430x22x4.h" 
#define keyin    (P2IN&0x0f) 

//*******数组定义*********************************************** 
unsigned char caidan0[]; 
unsigned char caidan1[]; 
unsigned char caidan2[]; 
unsigned char caidan3[]; 
unsigned char caidan4[]; 

//*********函数定义*************************************************** 

void  delay(unsigned int t); //延时函数 
void  delay1(unsigned int m);//延时函数 
int keyprocess(void);//键盘分析函数 
void  transFEData(unsigned char data, char DI);//写命令/数据函数 
void  LCD_mesg1(unsigned char gao,unsigned char di,unsigned char p); 
void  lcd_mesg(unsigned char *p);// 汉字显示函数 
void  Init_Port(void);//端口初始化函数 
void  Init_lcd1(void);//显示汉字初始化程序 
void CLEAR(void);//清屏函数 
void set_caidan3(void); 
void add_fen1(void); 
void add_fen2(void); 
void add_shi1(void); 
void add_shi2(void); 
 void addaoyun22(); 
 void addyue22(); 
 void addri22(); 
 void addnian22(); 

//**************变量定义******************************************* 
unsigned char key[4][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}}; 
unsigned char hang[]={0xef,0xdf,0xbf,0x7f};// 选中行码 p1口状态与之对应 
unsigned char lie[]={0x0e,0x0d,0x0b,0x07};//相应列值 p1口状态与之对应 
unsigned char save=16,a,b,xian,temp;//键盘相关变量 
unsigned char a=3,b=3,c=1,d=1,e=2,f=2,j=11,count=0;//时钟有关变量 
unsigned char nian1=0,nian2=8,yue1=0,ri1=0,yue2=7,ri2=2;//年月日有关变量 
unsigned char kongqi1=13,kongqi2=16,aoyun1=3,aoyun2=6;//其它变量 
//*********************************************************** 
//要显示的字符 
unsigned char caidan0[]="0123456789*:ABC ";//16个字符 
unsigned char  caidan1[]={             
"    菜单选项    "              
"2.日历表        " 
"1.个人小档案    " 
"3.我的志愿      " 
}; 

unsigned char caidan2[]={ 
"姓名: 吴兵      " 
"爱好: 篮球、乒乓" 
"年龄: 21岁      " 
"专业: 应用电子  " 
}; 

unsigned char caidan3[]={   
"20  年  月  日  "   
"空气指数  温馨提"//显示A或B  C 
"北京时间        "//显示时钟  时分秒表 
"示: 距奥运会  天" 
}; 

unsigned char caidan4[]={  
" ************** " 
"** 单片机 高手****"  
"**  成为一个  **" 
" ************** " 
}; 

unsigned char caidan5[]={ 
"                " 
"      ^_^       " 
"    请稍候      " 
"                " 
}; 

//**********************延时函数*************************************************** 
void delay(unsigned int t)           //延时程序 
                   { 
                      unsigned int i,j; 
                      for(i=0;i                         for(j=0;j<14;j++); 
                   } 

//**********************延时函数1*************************************************** 
void  delay1(unsigned int m) 

   unsigned int i,j; 
   for(i=0;i    for(j=0;j<1400;j++); 

//*********************端口初始化函数*************************************************** 
void Init_Port(void) 

   WDTCTL=WDTPW+WDTHOLD;  
   BCSCTL1=CALBC1_1MHz;            //设定DCO为1MHZ 
   DCOCTL=CALDCO_1MHZ; 
    
   TACTL=TASSEL_2+TACLR+MC_1+ID_3;         //定时器A时钟源为MCLK,并清TAR//启动定时器A为增计数模式 
       CCR0 =45000;                      //计数值为45000个ACLK周期 
         CCTL0|=CCIE;   
   P3DIR=0XFF;//作数据口 
   P3SEL=0; 
   P3OUT=0Xff; 
   
   P4DIR=0XFF;//作控制口 
   P4SEL=0; 
   P4OUT=0Xff; 
    
    P2DIR=0XF0;//P1低4位输入  作键盘输入 
  P2SEL=0; 
  //P2OUT=0X00; 
    
   _BIS_SR(GIE);//两个开总中断的方法随便用哪一个 
         _EINT();// 

//*********************显示汉字初始化程序************************************************** 
void   Init_lcd1(void) 

  delay1(40); 
  P4OUT|=BIT4; 
  delay(1); 
  P4OUT&=~BIT5; 
  delay(1); 
  P4OUT|=BIT5; 
  delay(10); 
   
  transfEDAta(0x30,0); 
  delay(100); 
   transfedata(0x30,0);   
   delay(37); 
    transfedata(0x08,0);//display on control 
    delay(100);     
    transfedata(0x10,0);//光标设置 
    delay(100); 
    transfedata(0x0c,0);//开显示 
    delay(100); 
     transfedata(0x01,0);//清屏 
    delay(500); 
    transfedata(0x06,0);//光标从右向左加1移动 
    delay(100); 

//**********add1****************************************** 
void add_fen1(void) 

  c++; 
if(c>9)c=0;return; 

//*******************************************// 
void add_fen2(void) 
{d++; 
if(d>5)d=0;return;} 
//*******************************************// 
void add_shi1(void) 
{e++; 
if(e>9)e=0; 
if(f==2&&e>3) 
{f=e=0;} 
return;} 
//*******************************************// 
void add_shi2(void) 
{f++; 
if(f>2)f=0; 
if(f==2&&e>3) 
{f=e=0;} 
  return; 


//**************************************** 
void addnian22(void) 

  nian2++; 
  if(nian2>9) 
  {nian2=0;nian1++;} 
  if(nian1==9&&nian2==9) 
  {nian1=nian2=0;} 

//************************ 
void addyue22(void) 

  yue2++; 
  if(yue2>9) 
  {yue2=0;yue1++;} 
  if(yue2>2&&yue1==1) 
  {yue1=yue2=0;} 

//************************************* 
void addri22(void) 

  ri2++; 
  if(ri2>9) 
  {ri2=0;ri1++;} 
  if(ri2>0&&ri1==3) 
  {ri1=ri2=0;} 

//******************************************** 
 void aoyun22(void) 
 { 
    aoyun2++; 
    if(aoyun2>9) 
  {aoyun2=0;aoyun1++;} 
  if(aoyun2==9&&aoyun1==9) 
  {ri1=ri2=0;} 


//********************基本设置******************************************// 
//**********************************************************************// 
//********************算法**********************************************// 


//*****************************定时中断函数*********************************************// 

  #pragma vector =TIMERA0_VECTOR          //ccr0中断服务 
__interrupt void ta1_isr(void) 

  count++; 
  CCTL0&=~CCIFG;  
  if(count!=3)return;  
  count=0; 
    a++; 
    if(a>9) 
    {a=0;b++; 
        if(b>5) 
        {b=0;c++; 
            if(c>9) 
                { 
                c=0;d++; 
                  if(d>5) 
                  {d=0;e++; 
              if(e>9) 
              { 
              e=0;f++; 
            if(f==2&&e==4) 
            { 
            a=b=c=d=e=f=0;//ab秒  cd分  ef时  
            }      CCR0 =45000; 
        }      CCR0 =45000; 
    }      CCR0 =45000; 
}      CCR0 =45000; 
}      CCR0 =45000; 
}      CCR0 =45000; 


//********写命令/数据***************************************************    
void transfedata(unsigned char data, char DI) 

  P4OUT&=~BIT1; 
  if (DI==1)P4OUT|=BIT0; 
  else P4OUT&=~BIT0; 
  delay(10); 
  P4OUT|=BIT2; 
  P3OUT=data; 
   delay(10); 
  P4OUT&=~BIT2;   
  delay(10); 


//***************************清屏*************************************/ 
void CLEAR(void) 

P4OUT&=~BIT0;//RS=0; 
P4OUT&=~BIT1;//RW=0; 
P4OUT|=BIT2;//E=1; 
P3OUT=0x01;//P1=0x01; 
delay(100); 
P4OUT&=~BIT2;//E=0; 



//***************set_caidan3菜单3设置**************************************************** 
void set_caidan3(void) 

      lcd_mesg1(nian1,nian2,0x81);//年 
      lcd_mesg1(yue1,yue2,0x83);//月 
      lcd_mesg1(ri1,ri2,0x85);//日 
      lcd_mesg1(kongqi1,kongqi2,0x8c);//空气指数标志 
      lcd_mesg1(f,e,0x94);//时钟时 
      lcd_mesg1(j,d,0x95);//时钟分 
      lcd_mesg1(c,j,0x96);//时钟分 
      lcd_mesg1(b,a,0x97);//时钟秒 
      lcd_mesg1(aoyun1,aoyun2,0x9e);//奥运倒计时   


//****************lcd_mesg1定点显示********************************************************* 
void  lcd_mesg1(unsigned char gao,unsigned char di,unsigned char p) 

  transfedata(p,0); 
  delay(10);   
    transfedata(caidan0[gao],1); 
    transfedata(caidan0[di],1); 


//******************lcd_mesg显示界面***************************************** 
void  lcd_mesg(unsigned char *p) 

  unsigned char i; 
  transfedata(0x80,0); 
  delay(10); 
  for(i=0;i<64;i++) 
  { 
    transfedata(*p,1); 
    p++; 
  } 


//*******************键盘分析函数***************************************// 

int keyprocess(void) 

  if(keyin!=0x0f){ 
     delay1(10);//延时去抖动  
     P2OUT = 0x00;          //p2口输出全0 
     if(keyin!=0x0f){ 
       for(a=0;a<4;a++)//有键按下 
       { P2OUT=hang[a]; 
            if(keyin != 0x0f)break; //检测该行有键按下则退出循环        
       }     
        
       for(b=0;b<4;b++) 
       { 
         if(keyin==lie[b]) 
         { 
           save=key[a][b];break;        //检测该列有键按下则退出循环 
         } 
       }    
 P2OUT = 0x00; 
     }}} 

//************************************************** 
void main(void) 
{     
    Init_Port(); 
    Init_lcd1(); //调用LCD字库初始化程序 
    CLEAR();//清屏 
    delay(50);            //大于300uS的延时程序   
    lcd_mesg(caidan1);//显示第一屏    
     delay(50);  
     
    for(;;){ 
     
     while(1) 
     {keyprocess(); 
     if(save==0){xian=0;lcd_mesg(caidan1);}//显示界面--菜单选项 
     if(save==1){xian=1;lcd_mesg(caidan2);}//显示界面1.个人小档案 
     if(save==2){xian=2;CCTL0 = CCIE;lcd_mesg(caidan3);}//显示界面2.日历表  
     if(save==3){xian=3;lcd_mesg(caidan4);}//显示界面3.我的志愿   
      save=16; 
     if(xian==2) 
     { 
       set_caidan3();//设置菜单3 
      delay(100); 
     } 
     }}} 


关键字:显示屏  菜单程序 引用地址:12864显示屏菜单程序

上一篇:msp430单片机18B20温度计
下一篇:msp430用ADC10来测片内温度两极管的电压

推荐阅读最新更新时间:2024-03-16 15:53

基于51单片机的RFID门禁系统-LCD12864显示
一.硬件方案 本RFID系统设计可分为硬件部分和软件部分。硬件部分以MFRC522射频识别模块为核心,结合主控模块STC89C52设计系统的外围硬件电路,实现对射频卡的控制与MCU之间的互通。软件部分采用C语言进行系统的下位机程序的开发,完成与IC卡之间的通信,实现数据交换功能。 主要由51单片机+最小系统+LCD12864液晶显示模块+RFID无线模块+5V转3.3V稳压电路+蜂鸣器模块+AT24C02存储电路+继电器控制电路+按键模块;如图: 二.设计功能 (1)通过按键输入密码,根据密码的正确与否来进行相应的操作; (2)可使用管理员密码可以自行设定和修改密码;修改的密码自动保存至存储芯片,支持掉电保存; (3)IC
[单片机]
基于51单片机的RFID门禁系统-LCD<font color='red'>12864</font>显示
为汽车打造的柔性透明显示屏
汽车使用的平视显示器(HUD)如今已经并不算罕见了,一些厂商还将其直接加入到了自己的汽车当中。最近,我们又看到LG所申请的一项与HUD有关的技术专利,和目前市面上的产品相比,他们的解决方案要更加巧妙一些。 智能手机和家电或许是LG最为人所熟知的业务,但他们同时也是一家汽车配件厂商。在这项最新曝光的专利当中,LG就介绍了自己是如何打算使用一块柔性透明显示屏来为司机创造HUD体验的。   根据专利的介绍,这块显示屏被隐藏了司机正前方的车顶位置,在驾驶时,司机只需将其拉出来即可使用。由于使用了柔性面板,这块HUD可以呈现弯曲状,相比普通显示屏更不占地方。 LG对于柔性显示屏技术的兴趣早已人尽皆知了,因此本次专利中描述的产
[汽车电子]
基于AVR单片机的LED显示屏应用设计
  LED点阵块具有亮度高、发光均匀、可靠性好、拼装方便等优点,能构成各种尺寸的显示屏。目前,LED显示屏已被广泛应用于文字显示并取得了很好的效果,但是大部分仅能显示滚动的文字信息而不能显示图像,并且还存在系统复杂等缺点。本文提出了一种主从式单片机的LED显示屏解决方案,该设计方案利用AVR单片机自身的FLASH ROM和RAM,外部无需任何存储电路,电路结构简单。该系统实现了图像的16阶灰度显示,可广泛用于商场、车站等公共场合。 1 AVR单片机简介   AVR单片机是增强型内置FLASH的RISC(ReducedInstruction Set CPU)精简指令集高速8位单片机,硬件采用哈佛(Harward)结构,达到一个时
[单片机]
基于AVR单片机的LED<font color='red'>显示屏</font>应用设计
全彩显示屏专用LED的选择和使用
一 全彩显示屏专用led的选择 全彩LED显示屏的最关键部件是LED器件。原因有三:第一,LED是全彩屏整机中使用数量最多的关键器件,每平方米会使用几千至几万只LED;第二,LED是决定整屏光学显示性能的主体,直接影响观众对显示屏的评价;第三,LED在显示屏整体成本中所占比例最大,从30%至70%不等。 LED是全彩LED显示屏的最关键器件,相当于电脑的CPU。LED的选择已经决定了整个显示屏50%以上的质量。如果未能选择好LED,显示屏的其他部件再好也无法弥补显示屏质量的缺陷。 全彩LED显示屏专用LED的品质和参数可归结为以下五大要素: 1、 失效率 由于全彩显示屏由上万甚至几十万组红、绿、蓝三种
[电源管理]
苹果将推出全新MacBook Pro,将放弃Touch Bar
据外媒 9to5Mac 报道,外界普遍预计,苹果公司最早将于今年夏天推出全新的 MacBook Pro 系列产品,拥有升级的 Apple Silicon 处理器、全新设计等。 另一个传闻的变化是,苹果将放弃备受争议的 Touch Bar,转而采用传统的功能栏。现在,显示供应链咨询公司(Display Supply Chain Consultants,DSCC)的分析师证实了这一点。 在本周发布的一份报告中,DSCC 解释称,Touch Bar 是目前 OLED 显示屏的第三大用途。但其消息来源表明,苹果将在未来的 MacBook Pro 中“取消 Touch Bar”。苹果还预计未来几年内在 iPad 系列产品中使用
[嵌入式]
苹果将推出全新MacBook Pro,将放弃Touch Bar
高速控制方案LED显示屏解决方案
  图1是高速控制方案LED显示屏电路原理。采用MCS51系列单片机对LED显示屏进行控制;随机存储器62512用作LED显示屏的数据存储器,存储待显示内容的字模数据;采用8行扫描方式,多片LED点阵片共用1组行驱动电路;每片LED点阵片都有一组列驱动电路,用74LS377作为列驱动的锁存器,CPU通过并行总线给列驱动电路的锁存器写字模数据;地址译码电路,用于产生LED点阵片行驱动电路和列驱动电路的片选地址。   图1 高速控制方案LED显示屏电原理   本方案的特点有两个:第一,虽然CPU还是通过并行总线给列驱动电路的锁存器写字模数据,但是锁存器的锁存信号改用了CPU的控制信号RD,而不是常规用法的WR;第二,地址译
[电源管理]
高速控制方案LED<font color='red'>显示屏</font>解决方案
影响LED显示屏的质量和寿命的因素
客户要选择一块好的大屏,首先必须要选择好的灯管,经久耐用,适应能力强。在选屏时,也要全面观察分析,综合以上因素作出正确判断。另外清晰自己的需求、投入预算及预期的最佳效果,更加合理的分配投入的资源,避免不必要的浪费、损失和隐患。详实地表明对项目的需求及至将来的发展规划,要求工厂提供最佳实施方案,甚至项目的可拓展功能及拓展预算、计划,以避免因项目不适合日后的发展需求而造成不必要的资源浪费;提供或要求厂家对项目安装及应用环境的分析数据,对可发性事件预测及提出预防、解决措施,进而对整个项目计划作出综合性评估; 一、只关注知名的LED和IC,其实它们对环境的使用条件要求更加挑剔。在室温25℃左右,其工作机理最好。但事实上一块户外大屏
[电源管理]
2018年显示屏指纹技术发展与市场趋势
  据全球关键信息、分析和解决方案领导者IHS Markit (Nasdaq:INFO) 预计,智能手机品牌将增加屏下指纹传感器的使用,使手机导入全面屏显示的同时,也能在手机正面具有隐形的指纹识别功能。下面就随手机便携小编一起来了解一下相关内容吧。   根据IHS Markit最新的《2018年 显示屏指纹 技术与市场报告》,预计2018年使用屏下指纹传感器的智能手机出货量至少将达到900万台,到2019年将会超过1亿台。 未来三年,市场将继续保持高速增长;Vivo、华为、小米,以及三星等领导智能手机品牌将率先导入、走在市场前沿。   将指纹传感器集成到智能手机的显示屏下方后,手机就可以給18:9或更高比例的全面屏提供正面、隐形
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved