找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机彩屏时钟源码

[复制链接]
跳转到指定楼层
楼主

全部源码下载:
彩屏时钟.zip (79.04 KB, 下载次数: 27)


单片机源程序:
  1. #include<reg52.h>
  2. #include"NBCTFT.h"
  3. #include"math.h"
  4. unsigned int Device_code;
  5. extern uchar Mark;
  6. uint *p1,*p2;
  7. uint dd;
  8. uint count;
  9. uint S[10],H[10],H1[60],S1[60],H2[60],S2[60];
  10. uint j=0,m=0;
  11. void timer0(void)
  12. {
  13.     TH1=0xFC;
  14.         TL1=0x17;
  15.         TMOD=0x10;
  16.         ET1=1;
  17.         EA=1;
  18.         TR1=1;
  19. }
  20. void HZ_init(uint dat1,uint dat2,uchar *p)//  16*16汉字  从低位到高位
  21. {
  22.         unsigned int i,j;
  23.         unsigned int temp;
  24.         unsigned int x,y;//
  25.         x=dat1;
  26.         y=dat2;
  27.         for(i=0;i<32;i++)
  28.         {   
  29.                 temp=*(p++);//
  30.                 if((i%2==0)&&(i!=0))//
  31.                 {
  32.           y++;//
  33.                 }
  34.                 for(j=0;j<8;j++)//
  35.                 {   
  36.                         if(temp&0x01==1)//
  37.                         {
  38.                Put_pixel(x,y,0xFFFF);//
  39.                         }
  40.                         else
  41.                         {
  42.                             Put_pixel(x,y,0xFFFF);//
  43.                         }  
  44.                         temp>>=1;//
  45.                         if(x==(dat1+16))//
  46.                         {
  47.                                 x=dat1;
  48.                         }
  49.                         if(y==(dat2+16))
  50.                         {
  51.                                 y=dat2;
  52.                         }
  53.                 }
  54.         }
  55. }
  56. void DispCharAt(uint x,uint y,uchar *S)//8*16字符  从低位到高位
  57. {
  58.      uint temp,i,j,dat;
  59.           dat=x;
  60.          for(i=0;i<16;i++)
  61.          {
  62.             y++;
  63.                 temp=*S++;
  64.             for(j=0;j<8;j++)
  65.                 {
  66.                     if(temp&(1<<0))
  67.                         {
  68.                           Put_pixel(x++,y,0xFFFF);
  69.                         }
  70.                         else
  71.                         {
  72.                           Put_pixel(x++,y,0xFFFF);
  73.                         }
  74.            }
  75.            x=dat;
  76.         }
  77. }
  78. void Fill_Rect(uint x1,uint y1,uint x2,uint y2,uint color)//填充一个矩形
  79. {
  80.      uint DX,DY,i,j,temp,dat;
  81.          DX=x2-x1;
  82.          DY=y2-y1;
  83.          if(DX<0)
  84.          {
  85.            dat=x1;
  86.            x2=x1;
  87.            x1=x2;
  88.          }
  89.          temp=x1;
  90.          if(DY<0)
  91.          {
  92.            dat=y1;
  93.            y2=y1;
  94.            y1=dat;
  95.          }
  96.          DX=abs(DX);
  97.          DY=abs(DY);
  98.          for(i=0;i<DY;i++)
  99.          {
  100.             y1++;
  101.                 for(j=0;j<DX;j++)
  102.                 {
  103.                    Put_pixel(x1++,y1,color);
  104.                 }
  105.                 x1=temp;
  106.          }
  107. }
  108. void Draw_Line(uint x1,uint y1,uint x2,uint y2,uint color)
  109. {
  110.           unsigned int i,Flag,temp,x,y;
  111.           int DX,DY;
  112.           int s1,s2,e;
  113.           DX=x2-x1;
  114.           DY=y2-y1;
  115.           x=x1;
  116.           y=y1;
  117.           if(x2<x1)
  118.                 {
  119.                         s1=-1;
  120.                 }
  121.                 else
  122.                 {
  123.                         s1=1;
  124.                 }
  125.                 if(y2<y1)
  126.                 {
  127.                         s2=-1;
  128.                 }
  129.                 else
  130.                 {
  131.                         s2=1;
  132.                 }
  133.                 if(DX<0)
  134.                 {
  135.                         DX=-DX;
  136.                 }
  137.                 if(DY<0)
  138.                 {
  139.                         DY=-DY;
  140.                 }
  141.                 if(DX<DY)
  142.                 {
  143.                           temp=x1;
  144.        x1=x2;
  145.        x2=temp;
  146.       
  147.        temp=y1;
  148.        y1=y2;
  149.        y2=temp;
  150.       
  151.        temp=DX;
  152.        DX=DY;
  153.        DY=temp;
  154.                          Flag=0;
  155.     }       
  156.     else
  157.                 {
  158.        Flag=1;
  159.     }
  160.                 e=2*DY-DX;
  161.                 for(i=0;i<DX;i++)
  162.                 {
  163.                      *p1=x;
  164.                          *p2=y;
  165.                           p1++;
  166.                           P2++;
  167.                          Put_pixel(x,y,color);
  168.                          if(e>=0)
  169.                          {
  170.                                  if(Flag==1)
  171.                                  {
  172.                                          y+=s2;
  173.                                  }
  174.                                  else
  175.                                  {
  176.                                          x+=s1;
  177.                                  }
  178.                                  e=e-2*DX;
  179.                          }
  180.                          if(Flag==1)
  181.                          {
  182.                                  x+=s1;
  183.                          }
  184.                          else
  185.                          {
  186.                                  y+=s2;
  187.                          }
  188.                          e=e+2*DY;
  189.                  }
  190.                  
  191. }
  192. void Point(uint x0,uint y0,int x,int y,uint color)
  193. {
  194.            Put_pixel(x0+x,y0+y,color);
  195.            Put_pixel(x0-x,y0+y,color);
  196.            Put_pixel(x0+x,y0-y,color);
  197.            Put_pixel(x0-x,y0-y,color);
  198.            Put_pixel(x0+y,y0+x,color);
  199.            Put_pixel(x0-y,y0+x,color);
  200.            Put_pixel(x0+y,y0-x,color);
  201.            Put_pixel(x0-y,y0-x,color);
  202. }
  203. void Draw_Circle(uint x0,uint y0,uint r)
  204. {
  205.           int x,y;
  206.           float d;
  207.           x=0;
  208.           y=r;
  209.           d=(5.0/4.0)-r;
  210.           while(x<=y)
  211.                 {
  212.                          Point(x0,y0,x,y,0xF81F);
  213.                          if(d<0)
  214.                          {
  215.                                   d+=x*2.0+3.0;
  216.                          }
  217.                          else
  218.                          {
  219.                                  d+=2.0*(x-y)+5.0;
  220.                                  y--;
  221.                          }
  222.                          x++;
  223.                          
  224.                  }
  225. }
  226. void Draw_Section(uint x0,uint y0,uint r)
  227. {
  228.           int x,y,j=0,i=0;
  229.           float d;
  230.           x=0;
  231.           y=r;
  232.           d=(5.0/4.0)-r;
  233.           while(x<=y)
  234.                 {
  235.                     if(x%8==0)
  236.                         {
  237.                           S[j++]=y;
  238.                           H[i++]=x;
  239.                           Point(x0,y0,x,y,0xFFFF);
  240.                         }
  241.                          if(d<0)
  242.                          {
  243.                                   d+=x*2.0+3.0;
  244.                          }
  245.                          else
  246.                          {
  247.                                  d+=2.0*(x-y)+5.0;
  248.                                  y--;
  249.                          }
  250.                          x++;
  251.                          
  252.                  }
  253. }
  254. void main(void)//新的分针会被秒针给描掉
  255. {
  256.    uint i;
  257.    timer0();
  258.    Device_code=0x9328;
  259.    TFT_Initial();
  260.    CLR_Screen(0x0000);
  261.    Draw_Circle(120,160,110);
  262.    Point(120,160,80,46,0xF81F);
  263.    Put_pixel(120,65,0xF81F);
  264.    Put_pixel(215,160,0xF81F);
  265.    Put_pixel(120,255,0xF81F);
  266.    Put_pixel(25,160,0xF81F);
  267.    Draw_Section(120,160,80);
  268.    for(i=0;i<8;i++)//第一象限前部分
  269.          {
  270.              H1[j]=120+H[i];
  271.                  S1[j]=160-S[i];
  272.                  H2[j]=120+H[i]/2;
  273.                  S2[j]=160-S[i]/2;
  274.                  j++;
  275.          }
  276.    for(i=7;i>0;i--)//第一象限后部分
  277.           {
  278.              H1[j]=120+S[i];
  279.                  S1[j]=160-H[i];
  280.                  H2[j]=120+S[i]/2;
  281.                  S2[j]=160-H[i]/2;
  282.                  j++;
  283.           }
  284.    for(i=0;i<8;i++)//第二项限前部分
  285.           {
  286.               H1[j]=120+S[i];
  287.                   S1[j]=160+H[i];
  288.                   H2[j]=120+S[i]/2;
  289.                   S2[j]=160+H[i]/2;
  290.                   j++;
  291.           }
  292.    for(i=7;i>0;i--)//第二项限后部分
  293.           {
  294.               H1[j]=120+H[i];
  295.                   S1[j]=160+S[i];
  296.                   H2[j]=120+H[i]/2;
  297.                   S2[j]=160+S[i]/2;
  298.                   j++;
  299.           }
  300.    for(i=0;i<8;i++)//第三项限前部分
  301.           {
  302.               H1[j]=120-H[i];
  303.                   S1[j]=160+S[i];
  304.                   H2[j]=120-H[i]/2;
  305.                   S2[j]=160+S[i]/2;
  306.                   j++;
  307.           }
  308.   for(i=7;i>0;i--)//第三项限后部分
  309.           {
  310.               H1[j]=120-S[i];
  311.                   S1[j]=160+H[i];
  312.                   H2[j]=120-S[i]/2;
  313.                   S2[j]=160+H[i]/2;
  314.                   j++;
  315.           }
  316.    for(i=0;i<8;i++)//第四项限前部分
  317.           {
  318.               H1[j]=120-S[i];
  319.                   S1[j]=160-H[i];
  320.                   H2[j]=120-S[i]/2;
  321.                   S2[j]=160-H[i]/2;
  322.                   j++;
  323.           }
  324.    for(i=7;i>0;i--)//第四项限后部分
  325.           {
  326.               H1[j]=120-H[i];
  327.                   S1[j]=160-S[i];
  328.                   H2[j]=120-H[i]/2;
  329.                   S2[j]=160-S[i]/2;
  330.                   j++;
  331.           }
  332.    j=0;
  333.    while(1)
  334.    {
  335.    
  336.      
  337.            if(m>=1)
  338.          {
  339.            Draw_Line(120,160,H1[59],S1[59],0x0000);         
  340.            Draw_Line(120,160,H2[m-1],S2[m-1],0x0000);         
  341.          }
  342.           if(j>=1)
  343.          {
  344.            Draw_Line(120,160,H1[j-1],S1[j-1],0x0000);         
  345.          }       
  346.          Draw_Line(120,160,H1[j],S1[j],0xFFFF);
  347.          Draw_Line(120,160,H2[m],S2[m],0xFFFF);          
  348.    }
  349. }
  350. void time(void) interrupt 3
  351. {
  352.    TH1=0xFC;
  353.    TL1=0x17;
  354.    count++;
  355.    if(count==1000)
  356.    {  
  357.       j++;
  358.           count=0;
  359.    }
  360.    if(j==60)
  361.    {
  362.       j=0;
  363.           m++;
  364.    }
  365.    if(m==60)
  366.    {
  367.      m=0;
  368.    }
  369. }
复制代码


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

使用道具 举报

沙发
ID:876149 发表于 2021-1-12 12:43 来自手机 | 只看该作者
没效果图吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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