找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4332|回复: 2
打印 上一主题 下一主题
收起左侧

16*32RGB点阵屏多功能时钟源程序与资料

[复制链接]
跳转到指定楼层
楼主
16*32 RGB点阵时钟、频谱使用说明

一、 控制卡 4 个独立按键使用说明:
1、按键 S1:进入调时模式以及切换年、月、日、星期、时间、亮度自动与手动切换以及补偿时间加减等项目的调整切换
2、按键 S2:进入调时模式时此按键功能为“加” 、不在调时模式时此按键功能为“亮度控制” ,在频谱模式时此按键功能为“顶点颜色切换”
3、按键 S3:进入调时模式时此按键功能为“减” 、不在调时模式时此按键功能为“时钟颜色切换, ”在频谱模式时此按键功能为“柱条颜色切换”
4、按键 S4:在调时模式时“退出时间调整” ,其他模式“频谱与时间模式切换”  
注意:当时钟显示颜色或者频谱显示颜色为全红色时,进入自动切换颜色的模式
二、遥控器使用介绍:
遥控只有 4 个按键可用,等同于独立按键的功能。


电路原理图:


/*********************************** ***************************
-0XC0--0XC1- 显示模式
-0XC2--0XC3- 速度
-0XC4--0XC5- 亮度
-0XC6--0XC7  用于闹钟总开关
每个闹钟占用DS1302的三个RAM,从第5个RAM开始使用。
-0XC8--0XC9-亮度自动控制
-0XCA--0XCB-综合模式记忆
-0XCC--0XCD-边框记忆
每三个RAM中的第一个为当前闹钟的开关,
第二个为设置的小时值,第三个为设置的分钟值。
-0XCE--0XCF--0XD0--0XD1--0XD2--0XD3- 1
-0XD4--0XD5--0XD6--0XD7--0XD8--0XD9- 2
-0XDA--0XDB--0XDC--0XDD--0XDE--0XDF- 3
-0XE0--0XE1--0XE2--0XE3--0XE4--0XE5- 4
-0XE6--0XE7--0XE8--0XE9--0XEA--0XEB- 5
-0XEC--0XED- 整点报时
-0XEE--0XEF- 字体(控制)
-0XF0--0XF1- 颜色
-0XF2--0XF3- 湿度修整开关(是加还是减)
-0XF4--0XF5- 湿度修整数值 0-----20%
-0XF6--0XF7- 温度修整开关(是加还是减)
-0XF8--0XF9- 温度修整数值 0-----20度
-0XFA--0XFB- 是否校时的标记*如果是1就校时,0不校时
-0XFC--0XFD- 写入校时的时间量0-----20秒
-0XFE--0XFF- 多字节命令
------宏定义区--------------------------------------------------------------*/

单片机源程序如下:
  1. /***********************************************************
  2. 控制卡  P0=j
  3. 如果有配套控制卡,下载此程序即可显示
  4. 16*32 RGB点阵屏 多功能时钟
  5. 功能说明:上电显示   时:分    20S切换一次流动显示 年月日星期 信息
  6. ***************************P0=j********************************/
  7. /*
  8. 16X32 RGB点阵屏管脚定义
  9. GND     A     ABCD是行扫描信号
  10. GND     B
  11. GND     C
  12. OE      D          OE是屏的使能端  低有效
  13. G       R          R G B 颜色数据信号
  14. B       NC         
  15. GND            STR          锁存信号
  16. GND     SCK         时钟信号
  17. */
  18. /*接口说明*/
  19. //A B C D 是138行扫描信号
  20. // SHCP   是595的移位信号
  21. // STCP   是595的锁存信号
  22. // OE    是屏的使能端 可以控制亮度
  23. // R     是红色信号线
  24. // G     是绿色信号线
  25. // B     是蓝色信号线   
  26. //P0=j  

  27. #include<task.h>
  28. sbit SCK=P2^7;//时钟         
  29. sbit STR=P4^1;//上升沿输出               /*如果用的是普通单片机 没有P4.1口 请改为其他口*/   
  30. sbit SDA_R=P2^4;//红数据  
  31. sbit SDA_G=P2^5;//绿数据
  32. sbit SDA_B=P2^3;//蓝数据  
  33. sbit OE=P0^4;//输出使能

  34. sbit IA=P4^0;//行控制线A                   /*如果用的是普通单片机 没有P4.0口 请改为其他口*/   
  35. sbit IB=P2^0;//行控制线B
  36. sbit IC=P2^1;//行控制线C
  37. sbit ID=P2^2;//行控制线D

  38. void SDA_RS(uchar i) { SDA_R = (bit)i; }
  39. void SDA_GS(uchar i) { SDA_G = (bit)i; }
  40. void SDA_BS(uchar i) { SDA_B = (bit)i; }
  41. void SDA_RGS(uchar i) { SDA_R = (bit)i;SDA_G = (bit)i; }
  42. void SDA_GBS(uchar i) { SDA_G = (bit)i; SDA_B = (bit)i;}
  43. void SDA_BRS(uchar i) { SDA_R = (bit)i;SDA_B = (bit)i; }
  44. void SDA_BGRS(uchar i) { SDA_R = (bit)i; SDA_G = (bit)i;SDA_B = (bit)i;}
  45. void (*SDA_RGB)(uchar);
  46. typedef struct bb
  47. {
  48.     void (*proc)(uchar);
  49. }_ol_;
  50. _ol_ olSet[7] =
  51. {
  52.     SDA_RS,
  53.     SDA_GS,
  54.     SDA_BS,
  55.         SDA_RGS,
  56.     SDA_GBS,
  57.     SDA_BRS,
  58.         SDA_BGRS,
  59.    
  60. };//P0=j
  61. #define  scan0    {IA=0;IB=0;IC=0;ID=0;}
  62. #define  scan1    {IA=1;IB=0;IC=0;ID=0;}
  63. #define  scan2    {IA=0;IB=1;IC=0;ID=0;}
  64. #define  scan3    {IA=1;IB=1;IC=0;ID=0;}
  65. #define  scan4    {IA=0;IB=0;IC=1;ID=0;}
  66. #define  scan5    {IA=1;IB=0;IC=1;ID=0;}
  67. #define  scan6    {IA=0;IB=1;IC=1;ID=0;}
  68. #define  scan7    {IA=1;IB=1;IC=1;ID=0;}
  69. #define  scan8    {IA=0;IB=0;IC=0;ID=1;}
  70. #define  scan9    {IA=1;IB=0;IC=0;ID=1;}
  71. #define scan10    {IA=0;IB=1;IC=0;ID=1;}
  72. #define scan11    {IA=1;IB=1;IC=0;ID=1;}
  73. #define scan12    {IA=0;IB=0;IC=1;ID=1;}
  74. #define scan13    {IA=1;IB=0;IC=1;ID=1;}
  75. #define scan14    {IA=0;IB=1;IC=1;ID=1;}
  76. #define scan15    {IA=1;IB=1;IC=1;ID=1;}
  77. #define NL     12                        //空格地址

  78. void   rxd_data();        // 发送移动数据
  79. void rxd_data(void);                            //串行发送数据
  80. uint time_count=0; //计数
  81. uchar reg;
  82. uchar line;
  83. uchar Mode=0;
  84. uchar Count=0;
  85. uchar SPEED;
  86. void Displaying();
  87. void timebuff();
  88. uchar e=0;
  89. uchar Light=1;
  90. uchar color;
  91. bit Auto_bit=0;
  92. uchar xdata Buffnum=4;
  93. void SECOND_liudonshu(void)        ;
  94. void Adjust_display(void);
  95. void sendRXbyte(unsigned char wdata,unsigned char c,unsigned char n);
  96. uchar BUFF[20];                                   //缓存
  97. uchar code week_data[] ={24,40,42,44,46,48,50,24};  //日一二三四五六日
  98. /***************滚动显示格式数组***********P0=j************************/
  99. uchar xdata  A[60]=         //显示格式
  100. {  NL,NL,NL,NL,NL,NL,NL,NL,                 //开头8个空格 0-7
  101.         14,15,16,17,18,19,                         //今天是8,9,10,11,12,13
  102.         2,0,00,00,                                                 //年数据14,15,16,17
  103.         20,21,                                                        //“年”18,19
  104.         0,0,                                                        //月数据         No.20,21
  105.         22,23,                                                        //“月”22,23
  106.         0,0,                                                        //日数据        No.24,25
  107.         24,25,                                                        //“日”26,27
  108.         NL,                                                 //空格28
  109.         26,27,28,29,                                        //“星期”29,30,31,32
  110.         00,00,                                                        //星期几        No.33,34
  111.         NL,                                                                //空格35
  112. };
  113. uchar code zimo[];
  114. uchar zimuo=0;
  115. uchar offset;
  116. bit half_sec_flag=0;
  117. void in_data(void);                                       //调整数据
  118. //void delay(uchar time);

  119. void delay(uchar time)   //10us
  120. {
  121.     unsigned char a,b,c;
  122.         for(c=time;c>0;c--)
  123.         {
  124.              for(b=30;b>0;b--)
  125.         for(a=3;a>0;a--);
  126.         }
  127. }

  128. /*****不影响其他端口的扫描******P0=j*******************/
  129. void scan(unsigned char Value)
  130. {switch(Value)
  131.         {case  0: scan0;break;
  132.                   case  1: scan1;break;
  133.                    case  2: scan2;break;
  134.                     case  3: scan3;break;
  135.              case  4: scan4;break;
  136.                       case  5: scan5;break;
  137.                        case  6: scan6;break;
  138.                         case  7: scan7;break;
  139.                  case  8: scan8;break;
  140.                        case  9: scan9;break;
  141.                       case 10:scan10;break;
  142.                      case 11:scan11;break;
  143.             case 12:scan12;break;
  144.                   case 13:scan13;break;
  145.                  case 14:scan14;break;
  146.             case 15:scan15;break;
  147.         }
  148. }
  149. /**************************************/

  150. void Timer0Interrupt(void) interrupt 1 //定时器中断
  151. {
  152.    uint read_time;
  153.         TH0 = 0x0F6;
  154.     TL0 = 0x3C;
  155.         if(++read_time>200)
  156.         {
  157.                 read_time=0;
  158.                 read_clockS();    //读时钟数据
  159.                 //KEY_scan();
  160.         }
  161.    if(Mode!=2)                 
  162.    time_count++;
  163.    if(time_count%600==0)
  164.         half_sec_flag=~half_sec_flag;
  165.    if(time_count>42000)//发送一次数据
  166.    {      
  167.        time_count=0;
  168.            Mode=1;
  169.                   
  170.         }
  171.            if(Mode==1)
  172.            {
  173.                    line++; //下一行
  174.                    if(line>15) //共16行
  175.                    {
  176.                             line=0; //重新移动        
  177.                          SPEED++;
  178.                 if(SPEED>5)         
  179.                         {
  180.                         SPEED=1;
  181.                         offset++;
  182.                         }
  183.                               
  184.                     }
  185.          
  186.             //in_data();//调整移动数据
  187.                 //if(Mode==0)
  188.             //

  189.                            Displaying();//移动显示模式
  190.                    //else if(Mode==2)
  191.                    // Adjust_display();//调时模式
  192.                 scan(line); //打开行扫描                                                                                             
  193.                     STR=0;//锁存
  194.                         OE=0;
  195.                         delay(Light*2); //控制亮度
  196.                         OE=1;
  197.                         STR=1;
  198.                 }
  199.                 if(Mode==0)
  200.                 {
  201.                     line++; //下一行
  202.                    if(line>15) //共16行
  203.                    {
  204.                               line=0; //重新移动        
  205.                    }
  206.                             rxd_data();//显示时间模式
  207.                           scan(line); //打开行扫描                                                                                             
  208.                       STR=1;//锁存
  209.                           STR=0;
  210.                           OE=0;
  211.                           delay(Light*2); //控制亮度
  212.                           OE=1;        
  213.                 }
  214. }
  215. void PCA() interrupt 7        //PCA定时器          26ms
  216. {
  217.          
  218.          if( CCF0 )
  219.         {
  220.                
  221.                  CCAP0L = CCAP0L+0x50;
  222.                 CCAP0H = CCAP0H+0xc3; //20ms定时
  223.             CCF0 = 0;
  224.                 time_count++;               
  225.                 if(time_count>6)//
  226.                 {      
  227.                            time_count=0;
  228.                         Count++;
  229. //                        SendByte(Count);
  230.                         if(Count>50)
  231.                         {        
  232.                                 Count=0;                                
  233.                                  reg++;//依次变色
  234.                                    if(reg>7)
  235.                                 {
  236.                                            reg=0;
  237.                                 }        
  238.                         }

  239.                 }
  240.         }
  241.         if(CF)
  242.         {
  243.                 CF=0;
  244.         
  245.         }
  246. }
  247. /***************************P0=j*****************/
  248. void Adjust_display(void)
  249. {
  250.          
  251.          if(e==1)
  252.          {
  253.                  sendRXbyte(hanzi[0][line],0,8); //年
  254.                  sendRXbyte(hanzi[1][line],0,8);
  255.                  sendRXbyte(EC_8X16[yy/10][line],1,8);  
  256.                  sendRXbyte(EC_8X16[yy%10][line],1,8);
  257.                  
  258. //                 sendRXbyte(hanzi[0][line+8],0,8); //年
  259. //                 sendRXbyte(hanzi[1][line+8],0,8);
  260. //                 sendRXbyte(EC_8X16[yy/10][line+8],1,8);  
  261. //                 sendRXbyte(EC_8X16[yy%10][line+8],1,8);
  262.          }
  263.          else if(e==2)
  264.          {
  265.                   sendRXbyte(hanzi[2][line],1,8); //月
  266.                  sendRXbyte(hanzi[3][line],1,8);
  267.                  sendRXbyte(EC_8X16[mo/10][line],0,8);  
  268.                  sendRXbyte(EC_8X16[mo%10][line],0,8);
  269.                  
  270. //                 sendRXbyte(hanzi[2][line+8],1,8); //月
  271. //                 sendRXbyte(hanzi[3][line+8],1,8);
  272. //                 sendRXbyte(EC_8X16[mo/10][line+8],0,8);  
  273. //                 sendRXbyte(EC_8X16[mo%10][line+8],0,8);        
  274.          }
  275.          else if(e==3)
  276.          {
  277.                   sendRXbyte(hanzi[4][line],1,8); //日
  278.                  sendRXbyte(hanzi[5][line],1,8);
  279.                  sendRXbyte(EC_8X16[dd/10][line],2,8);  
  280.                  sendRXbyte(EC_8X16[dd%10][line],2,8);
  281. //                 
  282. //                 sendRXbyte(hanzi[4][line+8],1,8); //日
  283. //                 sendRXbyte(hanzi[5][line+8],1,8);
  284. //                 sendRXbyte(EC_8X16[dd/10][line+8],2,8);  
  285. //                 sendRXbyte(EC_8X16[dd%10][line+8],2,8);        
  286.          }
  287.          else if(e==4)
  288.          {
  289.                   sendRXbyte(hanzi[6][line],0,8); //周
  290.                  sendRXbyte(hanzi[7][line],0,8);
  291.                  sendRXbyte(EC_8X16[week/10][line],2,8);  
  292.                  sendRXbyte(EC_8X16[week%10][line],2,8);
  293.                  
  294. //                 sendRXbyte(hanzi[6][line+8],0,8); //周
  295. //                 sendRXbyte(hanzi[7][line+8],0,8);
  296. //                 sendRXbyte(EC_8X16[week/10][line+8],2,8);  
  297. //                 sendRXbyte(EC_8X16[week%10][line+8],2,8);        
  298.          }        
  299.          else if(e==5)
  300.          {
  301.                   sendRXbyte(hanzi[8][line],1,8);//时
  302.                  sendRXbyte(hanzi[9][line],1,8);
  303.                  sendRXbyte(EC_8X16[hh/10][line],0,8);  
  304.                  sendRXbyte(EC_8X16[hh%10][line],0,8);
  305. //                 
  306. //                 sendRXbyte(hanzi[8][line+8],1,8);//时
  307. //                 sendRXbyte(hanzi[9][line+8],1,8);
  308. //                 sendRXbyte(EC_8X16[hh/10][line+8],0,8);  
  309. //                 sendRXbyte(EC_8X16[hh%10][line+8],0,8);        
  310.          }
  311.          else if(e==6)
  312.          {
  313.                   sendRXbyte(hanzi[10][line],0,8);//分
  314.                  sendRXbyte(hanzi[11][line],0,8);
  315.                  sendRXbyte(EC_8X16[mm/10][line],2,8);  
  316.                  sendRXbyte(EC_8X16[mm%10][line],2,8);
  317.                  
  318. //                 sendRXbyte(hanzi[10][line+8],0,8);//分
  319. //                 sendRXbyte(hanzi[11][line+8],0,8);
  320. //                 sendRXbyte(EC_8X16[mm/10][line+8],2,8);  
  321. //                 sendRXbyte(EC_8X16[mm%10][line+8],2,8);        
  322.          }
  323.          else if(e==7)
  324.          {
  325.                   sendRXbyte(hanzi[12][line],1,8);//秒
  326.                  sendRXbyte(hanzi[13][line],1,8);
  327.                  sendRXbyte(EC_8X16[ss/10][line],2,8);  
  328.                  sendRXbyte(EC_8X16[ss%10][line],2,8);
  329. //                 
  330. //                 sendRXbyte(hanzi[12][line+8],1,8);//秒
  331. //                 sendRXbyte(hanzi[13][line+8],1,8);
  332. //                 sendRXbyte(EC_8X16[ss/10][line+8],2,8);  
  333. //                 sendRXbyte(EC_8X16[ss%10][line+8],2,8);        
  334.          }
  335.          else if((e==8)||(e==9))
  336.          {
  337.                   if(read_clock(10,TimeCH_OCHARGE) == 1) //时间补偿加/减显示
  338.                  {
  339.                          sendRXbyte(hanzi[14][line],1,8);//加
  340.                          sendRXbyte(hanzi[15][line],1,8);
  341.                          sendRXbyte(EC_8X16[read_clock(10,TimeCH_NumTime)/10][line],2,8);  
  342.                          sendRXbyte(EC_8X16[read_clock(10,TimeCH_NumTime)%10][line],2,8);
  343. //                        
  344. //                         sendRXbyte(hanzi[14][line+8],1,8);//加
  345. //                         sendRXbyte(hanzi[15][line+8],1,8);
  346. //                         sendRXbyte(EC_8X16[read_clock(10,TimeCH_NumTime)/10][line+8],2,8);  
  347. //                         sendRXbyte(EC_8X16[read_clock(10,TimeCH_NumTime)%10][line+8],2,8);
  348.                  }
  349.                  else if(read_clock(10,TimeCH_OCHARGE) == 0)
  350.                  {
  351.                           sendRXbyte(hanzi[16][line],1,8);//减
  352.                          sendRXbyte(hanzi[17][line],1,8);
  353.                          sendRXbyte(EC_8X16[read_clock(10,TimeCH_NumTime)/10][line],0,8);  
  354.                          sendRXbyte(EC_8X16[read_clock(10,TimeCH_NumTime)%10][line],0,8);
  355.                         
  356. //                         sendRXbyte(hanzi[16][line+8],1,8);//减
  357. //                         sendRXbyte(hanzi[17][line+8],1,8);
  358. //                         sendRXbyte(EC_8X16[read_clock(10,TimeCH_NumTime)/10][line+8],0,8);  
  359. //                         sendRXbyte(EC_8X16[read_clock(10,TimeCH_NumTime)%10][line+8],0,8);        
  360.                  }        
  361.          }
  362.          /*************************************************/

  363. }
  364. /**************************P0=j****************/
  365. void SendByte(unsigned char dat)
  366. {
  367.          SBUF = dat;
  368.          while(!TI);
  369.       TI = 0;
  370. }
  371. /*************************************************************/
  372. void show_menu(void)
  373. {
  374.                 for(line=0;line<16;line++)
  375.                         {
  376.                                 //for(Mspeed=0;Mspeed<1;Mspeed++)
  377.                                 //{
  378.                                         Adjust_display();//调时模式
  379.                                 scan(line); //打开行扫描                                                                                             
  380.                                     STR=1;//锁存
  381.                                     STR=0;
  382.                                         OE=0;
  383.                                         delay(5);
  384.                                         OE=1;
  385.                                 //}
  386.                         }
  387.                         
  388. }
  389. /******************************P0=j**********************/
  390. /*主函数*/
  391. void main()
  392. {  
  393.         //uchar Mspeed=0;
  394.   SCON = 0x50;
  395.   BRT= 0xf8;  //0xfb: 30MHz,12T,SMOD=0,9600bps
  396.   AUXR   |= 0x11;        // 使用独立波特率发生器
  397.   TMOD=0x01; //定时器0 16位定时定时器1方式2
  398.   TH0 = 0x0F6;
  399.   TL0 = 0x3C;
  400.   OE=0;
  401.   TR0=1; //开定时器计数
  402.   ET0=1; //开定时器中断
  403.   EA=1;         //开中断
  404. DS1302_Initial();
  405.   SendByte(0x55);
  406.   Light=11;//亮度
  407. // color=0;//显示颜色
  408.    while(1)  
  409.    {
  410.                 KEY_scan();        //扫描按键
  411.                 TimeCHck();        //时间补偿
  412.                 if(ADJ==1)
  413.                 {
  414.                         ADJ=0xFF;
  415.                         Mode=2;
  416.                         //TR0=0;
  417.                         //DS1302_TimeStop(1);  //只有调时间时,时钟停
  418.                         e++;
  419.                         if(e>9)
  420.                         e=1;
  421.                 }
  422.                 if(Mode==2)        //如果是调时模式
  423.                 {
  424.                         if(ADJ==2)
  425.                         {
  426.                                 //ADJ=0xFF;
  427.                         //        SendByte(2);
  428.                                 //EA=0;
  429.                                 Set_time(e); //调整
  430.                         //        EA=1;
  431.                         
  432.                         }
  433.                         if(ADJ==3)
  434.                         {
  435.                         //        ADJ=0XFF;
  436.                                 //SendByte(3);
  437.                                 //EA=0;
  438.                                 Set_time(e); //调整
  439.                                 //EA=1;
  440.                                 
  441.                         }
  442.                         if(ADJ==4)
  443.                         {
  444.                                 Mode=0;
  445.                                 
  446.                                 e=0;
  447.                                 ADJ=0XFF;
  448.                         //        SendByte(4);
  449.                                         TR0=1;
  450.                                 //DS1302_TimeStop(0);  //只有调时间时,时钟停
  451.                         }
  452.                                 show_menu();
  453.                 }
  454.         
  455.    }
  456. }         
  457. /***********************************P0=j**********************************************************
  458. 函数名:Pwritekong();
  459. 调  用:
  460. 参  数:无
  461. 返回值:无
  462. 结  果:送空数据
  463. 备  注:
  464. /**********************************************************************************************/
  465. void writekong()  //送空数据
  466. {
  467.     SDA_R=SDA_G=SDA_B=0;
  468.     SCK=0;     
  469.     SCK=1;
  470. }
  471. /*********************************************************************************************
  472. 函数名:writemao();
  473. 调  用:
  474. 参  数:无
  475. 返回值:无
  476. 结  果:送红数据
  477. 备  注:
  478. /**********************************************************************************************/
  479. void writemao(uchar dat)  //送中间秒闪烁数据
  480. {
  481.    uchar i;
  482.    SDA_R=SDA_G=SDA_B=0;
  483. for(i=0;i<2;i++)     
  484.   {
  485.     dat=dat<<1;
  486.     SDA_B=CY;
  487.     SCK=0;     
  488.     SCK=1;
  489.   }
  490. }
  491. /*********************************************************************************************
  492. 函数名: 任意位数任意颜色74HC595程序
  493. 调  用:writeda(uchar dat,uchar n,uchar clour)
  494. 参  数:无
  495. 返回值:无
  496. 结  果:
  497. 备  注:
  498. /**********************************************************************************************/
  499. void writeda(uchar dat,uchar n,uchar clour) { //送数据
  500.           uchar i;
  501.           SDA_R= SDA_G= SDA_B=0;
  502.          for(i=0;i<n;i++) {
  503.      switch(n) {
  504.                             case  3:
  505.                                    if(clour==0){SDA_R=dat&0x10;}
  506.                                    if(clour==1){SDA_G=dat&0x10;}
  507.                                    if(clour==2)SDA_B=dat&0x10;break;         
  508.                            case  4:
  509.                                    if(clour==0){SDA_R=dat&0x20;}
  510.                                    if(clour==1){SDA_G=dat&0x20;}
  511.                                    if(clour==2)SDA_B=dat&0x20;break;         
  512.                             case  5:
  513.                                    if(clour==0){SDA_R=dat&0x20;}
  514.                                    if(clour==1){SDA_G=dat&0x20;}
  515.                                    if(clour==2)SDA_B=dat&0x20;break;
  516.                            case  6:
  517.                                    if(clour==0){SDA_R=dat&0x40;}
  518.                                    if(clour==1){SDA_G=dat&0x40;}
  519.                                    if(clour==2)SDA_B=dat&0x40;break;
  520.                            case  8:
  521.                                    if(clour==0){SDA_R=dat&0x80;}
  522.                                    if(clour==1){SDA_G=dat&0x80;}
  523.                                    if(clour==2)SDA_B=dat&0x80;break;
  524.                                  }
  525.                     dat=dat<<1;
  526.                 SCK=0;     
  527.                 SCK=1;
  528.                         }}
  529. /***********************发送数据****************************/
  530. void rxd_data(void)        //串行发送数据
  531. {
  532.           // read_clockS();    //读时钟数据
  533.          uchar Hourcolor,miaocolor,mincolor;
  534.          switch (color)
  535.          {
  536.                  case 0:
  537.                         Hourcolor=0;
  538.                         miaocolor=1;
  539.                         mincolor=1;
  540.                         break;
  541.                 case 1:
  542.                         Hourcolor=1;
  543.                         miaocolor=1;
  544.                         mincolor=0;
  545.                         break;

  546.                 case 2:
  547.                         Hourcolor=1;
  548.                         miaocolor=0;
  549.                         mincolor=2;
  550.                         break;
  551.                 case 3:
  552.                         Hourcolor=1;
  553.                         miaocolor=2;
  554.                         mincolor=0;
  555.                         break;
  556.                         /**************4为自动切换颜色模式*****P0=j***************/
  557.            case 4:                 
  558.                         Hourcolor=0;
  559.                         miaocolor=0;
  560.                         mincolor=0;
  561.                         break;
  562.                 default:
  563.                         break;
  564.         }   
  565.         if(line<8)
  566.         {
  567.                   OE=1;
  568.                   writekong();
  569.                   writeda(table[hh/10*8+line],6,Hourcolor);            
  570.                   writekong();
  571.               writeda(table[hh%10*8+line],6,Hourcolor);            
  572.                   writekong();
  573.               if(half_sec_flag)
  574.               writemao(table[80+line]);
  575.               else
  576.               writemao(0x00);                             
  577.                   writekong();
  578.               writeda(table[mm/10*8+line],6,mincolor);            
  579.                   writekong();
  580.               writeda(table[mm%10*8+line],6,mincolor);
  581.                   writekong();
  582.           }
  583. /***************************P0=j********************************/
  584.          else
  585.     {
  586.                    writekong();
  587.                   writeda(table1[hh/10*8+line-8],6,Hourcolor);              
  588.                   writekong();
  589.               writeda(table1[hh%10*8+line-8],6,Hourcolor);              
  590.                   writekong();
  591.               
  592.               if(half_sec_flag)
  593.               writemao(table[80+line-8]);
  594.               else
  595.               writemao(0x00);                              
  596.                   writekong();
  597.         
  598.               writeda(table1[mm/10*8+line-8],6,mincolor);            
  599.                   writekong();
  600.               writeda(table1[mm%10*8+line-8],6,mincolor);            
  601.                   writekong();        
  602.           }

  603. }
  604. /*;*************************P0=j******************************************************
  605. ;程序名称:sendRXbyte(uchar wdata,uchar c,uchar n)
  606. ;功能:选择将要送入首地址的值.
  607. ;输入:R2. sendRXbyte(hanzi[hour/10][i],3,8)橙色数据8位
  608. ;输出:无. sendRXbyte(hanzi[hour/10][i],2,8)红色数据8位
  609. ;影响:无. sendRXbyte(hanzi[hour/10][i],1,8)绿色数据8位
  610. ;修改日期:2010.05.15----b 字模数据,c颜色,n 发送位数(0-8)
  611. ;*********************************************************************************/
  612. void sendRXbyte(unsigned char wdata,unsigned char c,unsigned char n)
  613. {   unsigned char i;
  614.         SDA_R=SDA_G=SDA_B=0;
  615.     for(i=0; i<n; i++)           //字符位数8位
  616.     {   switch(c)
  617.         {
  618.          /*-------------------------------------------------红-------*/
  619.         case 0:SDA_R=(bit)(wdata&0x80);break;
  620.         /*---------------------------------------------------绿-----*/
  621.         case 1:SDA_G=(bit)(wdata&0x80);break;
  622.         /*----------------------------------------------------黄----*/
  623.         case 2:SDA_B=(bit)(wdata&0x80);break;
  624.         /*--------------------------------------------------------*/
  625.         default:break;
  626.         }
  627.         SCK=0;           //时钟拉高,产生上升沿
  628.         SCK=1;           //时钟拉低
  629.         wdata <<=1;    //左移一位
  630.     }
  631. }
  632. /*********************************************************************************************
  633. 函数名:Displaying()
  634. 调  用:
  635. 结  果:
  636. /**********************************************************************************************/
  637. void Displaying()                {//送显示数据                 

  638. time_count=0;
  639. ……………………

  640. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
16X32 RGB 点阵.zip (1.53 MB, 下载次数: 114)






评分

参与人数 2黑币 +55 收起 理由
qjzyx + 5 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:341120 发表于 2018-6-4 22:12 | 只看该作者
亮度自动调节怎么没有看见光敏电阻
回复

使用道具 举报

板凳
ID:309376 发表于 2018-6-4 22:50 | 只看该作者
不错哦
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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