剛學習單片機,開始做了個8*8的點陣屏,當時做好后能正常仿真運行,之后又想在此基礎上加幾個彩燈,就用中斷把點陣放進去了,結果效果不行,就放棄了。
把關于中斷和彩燈的程序注釋掉,只留下點陣屏時,仿真還是會出現彩燈閃爍和中斷觸發,
把關于點陣屏的程序再重新建一個工程,之后仿真就出現問題。明明一模一樣的代碼啊,
求大家幫忙看一下問題在哪,非常感謝。
復制上來注釋變成了亂碼,有些注釋改過來了
這就是沒弄好的已經注釋掉彩燈和中斷的程序代碼,仿真出來注釋沒起作用一樣
錯誤.jpg (572.86 KB, 下載次數: 39)
下載附件
2020-4-24 23:29 上傳
- #include <reg52.h>
- #include <intrins.h>
- //8*8點陣屏
- unsigned char code tabel [4][8]={
- 0xDB,0x00,0xDB,0x81,0xED,0xED,0xE9,0xEF,//½Ú
- 0x83,0xBB,0xBB,0x83,0xBB,0xBB,0x83,0xFF,//ÈÕ
- 0xB7,0xB7,0xA1,0xB5,0x00,0xB7,0xAB,0x9D,//¿ì
- 0xC3,0xB7,0xB7,0xB7,0x00,0xF7,0xD3,0xA5 //ÀÖ
- }; //4¸öÊý×飬ÿ¸öÊý×é8¸ö
- sbit DIO=P3^4;
- sbit S_CLK=P3^5;
- sbit R_CLK=P3^6;
- void send_byte (unsigned char dat) //發送字節函數
- {
- unsigned char i;
- dat=0xfe;
- S_CLK=0;//給低電平
- R_CLK=0;//給低電平
- for (i=0;i<8;i++)
- {
- if (dat & 0x01) //È¡datµÄ×îµÍλ
- DIO=1;
- else
- DIO=0;
- S_CLK=1; //給上升沿
- dat >>=1; //dat右移1
- S_CLK=0; //拉低
- }
- }
- //void delay (unsigned int p) //延時函數
- //{
- // unsigned int x,y;
- // for(x=p;x>0;x--)
- // for(y=114;y>0;y--);
- //}
- ////LED
- //unsigned char temp; //LED變量
- unsigned char j,k,row;//8*8
- unsigned int z;//8*8
- //void zhongduan()
- //{
- // EA=1;
- // EX0=1;
- // IT0=0;
- //}
-
- void main ()
- {
- // zhongduan();//中斷初始化
- // //LED
- // temp=0xfe;
- // P1=temp;
- // P2=temp;
- // delay(100);
- // while(1)
- // {
- // temp=_crol_(temp,1);
- // P1=temp;
- // P2=temp;
- // delay(100);
- // }
- //8*8
- while (1) //循環掃描
- {
- for (k=0;k<4;k++) //ÏÔʾ4¸ö×Ö
- {
- for (z=0;z<1000;z++)
- {
- row=0x80; //先選第一行(共陽極)
- for (j=0;j<8;j++)
- {
- send_byte(tabel[k][j]); //·列值
- send_byte(row); //行
- R_CLK=1; //給高,發出
- R_CLK=0;
- row=_cror_(row,1); //循環右移
- }
- }
- }
- }
- //void zhongduan2() interrupt 0 //外部中斷0
- //{
- // //8*8
- // while (1) //Ñ­»·É¨Ãè
- // {
- // for (k=0;k<4;k++)
- // {
- // for (z=0;z<1000;z++)
- // {
- // row=0x80;
- // for (j=0;j<8;j++)
- // {
- // send_byte(tabel[k][j]);
- // send_byte(row);
- // R_CLK=1;
- // R_CLK=0;
- // row=_cror_(row,1);
- // }
- // }
- // }
- // }
- }
復制代碼 另外重建的點陣屏代碼,只有點陣屏
只有點陣屏.jpg (575.68 KB, 下載次數: 24)
下載附件
2020-4-24 23:36 上傳
- #include <reg52.h>
- #include <intrins.h>
- unsigned char dat;
- unsigned char code tabel [4][8]={
- 0xDB,0x00,0xDB,0x81,0xED,0xED,0xE9,0xEF,//½Ú
- 0x83,0xBB,0xBB,0x83,0xBB,0xBB,0x83,0xFF,//ÈÕ
- 0xB7,0xB7,0xA1,0xB5,0x00,0xB7,0xAB,0x9D,//¿ì
- 0xC3,0xB7,0xB7,0xB7,0x00,0xF7,0xD3,0xA5 //ÀÖ
- };
- sbit DIO=P3^4;
- sbit S_CLK=P3^5;
- sbit R_CLK=P3^6;
- void send_byte (unsigned char dat)
- {
- unsigned char i;
- dat=0xfe;
- S_CLK=0;
- R_CLK=0;
- for (i=0;i<8;i++)
- {
- if (dat & 0x01)
- DIO=1;
- else
- DIO=0;
- S_CLK=1;
- dat >>=1;
- S_CLK=0;
- }
- }
- unsigned char j,k,row;
- unsigned int z;
- void main()
- {
- while (1)
- {
- for (k=0;k<4;k++)
- {
- for (z=0;z<1000;z++)
- {
- row=0x80;
- for (j=0;j<8;j++)
- {
- send_byte(tabel[k][j]);
- send_byte(row);
- R_CLK=1;
- R_CLK=0;
- row=_cror_(row,1);
- }
- }
- }
- }
- }
復制代碼
|