网站导航: 首页 > 设计参考 > 正文 文章搜索
PIC16F877A万年历程序
 
文章编号:
091111213544
文章分类: 单片机 PIC
点 击:
...
关 键 词: PIC16F877A,万年历
文章来源:
网络,作者:Wujieflash
摘 要:

4.按键扫描与服务程序

 
  1. /***************************************************  
  2. * 标题:按键扫描和服务                             *  
  3. * 作者:Wujieflash                                     *           
  4. * 日期:2008年1月17日                             *  
  5. * 说明:当按键按下,选中的单元就会闪烁 *  
  6. ***************************************************/  
  7. uch k=0;   
  8. //键盘初始化子程序   
  9. void keyinit()   
  10. {   
  11.  TRISD0=1;   
  12.  TRISD0=1;   
  13.  TRISD0=1;   
  14. }   
  15. /*----------------------------------------------------------*/  
  16. //键盘扫描子程序   
  17. void KeyScan()   
  18. {   
  19.  int d;   
  20.  if(RD0==0)  //设置键按下   
  21.  {   
  22.   k++;    //选定入口值   
  23.   k=k%8;   
  24.  }   
  25.  while(1)   
  26.  {   
  27.   if(RD0==1)break;//等待按键松开   
  28.  }   
  29.  switch(k)//键盘服务入口   
  30.  {   
  31.   case 1://设置秒   
  32.   {   
  33.    d=R1302(0x81);//读取秒   
  34.    d=d/16*10+d%16;//转换为16进制   
  35.    second=flag;   //设置秒的闪烁标志   
  36.    minute=1;      //其余变量不闪烁   
  37.    hour=1;   
  38.    year=1;   
  39.    month=1;   
  40.    date=1;   
  41.    day=1;   
  42.    if(second==0)  //闪烁   
  43.    {   
  44.     Show8X16_2(0,111,noshu);   
  45.     Show8X16_2(0,119,noshu);   
  46.    }   
  47.    if(RD1==0)     //秒数值加1   
  48.    {   
  49.     d++;   
  50.     if(d>0x3b)d=0;//大于59就为0   
  51.     d=d/10*16+d%10;   
  52.     W1302(0x80,d);//写入DS1302   
  53.     while(1)   
  54.     {   
  55.      if(RD1==1)break;//等待键松开   
  56.     }   
  57.    }   
  58.    if(RD2==0)//数值减1   
  59.    {   
  60.     d--;   
  61.     if(d0x3b)d=0;   
  62.     d=d/10*16+d%10;   
  63.     W1302(0x82,d);   
  64.     while(1)   
  65.     {   
  66.      if(RD1==1)break;   
  67.     }   
  68.    }   
  69.    if(RD2==0)   
  70.    {   
  71.     d--;   
  72.     if(d0x17)d=0;   
  73.     d=d/10*16+d%10;   
  74.     W1302(0x84,d);   
  75.     while(1)   
  76.     {   
  77.      if(RD1==1)break;   
  78.     }   
  79.    }   
  80.    if(RD2==0)   
  81.    {   
  82.     d--;   
  83.     if(d0x1f)d=1;   
  84.     d=d/10*16+d%10;   
  85.     W1302(0x86,d);   
  86.     while(1)   
  87.     {   
  88.      if(RD1==1)break;   
  89.     }   
  90.    }   
  91.    if(RD2==0)   
  92.    {   
  93.     d--;   
  94.     if(d0x0c)d=1;   
  95.     d=d/10*16+d%10;   
  96.     W1302(0x88,d);   
  97.     while(1)   
  98.     {   
  99.      if(RD1==1)break;   
  100.     }   
  101.    }   
  102.    if(RD2==0)   
  103.    {   
  104.     d--;   
  105.     if(d0x07)d=1;   
  106.     d=d/10*16+d%10;   
  107.     W1302(0x8a,d);   
  108.     while(1)   
  109.     {   
  110.      if(RD1==1)break;   
  111.     }   
  112.    }   
  113.    if(RD2==0)   
  114.    {   
  115.     d--;   
  116.     if(d0x63)d=0;   
  117.     d=d/10*16+d%10;   
  118.     W1302(0x8c,d);   
  119.     while(1)   
  120.     {   
  121.      if(RD1==1)break;   
  122.     }   
  123.    }   
  124.    if(RD2==0)   
  125.    {   
  126. ……   
  127.   

5.液晶显示程序

 
  1. /***************************************************  
  2. * 标题:LCD操作                                    *  
  3. * 作者:Wujieflash                                  *  
  4. * 日期:2008年1月12日                          *  
  5. * 说明:KS0108系列液晶不带字库          *  
  6. ***************************************************/  
  7. #include    
  8. #define E    RA0        //液晶使能端   
  9. #define RW   RA1        //读写控制端   
  10. #define DI   RA2        //数据/指令通道   
  11. #define CSA  RA5        //片选   
  12. #define CSB  RA3        //片选   
  13. #define nop() asm("nop")   
  14. ////////////////////////基本子函数///////////////////////   
  15. //延时   
  16. void delay(char x,char y)    
  17. {   
  18.   char z;   
  19.   do{   
  20.       z=y;   
  21.       do{;}while(--z);   
  22.      }while(--x);   
  23.  }   
  24. //其指令时间为:7+(3*(Y-1)+7)*(X-1)如果再加上函数调用的call 指令、页面设定、传递参数花掉的7 个指令。   
  25. //则是:14+(3*(Y-1)+7)*(X-1)。   
  26. //--------------------------------------------------   
  27. void LCDdelay()   
  28. {   
  29.  unsigned int i=500;   
  30.  while(i--)   
  31.  {;}   
  32. }   
  33. /*----------------------------------------------------*/  
  34. //状态检查   
  35. void CheckState()   
  36. {   
  37.  unsigned int dat;   
  38.  RW=1;                             //读状态   
  39.  DI=0;   
  40.  TRISB=0xff;                       //设置口为输入   
  41.  while(1)   
  42.  {   
  43.   E=1;                          //高电平读数据   
  44.   dat=PORTB&0x90;               //当4、7位为0时为正常状态   
  45.   E=0;   
  46.   if(dat==0x00)break;   
  47.  }   
  48.  TRISB=0x00;                       //恢复口为输出   
  49. }   
  50. /*----------------------------------------------------*/  
  51. //写显示数据   
  52. //dat:显示数据   
  53. void WriteData(unsigned char dat)   
  54. {   
  55.  CheckState();   
  56.  DI=1;                            //写数据   
  57.  RW=0;   
  58.  PORTB=dat;   
  59.  E=1;   
  60.  E=0;   
  61. }   
  62. /*---------------------------------------------------*/  
  63. //写指令   
  64. //command:操作LCD的指令   
  65. void WriteCommand(unsigned char dat)   
  66. {   
  67.  CheckState();   
  68.  RW=0;                          //写指令   
  69.  PORTB=dat;   
  70.  E=1;   
  71.  E=0;   
  72. }   
  73. /*---------------------------------------------------*/  
  74. //设定页地址----X:0--7   
  75. void SetLine(unsigned char line)   
  76. {   
  77.  line=line&0x07;               //0   
  78. //设定列地址----Y:0--63   
  79. void SetColumn(unsigned char column)   
  80. {   
  81.  column=column&0x3f;          //0   
  82. //设定开始行   
  83. void SetStartLine(unsigned char startline)   
  84. {   
  85.  startline=startline&0x3f;   //0   
  86. //开关显示   
  87. //1:开显示  0:关显示   
  88. void SetOnOff(unsigned char state)   
  89. {   
  90.  state=state|0x3e;   
  91.  WriteCommand(state);   
  92. }   
  93. /*--------------------------------------------------*/  
  94. //选择屏幕   
  95. //screen: 1:左屏 2:右屏   
  96. void SlectScreen(unsigned char screen)   
  97. {   
  98.  switch(screen)   
  99.  {   
  100.   case 1: CSA=0;   
  101.      CSB=1;//左屏   
  102.      break;   
  103.   case 2: CSA=1;   
  104.     CSB=0;//右屏   
  105.     break;   
  106.  }   
  107. }   
  108. /*--------------------------------------------------*/  
  109. //清屏   
  110. //screen: 1:左屏 2:右屏   
  111. void ClearScreen(unsigned char screen)   
  112. {   
  113.  unsigned char i,j;   
  114.  SlectScreen(screen);   
  115.  for(i=0;i   
  116. //显示一个16X16的汉字   
  117. void Show16X16(unsigned char line,unsigned char column,const unsigned char *pt)   
  118. {   
  119.  unsigned char i,column_temp;   
  120.  column_temp=column;   
  121.  SlectScreen(1);                      //选通左屏   
  122.  SetColumn(column);                   //设置起始列   
  123.  SetLine(line);                       //设置行   
  124.  for(i=0;i=64)                   //如果列>=64,则选通右屏   
  125.   {   
  126.    SlectScreen(2);   
  127.    column=column%64;            //设置右屏起始列   
  128.    SetColumn(column);   
  129.    SetLine(line);   
  130.   }    
  131.   WriteData(*pt);                  //写数据   
  132.   *pt++;//   
  133.   column++;   
  134.  }   
  135.  SlectScreen(1);   
  136.  SetLine(line+1);                    //设置汉字下半部分显示页   
  137.  column=column_temp;   
  138.  SetColumn(column);   
  139.  for(i=0;i=64)   
  140.   {   
  141.    SlectScreen(2);   
  142.    column=column%64;   
  143.    SetColumn(column);   
  144.    SetLine(line+1);   
  145.   }    
  146.   WriteData(*pt);   
  147.   *pt++;   
  148.   column++;   
  149.  }   
  150. }   
  151. /*-------------------------------------------------------*/  
  152. //显示一个16X16的汉字带上划线   
  153. void Show16X16_2(unsigned char line,unsigned char column,const unsigned char *pt)   
  154. {   
  155.  unsigned char i,column_temp;   
  156.  column_temp=column;   
  157.  SlectScreen(1);                      //选通左屏   
  158.  SetColumn(column);                   //设置起始列   
  159.  SetLine(line);                       //设置行   
  160.  for(i=0;i=64)                   //如果列>=64,则选通右屏   
  161.   {   
  162.    SlectScreen(2);   
  163.    column=column%64;            //设置右屏起始列   
  164.    SetColumn(column);   
  165.    SetLine(line);   
  166.   }    
  167.   WriteData(*pt|0x01);                  //写数据   
  168.   *pt++;   
  169.   column++;   
  170.  }   
  171.  SlectScreen(1);   
  172.  SetLine(line+1);                    //设置汉字下半部分显示页   
  173.  column=column_temp;   
  174.  SetColumn(column);   
  175.  for(i=0;i=64)   
  176.   {   
  177.    SlectScreen(2);   
  178.    column=column%64;   
  179.    SetColumn(column);   
  180.    SetLine(line+1);   
  181.   }    
  182.   WriteData(*pt);   
  183.   *pt++;   
  184.   column++;   
  185.  }   
  186. }   
  187. /*-------------------------------------------------------*/  
  188. //显示一个16X16的汉字带下划线   
  189. void Show16X16_3(unsigned char line,unsigned char column,const unsigned char *pt)   
  190. {   
  191.  unsigned char i,column_temp;   
  192.  column_temp=column;   
  193.  SlectScreen(1);                      //选通左屏   
  194.  SetColumn(column);                   //设置起始列   
  195.  SetLine(line);                       //设置行   
  196.  for(i=0;i=64)                   //如果列>=64,则选通右屏   
  197.   {   
  198.    SlectScreen(2);   
  199.    column=column%64;            //设置右屏起始列   
  200.    SetColumn(column);   
  201.    SetLine(line);   
  202.   }    
  203.   WriteData(*pt);                  //写数据   
  204.   *pt++;   
  205.   column++;   
  206.  }   
  207.  SlectScreen(1);   
  208.  SetLine(line+1);                    //设置汉字下半部分显示页   
  209.  column=column_temp;   
  210.  SetColumn(column);   
  211.  for(i=0;i=64)   
  212.   {   
  213.    SlectScreen(2);   
  214.    column=column%64;   
  215.    SetColumn(column);   
  216.    SetLine(line+1);   
  217.   }    
  218.   WriteData(*pt|0x80);   
  219.   *pt++;   
  220.   column++;   
  221.  }   
  222. }   
  223. /*-------------------------------------------------------*/  
  224. //显示一个8X16的字符   
  225. void Show8X16(unsigned char line,unsigned char column,const unsigned char *pt)   
  226. {   
  227.  unsigned char i,column_temp;   
  228.  column_temp=column;   
  229.  SlectScreen(1);                          //选通左屏   
  230.  SetColumn(column);                       //设置起始列   
  231.  SetLine(line);                           //设置行   
  232.  for(i=0;i=64)                       //如果列>=64,则选通右屏   
  233.   {   
  234.    SlectScreen(2);   
  235.    column=column%64;                //设置右屏起始列   
  236.    SetColumn(column);   
  237.    SetLine(line);   
  238.   }    
  239.   WriteData(*pt);                      //写数据   
  240.   *pt++;   
  241.   column++;   
  242.  }   
  243.  SlectScreen(1);   
  244.  SetLine(line+1);                         //设置汉字下半部分显示页   
  245.  column=column_temp;   
  246.  SetColumn(column);   
  247.  for(i=0;i=64)   
  248.   {   
  249.    SlectScreen(2);   
  250.    column=column%64;   
  251.    SetColumn(column);   
  252.    SetLine(line+1);   
  253.   }    
  254.   WriteData(*pt);   
  255.   *pt++;   
  256.   column++;   
  257.  }   
  258. }   
  259. /*-------------------------------------------------------*/  
  260. //显示一个8X16的字符带上划线   
  261. void Show8X16_2(unsigned char line,unsigned char column,const unsigned char *pt)   
  262. {   
  263.  unsigned char i,column_temp;   
  264.  column_temp=column;   
  265.  SlectScreen(1);                          //选通左屏   
  266.  SetColumn(column);                       //设置起始列   
  267.  SetLine(line);                           //设置行   
  268.  for(i=0;i=64)                       //如果列>=64,则选通右屏   
  269.   {   
  270.    SlectScreen(2);   
  271.    column=column%64;                //设置右屏起始列   
  272.    SetColumn(column);   
  273.    SetLine(line);   
  274.   }    
  275.   WriteData(*pt|0x01);                      //写数据   
  276.   *pt++;   
  277.   column++;   
  278.  }   
  279.  SlectScreen(1);   
  280.  SetLine(line+1);                         //设置汉字下半部分显示页   
  281.  colu mn=column_temp;   
  282.  SetColumn(column);   
  283.  for(i=0;i=64)   
  284.   {   
  285.    SlectScreen(2);   
  286.    column=column%64;   
  287.    SetColumn(column);   
  288.    SetLine(line+1);   
  289.   }    
  290.   WriteData(*pt);   
  291.   *pt++;   
  292.   column++;   
  293.  }   
  294. }   
  295. /*-------------------------------------------------------*/  
  296. //显示一个16X32的字符   
  297. void Show16X32(unsigned char line,unsigned char column,const unsigned char *pt)   
  298. {   
  299.  unsigned char i,column_temp1,column_temp2,column_temp3;   
  300.  column_temp1=column;   
  301.  column_temp2=column;   
  302.  column_temp3=column;   
  303.  SlectScreen(1);                         //选通左屏   
  304.  SetColumn(column);                      //设置起始列   
  305.  SetLine(line);                          //设置行   
  306.  for(i=0;i=64)                      //如果列>=64,则选通右屏   
  307.   {   
  308.    SlectScreen(2);   
  309.    column=column%64;               //设置右屏起始列   
  310.    SetColumn(column);   
  311.    SetLine(line);   
  312.   }    
  313.   WriteData(*pt);                     //写数据   
  314.   *pt++;   
  315.   column++;   
  316.  }   
  317.  SlectScreen(1);   
  318.  SetLine(line+1);   
  319.  column=column_temp1;   
  320.  SetColumn(column);   
  321.  for(i=0;i=64)   
  322.   {   
  323.    SlectScreen(2);   
  324.    column=column%64;   
  325.    SetColumn(column);   
  326.    SetLine(line+1);   
  327.   }    
  328.   WriteData(*pt);   
  329.   *pt++;   
  330.   column++;   
  331.  }   
  332.  SlectScreen(1);   
  333.  SetLine(line+2);   
  334.  column=column_temp2;   
  335.  SetColumn(column);   
  336.  for(i=0;i=64)   
  337.   {   
  338.    SlectScreen(2);   
  339.    column=column%64;   
  340.    SetColumn(column);   
  341.    SetLine(line+2);   
  342.   }    
  343.   WriteData(*pt);   
  344.   *pt++;   
  345.   column++;   
  346.  }   
  347.  SlectScreen(1);   
  348.  SetLine(line+3);   
  349.  column=column_temp3;   
  350.  SetColumn(column);   
  351.  for(i=0;i=64)   
  352.   {   
  353.    SlectScreen(2);   
  354.    column=column%64;   
  355.    SetColumn(column);   
  356.    SetLine(line+3);   
  357.   }    
  358.   WriteData(*pt);   
  359.   *pt++;   
  360.   column++;   
  361.  }   
  362. }   
  363. /*-------------------------------------------------------*/  
  364. //LCD初始化子程序   
  365. void LCDinit()   
  366. {   
  367.  ADCON1=0x06;   
  368.  TRISA=0x00;   
  369.  TRISB=0x00;   
  370.  PORTB=0x00;   
  371.  SetOnOff(1);   
  372. }   
  373. /*----------------------------------------------------------*/  
  374. //调用LCD显示子程序   
  375. void ChangeToLCD(uch line,uch column,uch data)   
  376. {   
  377.  int D_ge,D_shi;   
  378.     
  379.  D_ge=data%10;                           //取个位   
  380.  D_shi=data%100/10;                      //取十位   
  381.     
  382.  switch(D_ge)   
  383.  {   
  384.   case 0:{Show8X16(line,column+8,s0);break;}   
  385.   case 1:{Show8X16(line,column+8,s1);break;}   
  386.   case 2:{Show8X16(line,column+8,s2);break;}   
  387.   case 3:{Show8X16(line,column+8,s3);break;}   
  388.   case 4:{Show8X16(line,column+8,s4);break;}   
  389.   case 5:{Show8X16(line,column+8,s5);break;}   
  390.   case 6:{Show8X16(line,column+8,s6);break;}   
  391.   case 7:{Show8X16(line,column+8,s7);break;}   
  392.   case 8:{Show8X16(line,column+8,s8);break;}   
  393.   case 9:{Show8X16(line,column+8,s9);break;}   
  394.  }   
  395.  switch(D_shi)   
  396.  {   
  397.   case 0:{Show8X16(line,column,s0);break;}   
  398.   case 1:{Show8X16(line,column,s1);break;}   
  399.   case 2:{Show8X16(line,column,s2);break;}   
  400.   case 3:{Show8X16(line,column,s3);break;}   
  401.   case 4:{Show8X16(line,column,s4);break;}   
  402.   case 5:{Show8X16(line,column,s5);break;}   
  403.   case 6:{Show8X16(line,column,s6);break;}   
  404.   case 7:{Show8X16(line,column,s7);break;}   
  405.   case 8:{Show8X16(line,column,s8);break;}   
  406.   case 9:{Show8X16(line,column,s9);break;}   
  407.  }    
  408. }   
  409. /*-----------------------------------------------------------------*/  
  410. void ChangeToLCD2(uch line,uch column,uch data)//带上划线   
  411. {   
  412.  int D_ge,D_shi;    
  413.  D_ge=data%10;                           //取个位   
  414.  D_shi=data%100/10;                      //取十位   
  415.     
  416.  switch(D_ge)   
  417.  {   
  418.   case 0:{Show8X16_2(line,column+8,s0);break;}   
  419.   case 1:{Show8X16_2(line,column+8,s1);break;}   
  420.   case 2:{Show8X16_2(line,column+8,s2);break;}   
  421.   case 3:{Show8X16_2(line,column+8,s3);break;}   
  422.   case 4:{Show8X16_2(line,column+8,s4);break;}   
  423.   case 5:{Show8X16_2(line,column+8,s5);break;}   
  424.   case 6:{Show8X16_2(line,column+8,s6);break;}   
  425.   case 7:{Show8X16_2(line,column+8,s7);break;}   
  426.   case 8:{Show8X16_2(line,column+8,s8);break;}   
  427.   case 9:{Show8X16_2(line,column+8,s9);break;}   
  428.  }   
  429.  switch(D_shi)   
  430.  {   
  431.   case 0:{Show8X16_2(line,column,s0);break;}   
  432.   case 1:{Show8X16_2(line,column,s1);break;}   
  433.   case 2:{Show8X16_2(line,column,s2);break;}   
  434.   case 3:{Show8X16_2(line,column,s3);break;}   
  435.   case 4:{Show8X16_2(line,column,s4);break;}   
  436.   case 5:{Show8X16_2(line,column,s5);break;}   
  437.   case 6:{Show8X16_2(line,column,s6);break;}   
  438.   case 7:{Show8X16_2(line,column,s7);break;}   
  439.   case 8:{Show8X16_2(line,column,s8);break;}   
  440.   case 9:{Show8X16_2(line,column,s9);break;}   
  441.  }    
  442. }   
  443. /*-----------------------------------------------------------------*/  
  444. void ChangeToLCD3(uch line,uch column,uch data)//带下划线   
  445. {   
  446.  int D_ge,D_shi;   
  447.     
  448.  D_ge=data%10;                           //取个位   
  449.  D_shi=data%100/10;                      //取十位   
  450.     
  451.  switch(D_ge)   
  452.  {   
  453.   case 0:{Show16X32(line,column+16,ss0);break;}   
  454.   case 1:{Show16X32(line,column+16,ss1);break;}   
  455.   case 2:{Show16X32(line,column+16,ss2);break;}   
  456.   case 3:{Show16X32(line,column+16,ss3);break;}   
  457.   case 4:{Show16X32(line,column+16,ss4);break;}   
  458.   case 5:{Show16X32(line,column+16,ss5);break;}   
  459.   case 6:{Show16X32(line,column+16,ss6);break;}   
  460.   case 7:{Show16X32(line,column+16,ss7);break;}   
  461.   case 8:{Show16X32(line,column+16,ss8);break;}   
  462.   case 9:{Show16X32(line,column+16,ss9);break;}   
  463.  }   
  464.  switch(D_shi)   
  465.  {   
  466.   case 0:{Show16X32(line,column,ss0);break;}   
  467.   case 1:{Show16X32(line,column,ss1);break;}   
  468.   case 2:{Show16X32(line,column,ss2);break;}   
  469.   case 3:{Show16X32(line,column,ss3);break;}   
  470.   case 4:{Show16X32(line,column,ss4);break;}   
  471.   case 5:{Show16X32(line,column,ss5);break;}   
  472.   case 6:{Show16X32(line,column,ss6);break;}   
  473.   case 7:{Show16X32(line,column,ss7);break;}   
  474.   case 8:{Show16X32(line,column,ss8);break;}   
  475.   case 9:{Show16X32(line,column,ss9);break;}   
  476.  }    
  477. }   
  478. /*-----------------------------------------------------------------*/  
  479. void ChangeToLCD4(uch line,uch column,uch data)//星期转换   
  480. {                        
  481.  switch(data)   
  482.  {   
  483.   case 1:{Show16X16_3(line,column,ri);break;}   
  484.   case 2:{Show16X16_3(line,column,yi);break;}   
  485.   case 3:{Show16X16_3(line,column,er);break;}   
  486.   case 4:{Show16X16_3(line,column,san);break;}   
  487.   case 5:{Show16X16_3(line,column,si);break;}   
  488.   case 6:{Show16X16_3(line,column,wu);break;}   
  489.   case 7:{Show16X16_3(line,column,liu);break;}   
  490.  }    
  491. }   
  492. /*-----------------------------------------------------------------*/  
  493. void ChangeToLCD5(uch line,uch column,uch data)//生肖转换   
  494. {      
  495.  data=data%12;                     
  496.  switch(data)   
  497.  {   
  498.   case 0:{Show16X16_3(line,column,llong);break;}   
  499.   case 1:{Show16X16_3(line,column,she);break;}   
  500.   case 2:{Show16X16_3(line,column,ma);break;}   
  501.   case 3:{Show16X16_3(line,column,yang);break;}   
  502.   case 4:{Show16X16_3(line,column,hou);break;}   
  503.   case 5:{Show16X16_3(line,column,ji);break;}   
  504.   case 6:{Show16X16_3(line,column,gou);break;}   
  505.   case 7:{Show16X16_3(line,column,zhu);break;}   
  506.   case 8:{Show16X16_3(line,column,shu);break;}   
  507.   case 9:{Show16X16_3(line,column,niu);break;}   
  508.   case 10:{Show16X16_3(line,column,hu);break;}   
  509.   case 11:{Show16X16_3(line,column,tu);break;}   
  510.  }    
  511. }   
  512. /*-----------------------------------------------------------------*/  
  513. void ChangeToLCD6(uch line,uch column,uch data)//阴历月转换   
  514. {      
  515.  data=data%12;                     
  516.  switch(data)   
  517.  {   
  518.   case 0:{Show16X16_2(line,column,zheng);break;}   
  519.   case 1:{Show16X16_2(line,column,er);break;}   
  520.   case 2:{Show16X16_2(line,column,san);break;}   
  521.   case 3:{Show16X16_2(line,column,si);break;}   
  522.   case 4:{Show16X16_2(line,column,wu);break;}   
  523.   case 5:{Show16X16_2(line,column,liu);break;}   
  524.   case 6:{Show16X16_2(line,column,qqi);break;}   
  525.   case 7:{Show16X16_2(line,column,ba);break;}   
  526.   case 8:{Show16X16_2(line,column,jiu);break;}   
  527.   case 9:{Show16X16_2(line,column,shi);break;}   
  528.   case 10:{Show16X16_2(line,column,shiyi);break;}   
  529.   case 11:{Show16X16_2(line,column,la);break;}   
  530.  }    
  531. }   
  532. /*-----------------------------------------------------------------*/  
  533. void ChangeToLCD7(uch line,uch column,uch data)//阴历日   
  534. {      
  535.  data=data%12;                     
  536.  switch(data)   
  537.  {   
  538.   case 0:{Show16X16_2(line,column,yi);break;}   
  539.   case 1:{Show16X16_2(line,column,er);break;}   
  540.   case 2:{Show16X16_2(line,column,san);break;}   
  541.   case 3:{Show16X16_2(line,column,si);break;}   
  542.   case 4:{Show16X16_2(line,column,wu);break;}   
  543.   case 5:{Show16X16_2(line,column,liu);break;}   
  544.   case 6:{Show16X16_2(line,column,qqi);break;}   
  545.   case 7:{Show16X16_2(line,column,ba);break;}   
  546.   case 8:{Show16X16_2(line,column,jiu);break;}   
  547.   case 9:{Show16X16_2(line,column,shi);break;}   
  548.  }    
  549. }   
  550. /*-----------------------------------------------------------------*/  
  551. void ChangeToLCD8(uch line,uch column,uch data)//阴历日十位   
  552. {      
  553.  data=data%3;                     
  554.  switch(data)   
  555.  {   
  556.   case 0:{Show16X16_2(line,column,chu);break;}   
  557.   case 1:{Show16X16_2(line,column,er);break;}   
  558.   case 2:{Show16X16_2(line,column,san);break;}   
  559.  }    
  560. }   
  561. /*-----------------------------------------------------------------*/  

三,总结
           到现在为止,我对KS0108系列液晶的操作已经基本掌握了,并可以熟练应用.但是本程序中阳历转阴历的程序还是不对,我想不出更好的转换办法,希望大家能提供方法完善.由于篇幅原因,没有将阳历转阴历的程序,和液晶字库的程序附载上面,

 
相关文章:

上一页 12
 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4