最近自己在學習點陣,點陣顯示也可以顯示自己想要的,可是左右移動實在是搞得不明不白,參考了許多的網上資料,還是丈二的和尚摸不著頭腦,自己的知識水平還是欠缺,自己寫的程序還是有問題的,希望大神給予文獻資料幫助,不勝感激!!
MCU;STC12C5616AD晶振24.576MHZ,行列使用的是74HC595級聯,
單片機源程序如下:
- #include<STC12C5630AD.H>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- #define SP 5 //移動速度,數字越小越快,數字越大越慢
- sbit HSER=P1^4; //14數據
- sbit HSCK=P1^3; //12鎖存 //行
- sbit HRCK=P1^2; //11時鐘
- sbit LSER=P1^7; //14數據
- sbit LSCK=P1^6; //12鎖存 //列
- sbit LRCK=P1^5; //11時鐘
- uchar code tah[]={
- 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
- uchar code tal[]={
- 0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,/*"0",0*/
- 0xFF,0xFF,0xFF,0xF7,0xF1,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xC1,0xFF,0xFF,/*"1",1*/
- 0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xDF,0xDF,0xEF,0xF7,0xFB,0xBD,0x81,0xFF,0xFF,/*"2",2*/
- 0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xDF,0xE7,0xDF,0xBF,0xBF,0xBD,0xDD,0xE3,0xFF,0xFF,/*"3",3*/
- 0xFF,0xFF,0xFF,0xDF,0xCF,0xD7,0xDB,0xDB,0xDD,0xDD,0x81,0xDF,0xDF,0x87,0xFF,0xFF,/*"4",4*/
- 0xFF,0xFF,0xFF,0x81,0xFD,0xFD,0xFD,0xE5,0xD9,0xBF,0xBF,0xBD,0xDD,0xE3,0xFF,0xFF,/*"5",5*/
- 0xFF,0xFF,0xFF,0xC7,0xDB,0xFD,0xFD,0xE5,0xD9,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,/*"6",6*/
- 0xFF,0xFF,0xFF,0x81,0xDD,0xDD,0xEF,0xEF,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFF,0xFF,/*"7",7*/
- 0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xDB,0xE7,0xDB,0xBD,0xBD,0xBD,0xC3,0xFF,0xFF,/*"8",8*/
- 0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0x9B,0xA7,0xBF,0xBF,0xDB,0xE3,0xFF,0xFF,/*"9",9*/
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- };
- void H959(uchar num,uchar num1) //行
- {
- uchar i,k;
- for(i=0;i<8;i++)
- {
- HSER=num&0x80;
- num<<=1;
- _nop_();
- HRCK=0;
- _nop_();
- HRCK=1;
- HRCK=0;
- }
- for(k=0;k<8;k++)
- {
- HSER=num1&0x80;
- num1<<=1;
- _nop_();
- HRCK=0;
- _nop_();
- HRCK=1;
- HRCK=0;
- }
- _nop_();
- HSCK=0;
- _nop_();
- HSCK=1;
- HSCK=0;
- }
- void L959(uchar num,uchar num1,uchar num2,uchar num3) //列
- {
- uchar i,k,j,n;
- for(i=0;i<8;i++)
- {
- LSER=num&0x80;
- num<<=1;
- _nop_();
- LRCK=0;
- _nop_();
- LRCK=1;
- LRCK=0;
- }
- for(k=0;k<8;k++)
- {
- LSER=num1&0x80;
- num1<<=1;
- _nop_();
- LRCK=0;
- _nop_();
- LRCK=1;
- LRCK=0;
- }
- for(j=0;j<8;j++)
- {
- LSER=num2&0x80;
- num2<<=1;
- _nop_();
- LRCK=0;
- _nop_();
- LRCK=1;
- LRCK=0;
- }
- for(n=0;n<8;n++)
- {
- LSER=num3&0x80;
- num3<<=1;
- _nop_();
- LRCK=0;
- _nop_();
- LRCK=1;
- LRCK=0;
- }
- _nop_();
- LSCK=0;
- _nop_();
- LSCK=1;
- LSCK=0;
- }
- void delay1ms(void) //誤差 0us
- {
- unsigned char a,b;
- for(b=195;b>0;b--)
- for(a=30;a>0;a--);
- }
- void main()
- {
- HRCK=0;LRCK=0;
- while(1)
- {
- uchar k,j,i,n;
- for(j=0;j<96;j++)
- {
- for(n=0;n<SP;n++)
- {
- for(k=0;k<16;k++)
- {
- i=j+k;
- L959(tal[i+48],tal[i+32],tal[i+16],tal[i]);
- delay1ms();
- H959(tah[k+8],tah[k]);
- } }
- }
- }
復制代碼
|