历史上的今天
返回首页

历史上的今天

今天是:2025年01月30日(星期四)

2018年01月30日 | 12864显示屏菜单程序

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); 
     } 
     }}} 


推荐阅读

史海拾趣

Analog Microelectronics GmbH公司的发展小趣事

Analog Microelectronics GmbH是一家德国的半导体公司,专注于开发和生产模拟集成电路(ICs),以及为汽车、工业和医疗等领域提供解决方案。以下是Analog Microelectronics GmbH公司发展的相关故事:

  1. 创立与早期发展:Analog Microelectronics GmbH成立于1984年,总部位于德国巴伐利亚州的兰格维塔赫镇。公司的创始人致力于开发高质量的模拟集成电路,以满足市场对精密电子元件的需求。在创立初期,公司主要专注于生产模拟传感器和信号处理器件。

  2. 技术创新与产品优化:Analog Microelectronics GmbH在技术创新方面持续投入,不断改进和优化其产品线。公司注重研发和设计,致力于提供高性能、高精度和可靠性的模拟集成电路产品。公司的产品包括压力传感器、温度传感器、加速度传感器、电流传感器等,广泛应用于汽车电子、工业自动化、医疗器械等领域。

  3. 市场拓展与客户合作:Analog Microelectronics GmbH通过与全球各行业的客户建立长期稳定的合作关系,不断拓展市场份额和业务范围。公司在欧洲、亚洲和北美等地区设立了销售办事处和代表处,加强了与客户的沟通和服务能力,提高了产品的市场竞争力。

  4. 质量控制与认证:Analog Microelectronics GmbH严格遵循国际质量管理体系标准,对产品的生产过程进行严格控制和管理。公司获得了ISO 9001质量管理体系认证,确保产品质量稳定可靠。此外,公司的产品也符合汽车行业的相关认证标准,如ISO/TS 16949等,为客户提供高品质的产品和服务。

  5. 持续发展与未来展望:作为一家成熟的模拟集成电路供应商,Analog Microelectronics GmbH将继续致力于技术创新和产品研发,以满足不断变化的市场需求。公司将继续加强与客户和合作伙伴的合作关系,拓展业务领域,为全球客户提供更加优质的解决方案和服务。

客益(Guestgood)公司的发展小趣事

机顶盒,全称为数字视频变换盒(Set Top Box,简称STB),是现代家庭娱乐中不可或缺的重要设备。它作为连接电视机与外部信号源的桥梁,主要功能在于接收数字电视信号,并将其转换成适合在电视机上播放的格式。机顶盒不仅能接收来自有线电缆、卫星天线、宽带网络及地面广播的信号,还具备强大的媒体处理能力和交互功能,极大地丰富了用户的观看体验。

从技术层面看,机顶盒经历了从模拟到数字的飞跃式发展。早期的机顶盒主要用于有线电视网络的信号解扰,而现代机顶盒则支持高清、甚至4K超高清视频内容的播放,为用户带来更为细腻的画面和震撼的音效。此外,机顶盒还集成了网络交互功能,用户可以通过机顶盒连接到互联网,享受在线购物、观看网络视频、玩游戏等多元化服务,使电视机从单向接收信息的设备转变为智能互动终端。

随着科技的进步,机顶盒的功能和应用场景也在不断扩展。例如,一些先进的机顶盒支持智能语音控制,用户可以通过语音指令搜索节目、调整设置,极大地提升了使用的便捷性。同时,机顶盒还具备存储功能,用户可以将喜欢的媒体文件存储在机顶盒中,随时通过电视屏幕进行观看,享受个性化的娱乐体验。

综上所述,机顶盒作为家庭娱乐的重要组成部分,不仅承载着传输和显示数字视频信号的基本功能,还通过不断的技术创新和应用拓展,为用户提供了更加丰富、便捷、智能的观影体验。随着技术的不断进步和市场的不断扩大,机顶盒将继续在家庭娱乐领域发挥重要作用。

Aces Electronics Co Ltd公司的发展小趣事

近年来,电子行业经历了深刻的变革,新技术、新产品层出不穷。面对这一形势,Aces及时调整战略,加大在新技术领域的投入,推动公司向高端化、智能化方向发展。同时,公司还注重人才培养和团队建设,吸引了一批高素质的研发和管理人才,为公司的转型升级提供了有力支持。

Coherent Inc公司的发展小趣事

尽管电子行业竞争激烈,市场变化莫测,但Coherent Inc.始终保持着坚定的前行步伐。公司不断适应市场变化,调整战略方向,积极应对各种挑战。同时,公司也注重与合作伙伴的紧密合作,共同推动激光技术的创新和应用。这种坚定前行的态度,使得Coherent Inc.在电子行业中始终保持着领先的地位。

这五个故事只是Coherent Inc.发展历程中的一部分,但它们足以展示公司在电子行业中的崛起和发展。通过不断的探索、创新、收购与整合,以及坚定的前行态度,Coherent Inc.已经成为了激光技术领域的佼佼者,为电子行业的发展做出了重要贡献。

Cyrix Corp公司的发展小趣事

在被VIA收购后的一段时间里,Cyrix继续寻求市场扩张的机会。例如,在1998年,Cyrix与北京大船电子技术公司签订了总代理协议,以扩大其在中国的分销网络。这一策略帮助Cyrix进一步打开了中国市场的大门,为其在全球市场的发展奠定了基础。

以上五个故事描绘了Cyrix Corp公司在电子行业中的发展历程。从初创时期的挑战英特尔到被多次收购后的市场策略调整和市场扩张尝试,Cyrix的发展之路充满了曲折和变革。

Dawning Precision Co Ltd公司的发展小趣事

为了进一步提升产品的品质和可靠性,Dawning加强了品质管理体系的建设。公司引进了先进的生产设备和检测仪器,制定了严格的品质检测流程。同时,Dawning还定期对员工进行品质管理培训,提高员工的品质意识和操作技能。这些措施的实施,使得Dawning的产品在品质上得到了极大的提升,赢得了客户的信赖和好评。

问答坊 | AI 解惑

verilog 如何才能学好?

  我对verilog非常感兴趣!现在也在努力学习,可是不知道怎么才能学好!就像我在学c语言时,看了好多的程序,可是一上机就不知道该怎么做了!就连一个小程序写起来都很费劲!现在我就怕把verilog学到后期也成这样子了!那就不好了。 &n ...…

查看全部问答>

问个奇怪的问题,关于定时器的,希望高手解答

wince5.0,三星2440板子,设置定时器0,每625ms中断一次,在调试状态每次中断都是625ms左右,精确度很高,可是一把程序放到板子上跑,中断间隔很不准,每次时间如下: DrvDispatchThread::time = 1018 DrvDispatchThread::time = 1085 DrvDispat ...…

查看全部问答>

请教: grub 网络启动 相关问题

大家好:    最近在做 Grub 网络引导的研究.在这个过程中发现了很多问题,希望能有朋友能帮助解答一些:    (1) root (nd)        在grub源文件 的stage2 中,我加入了自己的网卡驱动,并按照netboot.READM ...…

查看全部问答>

全英文短信中换行问题

以ASCII码方式发送全英文短信如何使短信换行啊?? …

查看全部问答>

联网下载程序问题:用usb线连接pda,下载程序总提示“无法与服务器建立连接”,请指点,谢谢。

我在evc下这么用的这个数据下载程序,用usb线连接的pda,但是总提示我无法与服务器建立连接,请问各位高手,这怎么回事,是我哪里没有设对,还是程序或设备本身有问题或者欠缺,非常感谢。 用这句进行下载,用按钮进行实现: InternetDownload(\ ...…

查看全部问答>

什么都不会的小白,要学习单片机,从什么开始学起?

各位高手,什么都不会的小白,要学习单片机,从什么开始学起?有C 语言基础该买什么样的编程器,都用什么软件环境进行仿真? [ 本帖最后由 micoyoung 于 2010-8-25 16:48 编辑 ]…

查看全部问答>

Input impedance matching with fully differential amplifiers

本帖最后由 dontium 于 2015-1-23 13:39 编辑 IntroductionImpedance matching is widelyused in the transmission ofsignals in many end applicationsacross the industrial,munications, video, medical,test, measurement, andmilitary market ...…

查看全部问答>

TMS2812

由于我刚刚接触DSP,想了解一下2812的基本结构,哪位大哥有中文资料给小弟分享一下,谢谢了。 或者其他的一些学校资料也行,多谢了。 QQ:1650943707…

查看全部问答>

行走在8*8方阵中的蛇。。。

呵呵。。标题了一把,,说白了就是个8*8点阵的贪吃蛇。。。。   相信这种 蛇 坛子里已经有很多很多了。。。不过抱着“一千个程序员手中,有一千咱贪吃蛇”的想法,把我的拙劣程序发上来大家看一眼吧     欢 ...…

查看全部问答>

AM335x之官方说明

日前,德州仪器 (TI) 宣布推出最新 Sitara™ AM335x ARM® Cortex™-A8 入门套件,其通过采用板载加速计支持旋转与倾斜功能的 4.3 英寸 LCD 显示屏,可为智能电器、工业,网络应用以及其它需要触摸屏界面的设备提供一款低成本平台。 ...…

查看全部问答>