找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5584|回复: 2
收起左侧

16*16点阵原理图+pcb+单片机程序

[复制链接]
ID:127163 发表于 2016-6-19 08:31 | 显示全部楼层 |阅读模式
单片机16*16点阵的资料可以显示汉字 很全

0.png
单片机16x16点阵原理图

0.png
单片机16x16点阵pcb

  1. #include <reg52.h>
  2. #include<intrins.h>
  3. typedef  unsigned char   uchar;
  4. typedef  unsigned int    uint;
  5. typedef  unsigned long   uint32;  

  6. code uchar graph[] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  7.                       0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,       
  8.                                           0xFF,0xFF,0x1F,0xF8,0x0F,0xF0,0xCF,0xF3,0xCF,0xF3,0xCF,0xF3,0xCF,0xF3,0xCF,0xF3,   /**0**/
  9.                       0xCF,0xF3,0xCF,0xF3,0xCF,0xF3,0xCF,0xF3,0xCF,0xF3,0x0F,0xF0,0x1F,0xF8,0xFF,0xFF,
  10.                           0x7F,0xFC,0x3F,0xFC,0x1F,0xFC,0x0F,0xFC,0x7F,0xFC,0x7F,0xFC,0x7F,0xFC,0x7F,0xFC,   /**1**/
  11.                       0x7F,0xFC,0x7F,0xFC,0x7F,0xFC,0x7F,0xFC,0x7F,0xFC,0x7F,0xFC,0x0F,0xE0,0x0F,0xE0,
  12.                           0xFF,0xFF,0x1F,0xF8,0x0F,0xF0,0xCF,0xF3,0xFF,0xF3,0xFF,0xF3,0xFF,0xF1,0xFF,0xF8,   /**2**/
  13.                       0x7F,0xFC,0x3F,0xFF,0x9F,0xFF,0xCF,0xFF,0xCF,0xF3,0x0F,0xF0,0x1F,0xF8,0xFF,0xFF,
  14.                       0xFF,0xFF,0x1F,0xF8,0x0F,0xF0,0xCF,0xF3,0xFF,0xF3,0xFF,0xF3,0xFF,0xF1,0xFF,0xF8,   /**3**/
  15.                       0xFF,0xFC,0xFF,0xF9,0xFF,0xF1,0xFF,0xF3,0xCF,0xF3,0x0F,0xF0,0x1F,0xF8,0xFF,0xFF,
  16.                           0xFF,0xFF,0xBF,0xFD,0xDF,0xFC,0xDF,0xFC,0xCF,0xFC,0xCF,0xFC,0xCF,0xFC,0xCF,0xFC,   /**4**/
  17.                       0x0F,0xE0,0x0F,0xE0,0xFF,0xFC,0xFF,0xFC,0xFF,0xFC,0xFF,0xFC,0xFF,0xFC,0x7F,0xF8,
  18.                       0xFF,0xFF,0x0F,0xF0,0x0F,0xF0,0xCF,0xFF,0xCF,0xFF,0xCF,0xFF,0xCF,0xFF,0x0F,0xF8,   /**5**/
  19.                       0x0F,0xF0,0xFF,0xF3,0xFF,0xF3,0xFF,0xF3,0xCF,0xF3,0x0F,0xF0,0x1F,0xF8,0xFF,0xFF,
  20.                       0xFF,0xFF,0x1F,0xE0,0x0F,0xF0,0xCF,0xFF,0xCF,0xFF,0xCF,0xFF,0xCF,0xFF,0x0F,0xF0,   /**6**/
  21.                       0x0F,0xE0,0xCF,0xE7,0xCF,0xE7,0xCF,0xE7,0xCF,0xE7,0x0F,0xE0,0x1F,0xF0,0xFF,0xFF,
  22.                           0xFF,0xFF,0x0F,0xF8,0x0F,0xF0,0xFF,0xF3,0xFF,0xF3,0xFF,0xF9,0xFF,0xF8,0x7F,0xFC,   /**7**/
  23.                       0x7F,0xFE,0x3F,0xFE,0x3F,0xFF,0x3F,0xFF,0x3F,0xFF,0x3F,0xFF,0x3F,0xFF,0x3F,0xFF,
  24.                       0xFF,0xFF,0x1F,0xF8,0x0F,0xF0,0xCF,0xF3,0xCF,0xF3,0xCF,0xF3,0xCF,0xF3,0x0F,0xF0,   /**8**/
  25.                       0x0F,0xF0,0xCF,0xF3,0xCF,0xF3,0xCF,0xF3,0xCF,0xF3,0x0F,0xF0,0x1F,0xF8,0xFF,0xFF,
  26.                       0xFF,0xFF,0x1F,0xF8,0x0F,0xF0,0xCF,0xF3,0xCF,0xF3,0xCF,0xF3,0xCF,0xF3,0x0F,0xF0,   /**9**/
  27.                       0x1F,0xF0,0xFF,0xF3,0xFF,0xF3,0xFF,0xF3,0xCF,0xF3,0x0F,0xF0,0x1F,0xF8,0xFF,0xFF,
  28.                           0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  29.                       0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,       
  30.                           0xFF,0xFF,0xFF,0xFD,0xDF,0xFD,0xDF,0xFD,0xDF,0xFD,0xDF,0xFD,0xDF,0xFD,0xDF,0xFB,   /**八**/
  31.                       0xEF,0xFB,0xEF,0xFB,0xEF,0xF7,0xF7,0xF7,0xF7,0xEF,0xFB,0xEF,0xFB,0xDF,0xFD,0xBF,
  32.                           0xFF,0xFD,0xE1,0xFB,0x2D,0x80,0xB5,0xBF,0xD5,0xDF,0x79,0xE0,0xF5,0xFF,0xED,0xFF,   /**院**/
  33.                       0x2D,0x80,0xED,0xF6,0xE9,0xF6,0xF5,0xF6,0x7D,0xB7,0x7D,0xB7,0xBD,0x8F,0xDD,0xFF,
  34.                           0xEF,0xFB,0xEF,0xFB,0x81,0xC0,0xEF,0xFB,0xC7,0xF1,0xAB,0xEA,0xEC,0x9B,0xDF,0xFF,   /**梦**/
  35.                       0x1F,0xF0,0xEF,0xF7,0xD7,0xFB,0xBB,0xFD,0x7F,0xFE,0xBF,0xFF,0xCF,0xFF,0xF1,0xFF,
  36.                                           0xEF,0xFF,0xEF,0xE0,0xEF,0xEE,0x81,0xEE,0xEF,0xE0,0xE7,0xEE,0xC7,0xE0,0xAB,0xEE,   /**想**/
  37.                       0xED,0xEE,0xEF,0xE0,0x7F,0xFF,0xEF,0xDE,0xED,0xB6,0xED,0xB7,0x1E,0xF0,0xFF,0xFF,
  38.                           0x7F,0xFF,0xFF,0xFE,0x07,0xC0,0xF7,0xDF,0xF7,0xDF,0xF7,0xDF,0x07,0xC0,0xF7,0xFF,   /*启*/
  39.                                           0xF7,0xFF,0xF7,0xFF,0x17,0xC0,0xDB,0xDF,0xDB,0xDF,0xDD,0xDF,0x1E,0xC0,0xDF,0xDF,
  40.                           0xF7,0xFD,0xFB,0xFB,0xC1,0xFF,0x5D,0xC0,0xD9,0xFF,0xD5,0xFF,0xD5,0xF0,0xC0,0xF6,   /**航**/
  41.                       0xDD,0xF6,0xD9,0xF6,0xD5,0xF6,0xD5,0xB6,0xDD,0xB6,0x5D,0xB7,0x55,0x8F,0xAE,0xFF,
  42.                                           0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  43.                       0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF       
  44.                                           };

  45. /*********74LS154N端口定义**********/
  46. sbit ENLED = P0^0;
  47. sbit A = P0^4;
  48. sbit b = P0^3;
  49. sbit C = P0^2;
  50. sbit D = P0^1;

  51. /*********74HC595N端口定义**********/
  52. sbit DIN  = P0^5;  //SER
  53. sbit SHCP = P0^6;  //SRCK
  54. sbit STCP  = P0^7; //RCK

  55. uint  counter = 0,speed = 200,T = 0;


  56. void delays(uint i)
  57. {
  58.   while(i--);
  59. }
  60.                                           
  61. uchar keyscan(void)  //键盘扫描函数,使用行列反转扫描法
  62. {
  63. uchar cord_h,cord_l;//行列值中间变量
  64. P2=0xf0;            //行线输出全为0
  65. cord_h=P2&0xf0;     //读入行
  66. if(cord_h!=0xf0)    //先检测有无按键按下
  67. {
  68.   delays(1000);        //去抖
  69.   if(cord_h!=0xf0)
  70.   {
  71.     cord_h=P2&0xf0;  //读入行
  72.     P2=cord_h|0x0f;  //输出当前行
  73.     cord_l=P2&0x0f;  //读入列
  74.     return(cord_h+cord_l);//键盘最后组合码值
  75.    }
  76.   }
  77. return(0x00);     
  78. }
  79.                                           
  80. uint GongNeng()
  81. {   
  82.         uint keys,t;
  83.         keys = keyscan();
  84.         switch(keys)
  85.         {
  86.                         case 0xEE:t = 1;T =  0; break;  /* 1 */
  87.                         case 0xDE:t = 2;T = 192; break;  /* 2 */
  88.                         case 0xBE:t = 3;T = 176; break;  /* 3 */
  89.                         case 0x7E:t = 0; break;  /* 0 */
  90.                         case 0xED:t = 4;T =  16; break;  /* 4 */
  91.                         case 0xDD:t = 5;T = 192; break;  /* 5 */
  92.                         case 0xBD:t = 6; break;  /* 6 */
  93.                         case 0x7D:if(speed <=100)speed -= 10;if(speed >100 && speed <=300)speed -= 20;if(speed >300)speed -= 200;if(speed <=20) speed = 20;break;  /*加速*/
  94.                         case 0xEB:t = 7; break;  /* 7 */
  95.                         case 0xDB:t = 8; break;  /* 8 */
  96.                         case 0xBB:t = 9; break;  /* 9 */
  97.                         case 0x7B:if(speed <=200)speed += 20;if(speed >200 && speed <=1000)speed += 100;if(speed >1000)speed += 50;if(speed >=3000) speed = 3000;break;  /*减速*/
  98.                         case 0xE7:t =   0; break;
  99.                         case 0xD7:t =   0; break;
  100.                         case 0xB7:t =   0; break;
  101.                         case 0x77:t =   0; break;
  102.         }
  103.         return t ;
  104. }



  105. /******************************************************************************
  106. * 函  数  名      : Write_Data_To_HC595
  107. * 描      述      : 写数据到74HC595
  108. * 输      入      : 无.
  109. * 返      回      : 无.
  110. *******************************************************************************/
  111. void Write_Data_To_HC595( uchar RowData )
  112. {
  113.     uchar i;

  114.         for( i = 0; i < 8; i++ )
  115.     {                                                                                                                                                               /* 拉低74HC595存储寄存器时钟 */
  116.         SHCP = 0;                                     /* 拉低74HC595移位寄存器时钟 */
  117.         RowData <<= 1;                                /* 数据右移,因为是大端模式 */
  118.         DIN = CY;
  119.         SHCP = 1;                                     /* 时钟上升沿,数据移入74HC595 */        
  120.     }
  121. }




  122. void timer1_init()
  123. {
  124.         TMOD |= 0x10;
  125.         TMOD &= 0xdf;  
  126.         TH1   = 0xFC;
  127.         TL1   = 0x67;
  128.         TR1   = 1;
  129. }
  130. void int_init()
  131. {
  132.         ET1 = 1;
  133.         EA  = 1;
  134. }
  135. void refresh_led()
  136. {
  137.           static uchar j = 0;
  138.             Write_Data_To_HC595( 0xFF );
  139.             Write_Data_To_HC595( 0xFF );
  140.                 STCP = 1;                                       /* 上升沿,将移位寄存器数据锁存到存储寄存器 */
  141.         STCP = 0;       
  142.                 switch(j)
  143.            {
  144.                    case  0: A = 0;b = 0;C = 0;D = 0;break;
  145.                 case  1: A = 1;b = 0;C = 0;D = 0;break;
  146.                 case  2: A = 0;b = 1;C = 0;D = 0;break;
  147.                 case  3: A = 1;b = 1;C = 0;D = 0;break;
  148.                 case  4: A = 0;b = 0;C = 1;D = 0;break;
  149.                 case  5: A = 1;b = 0;C = 1;D = 0;break;
  150.                 case  6: A = 0;b = 1;C = 1;D = 0;break;
  151.                 case  7: A = 1;b = 1;C = 1;D = 0;break;
  152.                 case  8: A = 0;b = 0;C = 0;D = 1;break;
  153.                 case  9: A = 1;b = 0;C = 0;D = 1;break;
  154.                 case 10: A = 0;b = 1;C = 0;D = 1;break;
  155.                 case 11: A = 1;b = 1;C = 0;D = 1;break;
  156.                 case 12: A = 0;b = 0;C = 1;D = 1;break;
  157.                 case 13: A = 1;b = 0;C = 1;D = 1;break;
  158.                 case 14: A = 0;b = 1;C = 1;D = 1;break;
  159.                 case 15: A = 1;b = 1;C = 1;D = 1;break;
  160.                 default: break;
  161.                 }               
  162.                 Write_Data_To_HC595( graph[ ( T+j )* 2 + 1 ] );        /* 先写高字节数据到595 */
  163.         Write_Data_To_HC595( graph[ ( T+j )* 2 ] );                /* 后写低字节数据到595 */
  164.         STCP = 1;                                       /* 上升沿,将移位寄存器数据锁存到存储寄存器 */
  165.         STCP = 0;                                                                        /* 写入行号,超过7后,自动切换到下半屏显示 */
  166.                
  167.             if(15 == j++) j = 0;
  168.                
  169.                
  170. }

  171. main()
  172. {
  173.         ENLED = 0;
  174.         timer1_init();
  175.         int_init();
  176.         while(1);
  177.        
  178. }
  179. void interrupt_timer1()        interrupt 3
  180. {
  181.           TH1 = 0xFC;
  182.           TL1 = 0x67;
  183.           counter++;
  184.           if(counter == speed)
  185.              {
  186.                          counter = 0;
  187.                         switch(GongNeng())
  188.                         {
  189.                                 case 0:{T += 0;} break;
  190.                                 case 1:{T += 16;if(T >= 176){T= 0;}}break;
  191.                                 case 2:{T += 16;if(T >= 208){T=192;}}break;
  192.                                 case 3:{T += 16;if(T >= 292){T=192;}}break;
  193.                                 case 4:{T +=  1;if(T >= 176){T= 16;}}break;
  194.                                 case 5:{T +=  1;if(T >= 288){T=192;}}break;
  195.                                 case 6:{T += 1;if(T>=176)T = 16;} break;
  196.                                 case 7:{T += 1;if(T>=288)T = 192;} break;
  197.                                 case 8:{T += 16;if(T>=192)T = 16;} break;
  198.                                 case 9:{T += 16;if(T>=292)T = 192;} break;
  199.                                 default: break;
  200.                         }
  201.            /* if(GongNeng() == 1)
  202.                         {                       
  203.                         T += 16;
  204.                         if(T >= 176){T=16;}
  205.                     }
  206.                         if(GongNeng() == 2)
  207.                         {                       
  208.                         T += 16;
  209.                         if(T >= 192){T=176;}
  210.                     }
  211.                         if(GongNeng() == 3)
  212.                         {
  213.                         T += 16;
  214.                         if(T >=272){T=176;}
  215.                     }
  216.                         if(GongNeng() == 4)
  217.                         {                       
  218.                         T += 1;
  219.                         if(T >= 160){T=16;}
  220.                     }
  221.                         if(GongNeng() == 5)
  222.                         {                       
  223.                         T += 1;
  224.                         if(T >= 256){T=176;}
  225.                     }*/
  226.                  }
  227.           refresh_led();
  228.                                                  
  229. }
复制代码



单片机16x16点阵源程序
51黑论坛_点阵显示汉字程序.rar (43.06 KB, 下载次数: 36)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:407148 发表于 2018-10-9 17:41 | 显示全部楼层


谢谢楼主了哈~
回复

使用道具 举报

ID:145395 发表于 2016-10-31 22:26 | 显示全部楼层
厉害啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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