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

標題: 16x32 P10廣告屏點陣任意位置畫點畫線 單片機程序 [打印本頁]

作者: 老當益壯    時間: 2021-6-5 20:45
標題: 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;
    }   
}
/**************************************************/


作者: xxd0708    時間: 2021-6-6 10:47
厲害了,樓主電路圖有嗎
作者: 老當益壯    時間: 2021-6-6 18:57
xxd0708 發表于 2021-6-6 10:47
厲害了,樓主電路圖有嗎

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

作者: uvwxay    時間: 2022-1-28 20:17
這個怎么接51版
作者: 老當益壯    時間: 2022-6-25 21:11
uvwxay 發表于 2022-1-28 20:17
這個怎么接51版

595移位,鎖存,數據,OE,掃描,
作者: gzgy    時間: 2024-6-8 13:59
這個程序為點陣的使用提供了一個別樣思路,真不錯!




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日日av| 男女在线免费观看 | 精品永久| 看av电影| 美女久久 | 日韩在线 | 久久精品国产精品青草 | 欧美精品一二区 | 欧美综合国产精品久久丁香 | 91精品国产色综合久久 | 亚洲天堂中文字幕 | 亚洲二区在线 | 在线看片福利 | 黄色精品 | 亚洲国产高清在线观看 | 99re热精品视频 | 香蕉视频91| 免费成人毛片 | 亚洲欧美日韩精品久久亚洲区 | 婷婷综合 | 久久成人一区 | av毛片免费 | 男女视频免费 | 一区二区三区在线 | 日韩一区二区福利视频 | 国产在线激情视频 | 亚洲日韩欧美一区二区在线 | 国产98色在线| 国产精品美女久久久免费 | 国产午夜精品一区二区三区在线观看 | 国产一在线观看 | 中文字幕在线播放第一页 | 欧美精品1区2区3区 精品国产欧美一区二区 | 久久久精品一区二区三区四季av | 国产成人久久精品一区二区三区 | 国产精品久久久久久久久久久免费看 | 麻豆av片 | 亚洲第一av| 日韩成人高清在线 | 欧美 日韩 中文 | 精品国产视频 |