0.png (73.05 KB, 下載次數: 186)
下載附件
2016-4-24 21:16 上傳
全部資料(壓縮包)下載:
音樂頻譜.rar
(13.82 MB, 下載次數: 780)
2016-4-23 11:45 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
音樂頻譜--控制卡使用說明:
1、按鍵S1 亮度控制 說明:一共有10極 按一下亮度加一級
2、按鍵S2 16分頻與64分頻切換
3、按鍵S3 切換柱條和漂浮點顏色 說明:顯示顏色有 紅柱綠漂 紅柱黃漂 綠柱紅漂 綠柱黃漂
4、按鍵S4 無功能
32x64雙色點陣程序、音樂頻譜、多功能時鐘、溫度顯示全套資料
由于是二手點陣屏,完全對應的原理圖不好找到,為了方便大家理解其工作原理,發個標準的原理圖供參考,方便學習交流用。
0.png (181.85 KB, 下載次數: 168)
下載附件
2016-4-24 21:18 上傳
多功能時鐘--控制卡使用說明:使用前保證已經下載好對應的功能程序
1、按鍵S1 時鐘復位
2、按鍵S2 調時模式移位(進行年、月、日、時、分、秒以及補償時間 、 自動和手動切換顯示信息的改變)
3、按鍵S3 +
4、按鍵S4 -
自動與手動切換顯示的 改變
通過按S2進行菜單調整按到 ,按到點陣屏出現自動或者手動切換界面 ,可以通過S3進行改變手動和自動切換, 如果是自動可以設置自動的時間默認3S。
串口改字3264點陣程序
LED點陣功能規劃 前言 上位機需求:1.設置多種取模方式的軟件 16*16漢字取模原則共陰碼,行列式,行逆向(第1點為bit8,第8點位 bit1) 32*32漢字取模原則共陰碼,逐行式,行逆向(第1點為bit8,第8點位 bit1)
2.配置移動速度 3.配置顯示方式 4.設置屏的高和寬 5.配置屏的顏色(單色雙色) 6.配置屏的OE邏輯級性 7.配置顯示時鐘及方式(靜態 左移) 8.較時功能 9.定時開關機功能
下位機需求:接收上位機設置的信息,并且按配置運行。 通信方式:232通信
點陣屏通訊協議
u 通訊 (1)232口通訊:8位數據位, 1位停止位, 標志效驗, 波特率為9600
u 通訊順序為: 傳送每一屏的全部“點陣數據”,按順序傳送完每一幕數據。
u 主要功能幀定義: (0x06)回傳接收幀:1字節回傳
u 通訊頭,任何一幀通訊必需要。(6字節) 0x5A+C+L+DATA+CS+0xA5
說明: 0x5A,0xA5 兩個起始標志字節。
C 控制碼 L 長度 DATA 數據 CS 校驗和,從C到校驗和之前的所有字節的和。
應答:接收成功返回1字節:0x06。
◆ 扇區擦除命令:0x01 0x5A+0x01+0x01+DATA+CS+0xA5 DATA :扇區擦除的數量(512字節一個扇區) CS:數據校驗和
應答:接收成功返回1字節:0x06
◆ 字幕數據命令:0x02 0x5A+0x02+L+DATA+CS+0xA5 L:數據長度 DATA:字幕數據 CS:數據校驗和
應答:接收成功返回1字節:0x06
◆ 參數設置命令命令:0x03 0x5A+0x03+L+DATA+CS+0xA5 L:數據長度 DATA:參數 CS:數據校驗和
應答:接收成功返回1字節:0x06
移動速度:命令1~5
字體大小有兩種16*16 32*32 16*16命令:0x01 32*32命令:0x02
顏色:紅 綠 黃 紅命令:0x01 綠命令:0x02 黃命令:0x03
屏數量以32*64為一個單位 命令:1~5 1代表1塊 2代表2塊以此類推
移動方式: 0x01:左移 0x02:右移 0x03:立即顯示 0x04:預留 0x05:預留 0x06:預留 0x07:預留
字節1 引入方式 InMode0=左移入← InMode1=右移入→ InMode2=上卷入↑ InMode3=下卷入↓ InMode4=左跳入← InMode5=右展開→ InMode6=左展開← InMode7=上展開↑ InMode8=下展開↓ InMode9=中間-兩端展開 InMode10=兩端-中間展開 InMode11=中間-上下展開 InMode12=上下-中間展開 InMode13=立即顯示 InMode14=預備 InMode15= 隨機顯示
下面是部分程序預覽(完整版本請下載本帖附件):
- /***********************************************************
- 程序編寫:Fucp 2016-12-25
- 32*64雙色點陣
- 上位機軟件改字
- ***********************************************************/
- /*
- 標準08接口點陣屏管腳定義
- GND A ABCD是行掃描信號
- GND B
- GND C
- OE D OE是屏的使能端 低有效
- R1 G1 上半屏綠色
- R2 G2 下半屏綠色
- GND STCP 鎖存信號
- GND SHCP 時鐘信號
-
- */
- /****************************************
- 主控芯片;STC12C5A32S2 晶振:30M
- 通信波特率:9600
- 使用點陣屏 :32*64雙色
-
- 程序實現功能:
- 通過上位機字幕軟件生成的字幕數據下載到單片機內部的EEPROM
- 此款單片機內部有32K的EEPROM 所以可以存儲較多的字
- 字幕軟件可配置16*16 和32*32字體
- 其中 16*16字體可設置顯示顏色 紅 綠 黃 三種
- 可設置移動速度
- 移動方式目前只有一種左移 往后繼續加
- 其他功能待開發
- 上位機使用見說明
- 歡迎大家做技術交流:QQ 77554971
- 祝大家學習進步!
- *****************************************/
- #include "NEW_8051.H"
- #include "main.h"
- #define light 3 //定義亮度
- uchar code hanzi[]; //漢字字模
- uchar code hanzi1[]; //漢字字模
- //0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
- //uchar code sw[16]={0X00,0X08,0x04,0x0C,0X02,0X0A,0X06,0X0E,0X01,0X09,0X05,0X0D,0X03,0X0B,0X07,0X0F};/*16行段碼*///138驅動數據
- sbit IA =P4^0; //行控制線A
- sbit IB =P2^0; //行控制線B
- sbit IC =P2^1; //行控制線C
- sbit ID =P2^2; //行控制線D
- #define scan0 {IA=0;IB=0;IC=0;ID=0;}
- #define scan1 {IA=1;IB=0;IC=0;ID=0;}
- #define scan2 {IA=0;IB=1;IC=0;ID=0;}
- #define scan3 {IA=1;IB=1;IC=0;ID=0;}
- #define scan4 {IA=0;IB=0;IC=1;ID=0;}
- #define scan5 {IA=1;IB=0;IC=1;ID=0;}
- #define scan6 {IA=0;IB=1;IC=1;ID=0;}
- #define scan7 {IA=1;IB=1;IC=1;ID=0;}
- #define scan8 {IA=0;IB=0;IC=0;ID=1;}
- #define scan9 {IA=1;IB=0;IC=0;ID=1;}
- #define scan10 {IA=0;IB=1;IC=0;ID=1;}
- #define scan11 {IA=1;IB=1;IC=0;ID=1;}
- #define scan12 {IA=0;IB=0;IC=1;ID=1;}
- #define scan13 {IA=1;IB=0;IC=1;ID=1;}
- #define scan14 {IA=0;IB=1;IC=1;ID=1;}
- #define scan15 {IA=1;IB=1;IC=1;ID=1;}
- sbit STR=P4^1; //鎖存
- sbit SCK=P2^7; //時鐘
- sbit SERr1= P2^4; //數據
- sbit SERg1= P2^6;
- sbit OE= P0^4;
- sbit SERr= P2^3;
- sbit SERg= P2^5;
- uchar Move,Speed,line; //時間溫度變量
- uint zimuo; //字模計數器
- uchar BUFF[20]; //緩存
- uchar BUFF1[20]; //緩存
- uchar ucTimeOut;
- uchar i;
- uint uiBaseAddress=0;
- uint uiFontNumber=0;
- //void DelayMs(void); // 延時
- void in_data(); // 調整移動數據
- void rxd_data(); // 串口發送移動數據
- /******************************************************/
- uchar ucSetSpeed=0;
- uchar ucSpeed=3;
- uchar ucSetPlateNum=0;
- uchar ucPlateNum=0;
- uchar ucSetShowMode=0;
- uchar ucShowMode=0;
- uchar ucSetFontSize=0;
- uchar ucFontSize=0;
- uchar BuffCount=0;
- uchar ucSetFontColor=0;
- uchar ucFontColor=0;
- uchar DelayMs=0;
- uchar l=0;
- bit bDelayMsOver=0;
- uchar ucEEPArray=0;
- uchar ucUdateTime=0;
- void Send8Line();
- void Send16Line();
- void Send24Line();
- void Send32Line();
- void Load32();
- /*****不影響其他端口的掃描*************************/
- void scan(unsigned char Value)
- {switch(Value)
- {case 0: scan0;break;
- case 1: scan1;break;
- case 2: scan2;break;
- case 3: scan3;break;
- case 4: scan4;break;
- case 5: scan5;break;
- case 6: scan6;break;
- case 7: scan7;break;
- case 8: scan8;break;
- case 9: scan9;break;
- case 10:scan10;break;
- case 11:scan11;break;
- case 12:scan12;break;
- case 13:scan13;break;
- case 14:scan14;break;
- case 15:scan15;break;
- default:break;
- }
- }
- /*************************/
- void DelayMss(void)
- {
- uchar TempCyc;
- for(TempCyc=150;TempCyc>1;TempCyc--)
- {;}
- }
- /**************************延時***********************/
- void InitTimer0(void)
- {
- TMOD|= 0x01;
- TH0 = 0x0C4;
- TL0 = 0x00;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- /***********************************/
- void Send_data(unsigned char d) /*從串口發送數據*/
- {
- ES=0;
- SBUF=d;
- while(TI==0); //等待發送完畢
- TI=0;
- ES=1;
- }
- /*****************************************/
- void Timer0Interrupt(void) interrupt 1
- {
- TH0 = 0x0C4;
- TL0 = 0x00;
- if( ucTimeOut )
- {
- ucTimeOut--;
- if( !ucTimeOut )
- {
- //bEanle=0;
- LED4=1;
- }
-
- }
- if(ucUdateTime)
- {
- ucUdateTime--;
- if(!ucUdateTime)
- {
-
- //uiBaseAddress=0;
- //bEanle=0;
-
- }
- }
-
- /**************************************/
-
- }
- /****************************************/
- void LED_Display(void)
- {
- ucSetPlateNum=byte_read(0x0003);//讀取EEPROM里設置的點陣屏塊數量(32*64一塊)
- switch ( ucSetPlateNum )
- {
- case 0X01:
- ucPlateNum=8; //1塊
- break;
- case 0X02:
- ucPlateNum=16; //2塊
- break;
- case 0X03:
- ucPlateNum=24;//3塊
- break;
- case 0X04:
- ucPlateNum=32;//4塊
- break;
- case 0X05:
- ucPlateNum=40; //5塊
- break;
- default:
- ucPlateNum=8; //1塊
- break;
- }
- /***********************************/
- ucSetShowMode=byte_read(0x0004); //顯示方式
- switch ( ucSetShowMode )
- {
- case 0X01:
- ucShowMode=1; //左移
- break;
- case 0X02:
- ucShowMode=2; //右移
- break;
- case 0X03:
- ucShowMode=3;
- break;
- case 0X04:
- ucShowMode=4;
- break;
- case 0X05:
- ucShowMode=5;
- break;
- default:
- ucShowMode=2;
- break;
- }
- /***********************************/
-
- ucSetSpeed=byte_read(0x0000); //移動速度
- switch ( ucSetSpeed )
- {
- case 0X01:
- ucSpeed=2;
- break;
- case 0X02:
- ucSpeed=4;
- break;
- case 0X03:
- ucSpeed=6;
- break;
- case 0X04:
- ucSpeed=8;
- break;
- case 0X05:
- ucSpeed=10;
- break;
- default:
- ucSpeed=5;
- break;
- }
- /********************************************/
- ucSetFontSize=byte_read(0x0001); //字體大小
- switch ( ucSetFontSize )
- {
- case 0X01:
- ucFontSize=16;
- break;
- case 0X02:
- ucFontSize=32;
- break;
- default:
- ucFontSize=16;
- break;
- }
- /**************************************************/
- ucSetFontColor=byte_read(0x0002); //字體顏色
- switch ( ucSetFontColor )
- {
- case 0X01:
- ucFontColor=1; //紅
- break;
- case 0X02:
- ucFontColor=2; //綠
- break;
- case 0X03:
- ucFontColor=3; //黃
- break;
- default:
- ucFontColor=1;
- break;
- }
- uiFontNumber=(byte_read(0x0100)<<8)+byte_read(0x0101);
- }
- /*主函數*/
- void main()
- {
- InitTimer0();
- uart_init();
- Move=0;
- zimuo=0;
- OE=0;
- LED_Display();
- //uart_rBIT=1;
- /*******************************************/
-
- while(1)
- {
- while(zimuo<uiFontNumber+64)
- {
- //if( !bEanle ) //下載數據和設置屏參數時不顯示信息
- //{
- if(ucShowMode==0x01)
- {
- while(Move<ucFontSize) //數據移位。
- {
- for(Speed=0;Speed<ucSpeed;Speed++) //移動速度
- {
- for(line=0;line<16;line++)
- {
- in_data(); //調整移動數據
- rxd_data();
- // P0=sw[line];
- scan(line);
- STR=1;//鎖存
- STR=0;
- STR=1;
- DelayMss(); //延時,等待一段時間,讓這列顯示的內容在人眼內產生“視覺暫留”現象。
- }
- }
-
- /****************************************************/
- l++;
- if(l==16)l=0;
- Move++; //移動一步
- }
- Move=0;
- if(ucFontSize==32)
- {
- zimuo=zimuo+128;
- }
- else
- {
- zimuo=zimuo+32;
- }
- }
- /**********************************************************/
- else if(ucShowMode==0x02)
- {
- for(i=0;i<32;i++)
- {
- for(Speed=0;Speed<16;Speed++) //移動速度
- {
- for(line=0;line<16;line++)
- {
- in_data();//調整移動數據
- if((i<=15)&&(line<=i))
- Send8Line();
- else
- Send16Line();
- if(i>15)
- {
- if(line<=(i-15))
- {
- Send24Line();
- }
- else
- {
- Send32Line();
- }
- }
- STR=1;//鎖存
- STR=0;
- STR=1;
- //P0 =sw[line];
- if(i>15)
- {
- if(i-15>line)
- scan(i-15-line);
- else
- scan(line+15-i);
- }
- //P0= sw[line];
- else
- scan(i-line);
-
- }
- DelayMss();
- }
- }
- /********************************************************/
- for(i=0;i<120;i++)
- {
- for(line=0;line<16;line++)
- {
- Load32();
- Send24Line();
- STR=1;//鎖存
- STR=0;
- STR=1;
- scan(line);
- }
-
- }
- //zimuo=zimuo+256;
- }
-
- }
- zimuo=0;
- }
- }
- /*********************************************************/
- void Send8Line()
- {
- uchar k,i;
- SERg=SERg1=1;
- for(i=0;i<8;i++)
- {
- for(k=0;k<8;k++)
- {
- SCK=0;
- SERr=(bit)(BUFF1[i]&0x01);//這里SERr定義成普通IO口就得了
- BUFF1[i]=BUFF1[i]>>1;
- SERr1=1;
- SCK =1;
- }
- }
- }
- /*********************************************************/
- void Send16Line()
- {
- uchar k,i;
- SERg=1;
- SERg1=1;
- for(i=0;i<8;i++)
- {
- for(k=0;k<8;k++)
- {
- SCK=0;
- SERr=1;//這里SERr定義成普通IO口就得了
- SERr1=1;
- SCK=1;
- }
- }
- }
- /*********************************************************/
- void Send24Line()
- {
- uchar k,i;
- SERg=SERg1=1;
- for(i=0;i<8;i++)
- {
- for(k=0;k<8;k++)
- {
- SCK=0;
- SERr=(bit)(BUFF[i]&0x01);//這里SERr定義成普通IO口就得了
- BUFF[i]=BUFF[i]>>1;
- SERr1=(bit)(BUFF1[i]&0x01); //這里SERr定義成普通IO口就得了
- BUFF1[i]=BUFF1[i]>>1;
- SCK=1;
- }
- }
- }
- /********************************************************/
- void Send32Line()
- {
- uchar k,i;
- SERg=SERg1=1;
- for(i=0;i<8;i++)
- {
- for(k=0;k<8;k++)
- {
- SCK=0;
- SERr=(bit)(BUFF[i]&0x01);//這里SERr定義成普通IO口就得了
- BUFF[i]=BUFF[i]>>1;
- SERr1=1;
- SCK =1;
- }
- }
- }
- void Load32()
- {
- char s;
- for(s=2;s>=0;s--) //i為向后先擇字節計數器,zimuoo為向后先字計數器
- {
- BUFF[4*s]=byte_read(0x200+zimuo+128*s+4*line);
- BUFF[4*s+1]=byte_read(0x200+zimuo+1+128*s+4*line);
- BUFF[4*s+2]=byte_read(0x200+zimuo+2+128*s+4*line);
- BUFF[4*s+3]=byte_read(0x200+zimuo+3+128*s+4*line);
- BUFF1[4*s]=byte_read(0x200+zimuo+128*s+4*line+64);
- BUFF1[4*s+1]=byte_read(0x200+zimuo+1+128*s+4*line+64);
- BUFF1[4*s+2]=byte_read(0x200+zimuo+2+128*s+4*line+64);
- BUFF1[4*s+3]=byte_read(0x200+zimuo+3+128*s+4*line+64);
- }
- }
- /**********************************************************/
- void in_data(void) //調整數據
- {
- char s;
- if(ucShowMode==0x01)//左移
- {
- if( ucFontSize==16 )//如果字體是16*16
- {
- for(s=8;s>=0;s--) //i為向后先擇字節計數器,zimuoo為向后先字計數器
- {
- BUFF[2*s+1]=byte_read(0x200+zimuo+1+32*s+2*line); //把第一個字模的第一個字節放入BUFF0中,第二個字模和第一個字節放入BUFF2中
- BUFF[2*s]=byte_read(0x200+zimuo+32*s+2*line); //把第一個字模的第二個字節放入BUFF1中,第二個字模的第二個字節放入BUFF3中
-
- BUFF1[2*s+1]=byte_read(0x200+zimuo+1+32*s+2*line); //把第一個字模的第一個字節放入BUFF0中,第二個字模和第一個字節放入BUFF2中
- BUFF1[2*s]=byte_read(0x200+zimuo+32*s+2*line);
- }
- }
- else if( ucFontSize==32 ) //如果字體是32*32
- {
- Load32();
- }
- }
- else if(ucShowMode==0x02)//右移
- {
- if(ucFontSize==32)
- {
- for(s=1;s>=0;s--) //i為向后先擇字節計數器,zimuoo為向后先字計數器
- {
- BUFF[4*s]=byte_read(0x200+zimuo+128*s+4*(15-line));
- BUFF[4*s+1]=byte_read(0x200+zimuo+1+128*s+4*(15-line));
- BUFF[4*s+2]=byte_read(0x200+zimuo+2+128*s+4*(15-line));
- BUFF[4*s+3]=byte_read(0x200+zimuo+3+128*s+4*(15-line));
-
- BUFF1[4*s]=byte_read(0x200+zimuo+128*s+4*(15-line)+64);
- BUFF1[4*s+1]=byte_read(0x200+zimuo+1+128*s+4*(15-line)+64);
- BUFF1[4*s+2]=byte_read(0x200+zimuo+2+128*s+4*(15-line)+64);
- BUFF1[4*s+3]=byte_read(0x200+zimuo+3+128*s+4*(15-line)+64);
- }
- }
- }
- }
- /***********************發送移動的數據****************************/
- void rxd_data(void) //串行發送數據
- {
- uchar s;
- uchar inc,tempyid,temp,k,temp1;
- if(Move<8)
- {
- inc=0;
- }
- else if((Move>=8)&&(Move<16))
- {
- inc=1;
- }
- else if((Move>=16)&&(Move<24))
- {
- inc=2;
- }
- else if(Move>=24)
- {
- inc=3;
- }
- for(s=0+inc;s<8+inc;s++) //發送ucSePlateNum字節數據
- {
- if(l<8)
- tempyid=l;
- else
- tempyid=l-8;
- temp=(BUFF[s]>>tempyid)|(BUFF[s+1]<<(8-tempyid)); //h1左移tempyid位后和h2右移8-tempyid相或,取出移位后的數據。
- //temp=255-temp;
- temp1=(BUFF1[s]>>tempyid)|(BUFF1[s+1]<<(8-tempyid)); //h1左移tempyid位后和h2右移8-tempyid相或,取出移位后的數據。
- // temp1=255-temp1;
- /************************************************************/
- if(ucFontColor==1) //紅色
- {
- SERg=SERg1=1;
- for(k=0;k<8;k++)
- {
- SCK=0;
- SERr=(bit)(temp&0x01);//這里SERr定義成普通IO口就得了
- temp=temp>>1;
- SERr1=(bit)(temp1&0x01);
-
- temp1=temp1>>1;
- SCK=1;
- }
- }
- /***********************************************/
- else if(ucFontColor==2)//綠色
- {
- SERr=SERr1=1;
- for(k=0;k<8;k++)
- {
- SCK=0;
- SERg=(bit)(temp&0x01);//這里SERr定義成普通IO口就得了
- temp=temp>>1;
- SERg1=(bit)(temp1&0x01);
- temp1=temp1>>1;
- SCK=1;
- }
- }
- else if(ucFontColor==3)//黃色
- {
- for(k=0;k<8;k++)
- {
-
- SCK=0;
- SERr=SERg=(bit)(temp&0x01);//這里SERr定義成普通IO口就得了
- temp=temp>>1;
- SERr1=SERg1=(bit)(temp1&0x01);
-
- temp1=temp1>>1;
- SCK=1;
- }
- }
- }
- }
復制代碼
|