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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

32*32點陣led交通燈設計

[復制鏈接]
跳轉到指定樓層
樓主
ID:73735 發表于 2015-2-19 01:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式



看了不少的Proteus仿真、單片機設計,都沒看到有關人行道交通燈的設計,針對機動車而設計的紅綠燈倒是不少,難道就這么忽視行人的安全,所以就有了設計一個這樣的交通燈的想法。

        取材是來自水南汽車站旁邊的交通燈。
由于是仿真、資源也有限,點陣是用單色的,所以,“停”的效果不好,譯碼器用74LS154,這個太貴,實際肯定要用138了。
PS:取字模軟件是我自己破解的,所以用起來感覺很不一樣。

下面是源程序,有什么不足之處,請指出:

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
/***************************************/
void sendbyteR(uchar temp); //發送數據
sbit RSDA=P2^4;
sbit CLK=P2^5;
sbit RCK=P2^6;
uchar code signature[][128]={    };         。。。。代碼太長省略
uchar code num[][128]={      };               。。。。代碼太長省略

/***************************************/
void main()
{
        P1=0x00;
        TMOD=0x01;
        TH0=0x3c;  //T0定時50ms
        TL0=0xb0;
        EA=1;
        ET0=1;
        TR0=1;
        while(1);
}
/***************************************/
void sendbyteR(uchar temp) //發送數據
{
        uchar c;
        for(c=0;c<8;c++){
                temp=temp>>1;
                RSDA=CY ;
                CLK=1 ; //上升沿
                _nop_() ;
                _nop_() ;
                CLK=0 ;
        }
}
/***************************************/
void time0()interrupt 1
{
        uchar j,k,count,count1,diff;
        uint n,n1;
        TH0=0x3c;
        TL0=0xb0;
        for(j=0;j<32;j++){
                if(diff){
                        if((n>33)){     //倒計時“5”時,開始閃動
                                if((n1%2)==0) k=3;
                                else{
                                        if((n1%4)==1) k=0;
                                        else k=1;
                                        }
                                }
                                else k=n1%2; //行走
                        }
                        else k=2;       //停
                       
                        sendbyteR(num[n][j*4+3]); //顯示數字
                        sendbyteR(num[n][j*4+2]);
                        sendbyteR(num[n][j*4+1]);
                        sendbyteR(num[n][j*4]);

                        sendbyteR(signature[k][j*4+3]);  //顯示人
                        sendbyteR(signature[k][j*4+2]);
                        sendbyteR(signature[k][j*4+1]);
                        sendbyteR(signature[k][j*4]);

                        P1=j;
                        RCK=1;
                        RCK=0;
                }
                if(j==32) j=0;
                count++;
                count1++;
                if(count==20){
                        count=0;
                        n++;    //計時1s
                }
                if(count1==5){
                        count1=0;
                        n1++;  //計時0.25s
                }
                if(n1==39) n1=0;
                if(n==39){
                        diff=!diff;  //diff "0":停 ,"1":行走
                        if(diff) n=10;
                        else n=0;
                }
}








評分

參與人數 1黑幣 +5 收起 理由
treenewbee + 5 很給力!

查看全部評分

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

使用道具 舉報

沙發
ID:73735 發表于 2015-2-19 01:03 | 只看該作者
       玩了一天的游戲,太沒意思了,無聊下就編了個AVR單片機的程序。還記得上次發表的點陣led交通燈,原來核心是51,這學期學的是AVR,所以就換了,改用ATmega16。
       由于是從51上移植過來的,自然思路也差不多。只是這次在中斷使用上,做了調整,使之盡可能的短!




                                           核心改變:

下面是在CVAVR下的源程序,有什么不足之處,請指出 :




#include <mega16.h>
#define uchar unsigned char
int time_counter1s,time_counter250ms;
bit diff;
uchar j,n,k,time250ms;
//RSDA PORTC.1;
//CLK PORTC.0;
//RCK PORTC.2;
flash uchar signature[][128]={
     .....//00: "walk1",點陣32x32,長度128字節
     .....//02: "walk2",點陣32x32,長度128字節
     .....//03: "stop",點陣32x32,長度128字節
     .....//04: "blank",點陣32x32,長度128字節
};
flash uchar num[][128]={
     .....//"39"~"1",點陣32x32,長度128字節
};

void sendbyteR(uchar temp) //發送數據
{
        uchar c;
        for(c=0;c<8;c++)
    {
                PORTC.1=(temp)&(0x01);
                temp=temp>>1;
                PORTC.0=1; //上升沿
                PORTC.0=0;
        }
}

void display(void)  //顯示圖像
{   
    for(j=0;j<32;j++)
    {   
        if(diff)
        {
          if(n>33) //倒計時“5”時,開始閃動
          {
            if((time250ms%2)==0) k=3;
            else{
                    if((time250ms%4)==1) k=0;
                    else k=1;
                }  
          }
          else k=time250ms%2; //行走   
        }
        else k=2;            //停
        sendbyteR(num[n][j*4+3]); //顯示數字
            sendbyteR(num[n][j*4+2]);
            sendbyteR(num[n][j*4+1]);
            sendbyteR(num[n][j*4]);

            sendbyteR(signature[k][j*4+3]);  //顯示人
            sendbyteR(signature[k][j*4+2]);
            sendbyteR(signature[k][j*4+1]);
            sendbyteR(signature[k][j*4]);
            PORTA=j;
            PORTC.2=1;
            PORTC.2=0;      
    }   
}
// Timer 0 比較匹配中斷服務
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{  
    if(++time_counter1s>=500)
    {
        time_counter1s=0;
        n++;                     //計時1s
    }
    if(++time_counter250ms>=125)
    {
        time_counter250ms=0;    //計時0.25s   
        time250ms++;
    }
}

void main(void)
{
PORTA=0x00;
DDRA=0x1F;
PORTC=0x00;
DDRC=0x07;       //顯示控制I/O口初始化

// Timer/Counter 0 初始化

TCCR0=0x0B;   //內部時鐘,64分頻,CTC模式
TCNT0=0x00;
OCR0=0x7C;   //OCR0=2ms
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x02;

n=0;          //賦初始值
k=0;
diff=0;
#asm("sei")   //使能全局中斷
while (1)
      {
      // Place your code here
        display();    //顯示圖像
        if(n>=39)
        {   
            diff=!diff;          //diff "0":停 ,"1":行走
            if(diff) n=10;
            else n=0;
        }
        if(time250ms>=39) time250ms=0;
      }
}



回復

使用道具 舉報

板凳
ID:127379 發表于 2016-6-20 15:49 | 只看該作者
簡直不要太棒了
回復

使用道具 舉報

地板
ID:104183 發表于 2016-6-25 11:17 | 只看該作者
太好了,謝謝分享了。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久婷婷 | 亚洲狠狠爱| 五月综合激情在线 | 黑人精品| 色婷婷激情 | 成人国产精品久久久 | 欧美一二精品 | 亚洲精品一区二区三区在线 | 日本精品久久 | 国产 日韩 欧美 在线 | 成人在线小视频 | 91在线精品秘密一区二区 | av香港经典三级级 在线 | 欧美精三区欧美精三区 | 久草成人 | 国产成人免费视频网站高清观看视频 | 米奇7777狠狠狠狠视频 | 激情 亚洲| 日韩免费一区二区 | 国产精品毛片av一区 | 国产精品亚洲片在线播放 | 这里只有精品99re | 日本一区二区三区四区 | 男女激情网 | 日韩在线一区二区三区 | 久久久久久国产精品 | 国产传媒| 亚洲一区不卡在线 | av在线一区二区三区 | 最新国产视频 | 欧美精品二区 | 久久国际精品 | 日韩在线资源 | 精品日韩一区 | 一区二区国产精品 | 亚洲综合一区二区三区 | 中文字幕在线看人 | 色啪网| 二区视频| 欧美日韩网站 | 久久九九99|