刚学习单片机,开始做了个8*8的点阵屏,当时做好后能正常仿真运行,之后又想在此基础上加几个彩灯,就用中断把点阵放进去了,结果效果不行,就放弃了。
把关于中断和彩灯的程序注释掉,只留下点阵屏时,仿真还是会出现彩灯闪烁和中断触发,
把关于点阵屏的程序再重新建一个工程,之后仿真就出现问题。明明一模一样的代码啊,
求大家帮忙看一下问题在哪,非常感谢。
复制上来注释变成了乱码,有些注释改过来了
这就是没弄好的已经注释掉彩灯和中断的程序代码,仿真出来注释没起作用一样
- #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);
- // }
- // }
- // }
- // }
- }
复制代码 另外重建的点阵屏代码,只有点阵屏
- #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);
- }
- }
- }
- }
- }
复制代码
|