久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3911|回復: 5
收起左側

16x32 P10廣告屏點陣任意位置畫點畫線 單片機程序

  [復制鏈接]
ID:168911 發表于 2021-6-5 20:45 | 顯示全部樓層 |閱讀模式
16x32  P10廣告屏點陣任意位置畫點畫線,點陣直接用P10單紅門頭廣告屏,省去了自己焊接,刷了一個時鐘走時程序,圖片中間點是秒閃,
用的是12c5a60s2。

IMG_20210605_201947_HHT[1].jpg IMG_20210605_201950_HHT[1].jpg

單片機源程序如下:
#include <REG52.h>
#include<intrins.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int

#define BB P3
sbit SHCP=P2^3;        // 移位時鐘
sbit STCP=P2^4;        // 鎖存時鐘
sbit DATA=P2^5;       // 數據輸出
sbit OE = P2^0;           // 使能輸出

uchar PLAYBUF[64];
uchar a,b;

uchar sec=0,min=0,timecount=0;
bit point;

void serial_input(uchar dat);
void LED_dot_write(uchar x,uchar y,uchar c);
void line(uchar  x1, uchar  y1, uchar  x2, uchar  y2, uchar c);
void number(uchar su,uchar x,uchar y,uchar c);

void display();

/****************************************************/

void main()
{      
    EA = 1;
    TMOD=0x01;   //timer0為模式1  
    TH0 = 0x4c;
    TL0 = 0x00;
   
    ET0 = 1;
    TR0 = 1;   //定時器0可以工作
   
    while(1)
    {   
           a=sec-1;b=min-1;
        
        number(sec/10,17,0,1);
        number(sec%10,25,0,1);
        number(min/10,0,0,1);
        number(min%10,8,0,1);
        line(15,4,15,5,2);
        line(16,4,16,5,2);
        line(15,9,15,10,2);
        line(16,9,16,10,2);
        display();
        
        number(a/10,17,0,0);
        number(a%10,25,0,0);
        number(b/10,0,0,0);
        number(b%10,8,0,0);
    }
}
/************數據串行輸入 *************************/
void serial_input(uchar dat)     
{
    unsigned char m = 0x00;
    for(m=0X00;m<8;m++)
    {
        DATA=~dat&0x80;
        SHCP=1;
        SHCP=0;
        dat<<=1;  
    }
}
/******************任意位置畫點******************************************/
void LED_dot_write(uchar x,uchar y,uchar c)
{
    uchar i;

    if(x>=32) return;
    if(y>=16) return;
    i=0x80;
    i>>=x-((x>>3)<<3);
    switch(c)
    {
        case 0:PLAYBUF[(y<<1)+((x>>4)<<5)+((x>>3)&0x01)] &= ~i;break;
        case 1:PLAYBUF[(y<<1)+((x>>4)<<5)+((x>>3)&0x01)] |= i;break;
        case 2:if(point)PLAYBUF[(y<<1)+((x>>4)<<5)+((x>>3)&0x01)] |= i;
               else PLAYBUF[(y<<1)+((x>>4)<<5)+((x>>3)&0x01)] &= ~i;break;
        default: break;
    }                  
}

/*****************任意位置畫線******************************************/
void line(uchar  x1, uchar  y1, uchar  x2, uchar  y2, uchar c)
{
    uchar  x, y, t;
    if((x1 == x2) && (y1 == y2))
    LED_dot_write(x1, y1, c);
    else if(fabs(y2 - y1) > fabs(x2 - x1))
    {
        if(y1 > y2)
        {               
            t = y1;
            y1 = y2;
            y2 = t;
            t = x1;
            x1 = x2;
            x2 = t;
        }
        for(y = y1; y <= y2; y ++)
        {
            x = (y - y1) * (x2 - x1) / (y2 - y1) + x1;
            LED_dot_write(x, y, c);
        }
    }
    else
    {
        if(x1 > x2)              
        {
            t = y1;
            y1 = y2;
            y2 = t;
            t = x1;
            x1 = x2;
            x2 = t;
        }
        for(x = x1; x <= x2; x ++)
        {
            y = (x - x1) * (y2 - y1) / (x2 - x1) + y1;
            LED_dot_write(x, y, c);
        }
    }
}
/*********************任意位置畫數字*********************************************************/
void number(uchar su,uchar x,uchar y,uchar c)
{
     if(su==0)
    {        
           line(x,y+4,x,y+10,c);      
        line(x+1,y+3,x+5,y+3,c);      
        line(x+6,y+4,x+6,y+10,c);      
        line(x+1,y+11,x+5,y+11,c);      
        line(x+1,y+9,x+5,y+5,c);      
    }
    if(su==2||su==3||su==5||su==6||su==8||su==9)
    {
          line(x+1,y+7,x+5,y+7,c);
          if(su==5||su==8||su==9)
          {
               line(x,y+4,x,y+6,c);  
               if(su==5)
            {
                   line(x+1,y+3,x+6,y+3,c);
                line(x+6,y+8,x+6,y+10,c);  
                line(x,y+11,x+5,y+11,c);
            }
               if(su==8)
            {
                   line(x+1,y+3,x+5,y+3,c);  
                line(x+1,y+11,x+5,y+11,c);
                line(x,y+8,x,y+10,c);  
                line(x+6,y+4,x+6,y+6,c);  
                line(x+6,y+8,x+6,y+10,c);
            }
            if(su==9)
            {
                   line(x+1,y+3,x+5,y+3,c);   
                line(x,y+11,x+5,y+11,c);
                line(x+6,y+4,x+6,y+10,c);  
            }   
         }
        if(su==2)
        {
               line(x,y+3,x+5,y+3,c);
            line(x+6,y+4,x+6,y+6,c);  
            line(x,y+8,x,y+10,c);
            line(x+1,y+11,x+6,y+11,c);
        }
        if(su==3)
        {
               line(x,y+3,x+5,y+3,c);  
            line(x+6,y+4,x+6,y+6,c);  
            line(x+6,y+8,x+6,y+10,c);
            line(x,y+11,x+5,y+11,c);
        }
        if(su==6)
        {
               line(x+1,y+3,x+6,y+3,c);  
            line(x,y+4,x,y+10,c);
            line(x+6,y+8,x+6,y+10,c);
            line(x+1,y+11,x+5,y+11,c);
        }
    }
    if(su==1||su==4||su==7)
    {   
        line(x+6,y+3,x+6,y+11,c);
        if(su==4)
        {   
            line(x,y+3,x,y+6,c);
            line(x+1,y+7,x+5,y+7,c);
        }
        if(su==7)
        {   
            LED_dot_write(x+6,y+3,0);
            line(x,y+3,x+5,y+3,c);
        }     
    }
}
/***************整屏顯示*************************************************/
void display()
{
    uchar i = 0x00;
    uchar j = 0X00;   
    uchar k = 0x00;
    uchar buf;
    uchar COUNT;
    for(k=0;k<4;k++)              
    {   
        for(j=0;j<2;j++)         
        {
            for(i=0;i<2;i++)      
            {
                buf = PLAYBUF[24+(k<<1)+i+(j<<5)];serial_input(buf);
                buf = PLAYBUF[16+(k<<1)+i+(j<<5)];serial_input(buf);
                buf = PLAYBUF[8+(k<<1)+i+(j<<5)];serial_input(buf);
                buf = PLAYBUF[(k<<1)+i+(j<<5)];    serial_input(buf);
            }
        }
        STCP=1;   
        STCP=0;
        BB=k;
        OE=1;
           COUNT =200;
        while(COUNT--);
        OE =0;   
    }  
}
/****************************************************/
void time50ms(void) interrupt 1
{
       TH0 = 0x4c;
    TL0 = 0x00;
   
    timecount++;
     
    if(timecount==10)   
    {   
            
        timecount=0;
         point=!point;   
          if(point)   
          {   
              sec++;
        }
        if(sec>59)
        {
            sec=0;
            min++;
        }
        if(min>59)
        min=0;
    }   
}
/**************************************************/

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:885138 發表于 2021-6-6 10:47 來自觸屏版 | 顯示全部樓層
厲害了,樓主電路圖有嗎
回復

使用道具 舉報

ID:168911 發表于 2021-6-6 18:57 | 顯示全部樓層
xxd0708 發表于 2021-6-6 10:47
厲害了,樓主電路圖有嗎

這個不用電路圖也可以,只要對應管腳就可以,這個放心好了
回復

使用道具 舉報

ID:1002257 發表于 2022-1-28 20:17 | 顯示全部樓層
這個怎么接51版
回復

使用道具 舉報

ID:168911 發表于 2022-6-25 21:11 | 顯示全部樓層

595移位,鎖存,數據,OE,掃描,
回復

使用道具 舉報

ID:1112603 發表于 2024-6-8 13:59 | 顯示全部樓層
這個程序為點陣的使用提供了一個別樣思路,真不錯!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美一区在线 | 日韩视频在线免费观看 | 成人在线播放网址 | 成人一区二区三区 | 精品99久久 | 狠狠躁躁夜夜躁波多野结依 | 亚洲一区二区免费电影 | 精品国产伦一区二区三区观看方式 | 国产一级在线 | 欧美一卡二卡在线观看 | 国产在线观看一区 | 免费国产精品久久久久久 | 国产日韩精品在线 | 91国内产香蕉 | 在线观看国产视频 | 亚洲成人三级 | 99久久久久国产精品免费 | 毛片免费看 | 欧美三级视频 | 国产精品视频在线免费观看 | 久久精品久久久 | 成人免费一区二区三区牛牛 | 免费在线观看av网站 | 国产成人精品一区二区三 | 亚洲精品久久久久中文字幕二区 | 日日日操 | 99免费 | 日韩成人免费视频 | 在线观看你懂的网站 | 欧美日本韩国一区二区 | 亚洲高清一区二区三区 | 欧美国产91 | 成人欧美一区二区三区黑人孕妇 | 在线视频亚洲 | 伊人成人免费视频 | 日韩在线日韩 | 一色一黄视频 | 国产精品久久久久久久久久免费 | 精品成人免费一区二区在线播放 | 久久久久久国产精品免费免费狐狸 | 午夜精品一区二区三区三上悠亚 |