基于AVR的LED數字大屏幕的設計與實現
發布時間:2008/5/26 0:00:00 訪問次數:611
    
    
    作者:宋暉 高小明
    
    1引言
    
    led顯示屏是八十年代后期在全球迅速發展起來的新型信息顯示媒體,應用越來越廣泛。atmega16l單片機是一款基于avr risc 的、低功耗cmos 8 位單片機,具有16k字節的自編程flash, 512字節的eeprom, 1k字節的sram, 通過avr單片機來控制led的顯示,結構簡單,應用靈活,并且易于擴展。
    
    2 系統設計原理
    
    2.1 編碼設計
    
    編碼設計有兩個過程:字庫提取以及字模編碼轉換。字庫的提取涉及到的兩個字庫文件,一個為asc16,專門存放ascii編碼;另一個為hzk16,專門存放漢字字庫編碼。要提取字庫,首先要對它進行初始化,即打開字庫。然后根據一個字符提取它相應的編碼。首先取出字符的內碼后(注意區分單字節和雙字節的內碼),接著通過內碼得到該字符對應的字模的編碼在ascii或hzk16內的偏移量,最后就可以根據這個地址在文件中的偏移位置找到相應的字模編碼,我們可以通過這個公式來計算:
    
    在ascii中,偏移量=(內碼的低地址)*16,
    
    在hzk16中,偏移量= ((內碼的高地址-161)*94 + (內碼的低地址-161))*32。
    
    此時得到的字模編碼不是最終所要的編碼(單字節數據如英文是按8*16點陣來顯示,而雙字節數據時如漢字是按16*16點陣來顯示的)。這里統一使用8*16點陣,這就需要對其轉換。下圖左表格表示的是漢字編碼在字庫內存放順序,右表格表示的是經過轉換過后的編碼存放順序。編碼轉換過程如圖1所示:
    
    
    
    圖1 編碼轉換
    
    2.2 矩陣轉換移位算法
    
    矩陣轉換移位算法目的就是如何把這些原始的數據轉換成串行的數據, 以便把數據正確的輸入到74hc595。原始的數據必須要對其轉換。下面為它的算法實現。
    
    for(m=0;m<8;m++) //m表示的是第幾個led
    
     {? for(j=0;j<8;j++) //j表示的是某個led的第幾排數據
    
     {? for(i=0;i<8;i++) //i表示的是取某個led的第某排數據的第幾位
    
     { displayport_a[m][j]|=((displaycode_a[i][m]&0x01)<
    
     displaycode_a[i][m]=displaycode_a[i][m]>>1;
    
     // displayport_a[m][j]表示存放已轉換好數據
    
     // displaycode_a[i][m]表示存放的是原始數據
    
    //‘|’表示相或,‘&’表示相與,‘<<’表示左移
    
    }
    
    }
    
    }
    
    2.3 上位機和下位機的通信
    
    上位機和下位機的通信主要是通過rs232接口進行的,對于上位機的數據傳輸的速率為9600bps。為了便于數據的傳輸和接收,可以給要傳輸數據的前后加上標志位。如果數據發送量大,在發送數據時還可采用線程的方式來發送。而下位機接收數據則可采用單片機內全雙工的通用異步收發器(uart)來進行。
    
    uart有中斷和查詢兩種工作方式,uart初始化需要設置相關幾個控制寄存器,我們可以把uart幾個控制寄存器的初始化情況表示出來:
    
    ucr = 0x00 設置波特率時要先關閉uart
&n
    
    
    作者:宋暉 高小明
    
    1引言
    
    led顯示屏是八十年代后期在全球迅速發展起來的新型信息顯示媒體,應用越來越廣泛。atmega16l單片機是一款基于avr risc 的、低功耗cmos 8 位單片機,具有16k字節的自編程flash, 512字節的eeprom, 1k字節的sram, 通過avr單片機來控制led的顯示,結構簡單,應用靈活,并且易于擴展。
    
    2 系統設計原理
    
    2.1 編碼設計
    
    編碼設計有兩個過程:字庫提取以及字模編碼轉換。字庫的提取涉及到的兩個字庫文件,一個為asc16,專門存放ascii編碼;另一個為hzk16,專門存放漢字字庫編碼。要提取字庫,首先要對它進行初始化,即打開字庫。然后根據一個字符提取它相應的編碼。首先取出字符的內碼后(注意區分單字節和雙字節的內碼),接著通過內碼得到該字符對應的字模的編碼在ascii或hzk16內的偏移量,最后就可以根據這個地址在文件中的偏移位置找到相應的字模編碼,我們可以通過這個公式來計算:
    
    在ascii中,偏移量=(內碼的低地址)*16,
    
    在hzk16中,偏移量= ((內碼的高地址-161)*94 + (內碼的低地址-161))*32。
    
    此時得到的字模編碼不是最終所要的編碼(單字節數據如英文是按8*16點陣來顯示,而雙字節數據時如漢字是按16*16點陣來顯示的)。這里統一使用8*16點陣,這就需要對其轉換。下圖左表格表示的是漢字編碼在字庫內存放順序,右表格表示的是經過轉換過后的編碼存放順序。編碼轉換過程如圖1所示:
    
    
    
    圖1 編碼轉換
    
    2.2 矩陣轉換移位算法
    
    矩陣轉換移位算法目的就是如何把這些原始的數據轉換成串行的數據, 以便把數據正確的輸入到74hc595。原始的數據必須要對其轉換。下面為它的算法實現。
    
    for(m=0;m<8;m++) //m表示的是第幾個led
    
     {? for(j=0;j<8;j++) //j表示的是某個led的第幾排數據
    
     {? for(i=0;i<8;i++) //i表示的是取某個led的第某排數據的第幾位
    
     { displayport_a[m][j]|=((displaycode_a[i][m]&0x01)<
    
     displaycode_a[i][m]=displaycode_a[i][m]>>1;
    
     // displayport_a[m][j]表示存放已轉換好數據
    
     // displaycode_a[i][m]表示存放的是原始數據
    
    //‘|’表示相或,‘&’表示相與,‘<<’表示左移
    
    }
    
    }
    
    }
    
    2.3 上位機和下位機的通信
    
    上位機和下位機的通信主要是通過rs232接口進行的,對于上位機的數據傳輸的速率為9600bps。為了便于數據的傳輸和接收,可以給要傳輸數據的前后加上標志位。如果數據發送量大,在發送數據時還可采用線程的方式來發送。而下位機接收數據則可采用單片機內全雙工的通用異步收發器(uart)來進行。
    
    uart有中斷和查詢兩種工作方式,uart初始化需要設置相關幾個控制寄存器,我們可以把uart幾個控制寄存器的初始化情況表示出來:
    
    ucr = 0x00 設置波特率時要先關閉uart
&n
上一篇:多路端口可編程霓虹燈及彩燈控制器
熱門點擊
- 8051單片機家族數據手冊鏈接大全
- dsPIC30F6010單片機的原理及應用
- 一種通用的嵌入式系統ISP方法
- 浮點數保存代碼
- 基于FPGA/CPLD和USB技術的無損圖像
- 數字顯示器仍需處理模擬信號
- 常用PIC系列8位單片機芯片引腳符號的功能
- PIC系列單片機的偽指令
- 利用單片機PWM信號進行舵機控制
- 產生低失真正弦波的CMOS六角反相器
推薦技術資料
- 硬盤式MP3播放器終級改
- 一次偶然的機會我結識了NE0 2511,那是一個遠方的... [詳細]