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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3835|回復: 5
打印 上一主題 下一主題
收起左側

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

  [復制鏈接]
跳轉到指定樓層
樓主
16x32  P10廣告屏點陣任意位置畫點畫線,點陣直接用P10單紅門頭廣告屏,省去了自己焊接,刷了一個時鐘走時程序,圖片中間點是秒閃,
用的是12c5a60s2。



單片機源程序如下:
#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 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
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版
回復

使用道具 舉報

5#
ID:168911 發表于 2022-6-25 21:11 | 只看該作者

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

使用道具 舉報

6#
ID:1112603 發表于 2024-6-8 13:59 | 只看該作者
這個程序為點陣的使用提供了一個別樣思路,真不錯!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美在线观看视频 | 啪视频在线 | a视频在线 | 国产激情综合五月久久 | 久久精品视频99 | 亚洲高清视频在线 | 欧美日韩国产综合在线 | 午夜免费av| 日韩a v在线免费观看 | 毛片网站在线观看视频 | 久久99精品久久久久 | 日韩a| 欧美日日 | 久久精品国产清自在天天线 | 婷婷色国产偷v国产偷v小说 | 国产成人免费网站 | 中文在线亚洲 | 97免费在线视频 | 天天操综合网站 | 色.com | 一二三四在线视频观看社区 | 欧美日本久久 | 免费特级黄毛片 | 欧美精品一区二区三 | 日韩在线高清 | 久久久久久久国产精品视频 | 国产乱码精品一品二品 | 国产欧美日韩精品一区 | 欧美日韩一区精品 | 国产一级视频在线播放 | 欧美精品导航 | 天天天堂 | av黄色网 | 91精品久久久久久久久久 | 成人在线小视频 | 国产超碰人人爽人人做人人爱 | 精品一区二区视频 | 国产99热在线 | 国产精品伦一区二区三级视频 | 黄色免费av | 午夜亚洲 |