單片機源程序如下:
- //====================================================================================
- //1、本程序適用于:由個595驅動的16*16點陣。先發16位陽極列選信號。再發送陰極字節模數據。
- //2、本程序,并未使用WQX-51編程技巧,為方便公開,使用傳統編程思路編寫。
- //3、 可以直接使用傳統51配12M晶振。
- //====================================================================================
- #include<STC12C5A60S2.H>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit HC595_DS=P0^3; //74HC595的數據
- sbit HC595_SCLK=P0^1; //74HC595的時鐘
- sbit HC595_LCLK=P0^0; //74HC595的鎖存
- uchar code hanzi[10][32]=
- {
- //五角星
- { 0x00,0x00,0x04,0x00,0x06,0x02,0x07,0x0C,0x07,0xBC,0x07,0xF8,0x0F,0xF8,0x3F,0xF0,0xFF,0xE0,0x3F,0xF0,0x0F,0xF8,0x07,0xF8,0x07,0xBC,0x07,0x0C,0x06,0x02,0x04,0x00 },
- //祁
- { 0x10,0x20,0x10,0x40,0x10,0x80,0x91,0x00,0x73,0xFF,0x15,0x00,0x18,0x80,0x00,0x00,0x7F,0xFF,0x40,0x10,0x42,0x08,0x4D,0x04,0x70,0x88,0x00,0x70,0x00,0x00,0x00,0x00 },
- //緒
- { 0x04,0x44,0x0C,0xC6,0x35,0x44,0xC6,0x48,0x0C,0x68,0x02,0x48,0x22,0x80,0x23,0xFF,0x22,0x92,0xFE,0x92,0x2A,0x92,0x32,0x92,0x23,0xFF,0x46,0x80,0x02,0x00,0x00,0x00 },
- //電
- { 0x00,0x00,0x1F,0xE0,0x12,0x40,0x12,0x40,0x12,0x40,0x12,0x40,0xFF,0xFC,0x12,0x42,0x12,0x42,0x12,0x42,0x12,0x42,0x3F,0xE2,0x10,0x02,0x00,0x0E,0x00,0x00,0x00,0x00 },
- //子
- { 0x01,0x00,0x01,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x02,0x41,0x01,0x47,0xFE,0x45,0x00,0x49,0x00,0x51,0x00,0x61,0x00,0x01,0x00,0x03,0x00,0x01,0x00,0x00,0x00 },
- //黑桃
- { 0x00,0x00,0x03,0xC0,0x07,0xE0,0x0F,0xF0,0x1F,0xF0,0x3F,0xE1,0x7F,0xC3,0xFF,0xFF,0xFF,0xFF,0x7F,0xC3,0x3F,0xE1,0x1F,0xF0,0x0F,0xF0,0x07,0xE0,0x03,0xC0,0x00,0x00 },
- //紅心
- { 0x00,0x00,0x07,0x80,0x0F,0xC0,0x1F,0xE0,0x1F,0xF0,0x1F,0xF8,0x0F,0xFC,0x07,0xFE,0x07,0xFE,0x0F,0xFC,0x1F,0xF8,0x1F,0xF0,0x1F,0xE0,0x0F,0xC0,0x07,0x80,0x00,0x00 },
- //梅花
- { 0x00,0x00,0x00,0xE0,0x01,0xF0,0x03,0xF8,0x33,0xF8,0x79,0xF1,0xFD,0xE3,0xFF,0xFF,0xFF,0xFF,0xFD,0xE3,0x79,0xF1,0x33,0xF8,0x03,0xF8,0x01,0xF0,0x00,0xE0,0x00,0x00 },
- //方片
- { 0x00,0x00,0x01,0x00,0x03,0x80,0x07,0xC0,0x0F,0xE0,0x1F,0xF0,0x3F,0xF8,0x7F,0xFC,0xFF,0xFE,0x7F,0xFC,0x3F,0xF8,0x1F,0xF0,0x0F,0xE0,0x07,0xC0,0x03,0x80,0x01,0x00 },
- //花點
- { 0xAA,0xAA,0x55,0x55,0xAA,0xAA,0x55,0x55,0xAA,0xAA,0x55,0x55,0xAA,0xAA,0x55,0x55,0xAA,0xAA,0x55,0x55,0xAA,0xAA,0x55,0x55,0xAA,0xAA,0x55,0x55,0xAA,0xAA,0x55,0x55 }
- };
- uchar xdata Mould[8]; //控制該列的取模值,低電平亮燈,每個模組16行,占2字節
- uchar xdata upright[8]; //控制某一列,高電平亮燈,每個模組16列,占2字節
- uchar xdata LED2X64[130]; //開辟緩存空間,被定時器隨時調用。每列兩個字節,開發板總共64列。加2個移位。
- void Timer0_Init() //定時器配置:16位定時器,1.25ms顯示1列,幀率50幀。
- {
- TMOD&=0Xf0;
- TMOD|=0X01;
- //TL0=0xfb; //???????1.25ms,STC??1T???51????
- //TH0=0xf2; //???????1.25ms,STC??1T???51????
- TL0=0x1E; //???????1.25ms,??12T?????8951????
- TH0=0xFB; //???????1.25ms,??12T?????8951????
- ET0=1;
- TR0=1;
- EA=1;
- }
- void HC595_Write() //74HC595發送數據。
- {
- uchar i,j;
- HC595_DS=1;
- HC595_SCLK=1;
- HC595_LCLK=0;
- for(j=4;j>0;j--) //4塊點陣模組,每個模組有4片595芯片。
- {
- for(i=0;i<8;i++) //發送給每個模組的 U4 ,高電平整列可以亮,低電平整列滅。
- {
- HC595_SCLK=0; //時鐘拉低
- HC595_DS=(upright[j*2-1]&0x80); //從最后一個字節開始,先高位后低位。
- upright[j*2-1]<<=1; //字節左移
- HC595_SCLK=1; //時鐘上升沿拷貝
- }
- for(i=0;i<8;i++) //發送給每個模組的 U3 ,高電平整列可以亮,低電平整列滅。
- {
- HC595_SCLK=0;
- HC595_DS=(upright[j*2-2]&0x80);
- upright[j*2-2]<<=1;
- HC595_SCLK=1;
- }
- for(i=0;i<8;i++) //發送給每個模組的 U2 ,低電平整行可以亮,高電平整行全滅。
- {
- HC595_SCLK=0;
- HC595_DS=(Mould[j*2-1]&0x80);
- Mould[j*2-1]<<=1;
- HC595_SCLK=1;
- }
- for(i=0;i<8;i++) //發送給每個模組的 U1 ,低電平整行可以亮,高電平整行全滅。
- {
- HC595_SCLK=0;
- HC595_DS=(Mould[j*2-2]&0x80);
- Mould[j*2-2]<<=1;
- HC595_SCLK=1;
- }
- }
- HC595_LCLK=1; //鎖存脈沖信號,上升沿。
- HC595_DS=1; //延時
- HC595_LCLK=0; //鎖存脈沖信號復位。
- }
- void Timer0_Routnie (void) interrupt 1 //定時器中斷處理,1.25ms一次。
- {
- uchar i;
- static uint kkk=0x0001; //用于16列輪流控制
- //TL0=0xfb; //???????1.25ms,STC??1T???51????
- //TH0=0xf2; //???????1.25ms,STC??1T???51????
- TL0=0x1E; //???????1.25ms,??12T?????8951????
- TH0=0xFB; //???????1.25ms,??12T?????8951????
-
- Mould[7]=~LED2X64[i+97]; //i=0,把緩存的第97號字節發送到第四個模組的最左邊的下8位。
- Mould[6]=~LED2X64[i+96]; //i=0,把緩存的第96號字節發送到第四個模組的最左邊的上8位。
- Mould[5]=~LED2X64[i+65]; //i=0,把緩存的第65號字節發送到第三個模組的最左邊的下8位。
- Mould[4]=~LED2X64[i+64]; //i=0,把緩存的第64號字節發送到第三個模組的最左邊的上8位。
- Mould[3]=~LED2X64[i+33]; //i=0,把緩存的第33號字節發送到第二個模組的最左邊的下8位。
- Mould[2]=~LED2X64[i+32]; //i=0,把緩存的第32號字節發送到第二個模組的最左邊的上8位。
- Mould[1]=~LED2X64[i+1]; //i=0,把緩存的第01號字節發送到第一個模組的最左邊的下8位。
- Mould[0]=~LED2X64[i+0]; //i=0,把緩存的第00號字節發送到第一個模組的最左邊的上8位。
-
- upright[7]=kkk/256; //16位變量KKK,取高8位?刂频谒膫模組的0~7列。
- upright[6]=kkk%256; //16位變量KKK,取低8位?刂频谒膫模組的8~15列。
- upright[5]=kkk/256; //16位變量KKK,取高8位?刂频谌齻模組的0~7列。
- upright[4]=kkk%256; //16位變量KKK,取低8位?刂频谌齻模組的8~15列。
- upright[3]=kkk/256; //16位變量KKK,取高8位?刂频诙䝼模組的0~7列。
- upright[2]=kkk%256; //16位變量KKK,取低8位?刂频诙䝼模組的8~15列。
- upright[1]=kkk/256; //16位變量KKK,取高8位。控制第一個模組的0~7列。
- upright[0]=kkk%256; //16位變量KKK,取低8位?刂频谝粋模組的8~15列。
-
- kkk=_irol_(kkk,1); //循環控制0~16列
- i++;i++;
- i=i%32;
- HC595_Write(); //595的緩存Mould[8]、upright[8],得到數據后,立馬發送到芯片
- }
- void main() //主函數
- {
- uchar k=0,num=0,ww=0;
- uint timer=50000;
- Timer0_Init();
- for(k=0;k<128;k++)
- {
- LED2X64[k]=hanzi[k/32+1][k%32]; //把要顯示的內容寫入緩存
- }
- while(1) //大循環
- {
-
- }
- }
復制代碼
所有資料51hei提供下載:
點陣16X16 四個拼接成16X64 漢字靜態顯示 傳統低速單片機 配12M晶振.rar
(42.91 KB, 下載次數: 53)
2018-5-30 11:47 上傳
點擊文件名下載附件
16X16 下載積分: 黑幣 -5
|