找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1547|回复: 4
收起左侧

单片机+8*8点阵屏,程序仿真失败,求解答,谢谢

[复制链接]
ID:704714 发表于 2020-4-24 23:38 | 显示全部楼层 |阅读模式
刚学习单片机,开始做了个8*8的点阵屏,当时做好后能正常仿真运行,之后又想在此基础上加几个彩灯,就用中断把点阵放进去了,结果效果不行,就放弃了。
把关于中断和彩灯的程序注释掉,只留下点阵屏时,仿真还是会出现彩灯闪烁和中断触发,
把关于点阵屏的程序再重新建一个工程,之后仿真就出现问题。明明一模一样的代码啊,
求大家帮忙看一下问题在哪,非常感谢。
复制上来注释变成了乱码,有些注释改过来了

这就是没弄好的已经注释掉彩灯和中断的程序代码,仿真出来注释没起作用一样 错误.jpg
  1. #include <reg52.h>
  2. #include <intrins.h>


  3. //8*8点阵屏
  4. unsigned char code tabel [4][8]={
  5.         0xDB,0x00,0xDB,0x81,0xED,0xED,0xE9,0xEF,//&frac12;&Uacute;
  6.         0x83,0xBB,0xBB,0x83,0xBB,0xBB,0x83,0xFF,//&Egrave;&Otilde;
  7.         0xB7,0xB7,0xA1,0xB5,0x00,0xB7,0xAB,0x9D,//&iquest;ì
  8.         0xC3,0xB7,0xB7,0xB7,0x00,0xF7,0xD3,0xA5 //&Agrave;&Ouml;
  9. }; //4&cedil;&ouml;&Ecirc;&yacute;×é&pound;&not;&Atilde;&iquest;&cedil;&ouml;&Ecirc;&yacute;×é8&cedil;&ouml;

  10. sbit DIO=P3^4;
  11. sbit S_CLK=P3^5;
  12. sbit R_CLK=P3^6;

  13. void send_byte (unsigned char dat)   //发送字节函数
  14. {
  15.         unsigned char i;
  16.         dat=0xfe;
  17.         S_CLK=0;//给低电平
  18.         R_CLK=0;//给低电平
  19.         for (i=0;i<8;i++)
  20.         {
  21.                 if (dat & 0x01)  //&Egrave;&iexcl;dat&micro;&Auml;×&icirc;&micro;&Iacute;&Icirc;&raquo;
  22.                         DIO=1;
  23.                 else
  24.                         DIO=0;
  25.                 S_CLK=1; //给上升沿
  26.                 dat >>=1; //dat右移1
  27.                 S_CLK=0;  //拉低
  28.         }
  29. }

  30. //void delay (unsigned int p) //延时函数
  31. //{
  32. //        unsigned int x,y;
  33. //        for(x=p;x>0;x--)
  34. //           for(y=114;y>0;y--);
  35. //}

  36. ////LED
  37. //unsigned char temp; //LED变量

  38. unsigned char j,k,row;//8*8
  39. unsigned int z;//8*8


  40. //void zhongduan()
  41. //{
  42. //        EA=1;
  43. //        EX0=1;
  44. //        IT0=0;
  45. //}
  46.   


  47. void main ()
  48. {
  49. //        zhongduan();//中断初始化
  50. //                                //LED
  51. //                        temp=0xfe;
  52. //                        P1=temp;
  53. //                        P2=temp;
  54. //                        delay(100);
  55. //                        while(1)
  56. //                        {
  57. //                                temp=_crol_(temp,1);
  58. //                                P1=temp;
  59. //                                P2=temp;
  60. //                                delay(100);
  61. //                        }
  62.                 //8*8
  63.                         while (1)   //循环扫描
  64.                         {
  65.                                 for (k=0;k<4;k++) //&Iuml;&Ocirc;&Ecirc;&frac34;4&cedil;&ouml;×&Ouml;
  66.                                 {
  67.                                         for (z=0;z<1000;z++)
  68.                                         {
  69.                                                 row=0x80; //先选第一行(共阳极)
  70.                                                 for (j=0;j<8;j++)
  71.                                                 {
  72.                                                         send_byte(tabel[k][j]); //·列值
  73.                                                         send_byte(row); //行
  74.                                                         R_CLK=1; //给高,发出
  75.                                                         R_CLK=0;
  76.                                                         row=_cror_(row,1); //循环右移
  77.                                                 }
  78.                                         }
  79.                                 }        
  80.                         }

  81. //void zhongduan2() interrupt 0 //外部中断0
  82. //{
  83. //                //8*8
  84. //                        while (1)   //&Ntilde;&shy;&raquo;·&Eacute;¨&Atilde;è
  85. //                        {
  86. //                                for (k=0;k<4;k++)
  87. //                                {
  88. //                                        for (z=0;z<1000;z++)
  89. //                                        {
  90. //                                                row=0x80;
  91. //                                                for (j=0;j<8;j++)
  92. //                                                {
  93. //                                                        send_byte(tabel[k][j]);
  94. //                                                        send_byte(row);
  95. //                                                        R_CLK=1;
  96. //                                                        R_CLK=0;
  97. //                                                        row=_cror_(row,1);
  98. //                                                }
  99. //                                        }
  100. //                                }        
  101. //                        }
  102. }
复制代码
另外重建的点阵屏代码,只有点阵屏 只有点阵屏.jpg
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. unsigned char dat;

  4. unsigned char code tabel [4][8]={
  5.         0xDB,0x00,0xDB,0x81,0xED,0xED,0xE9,0xEF,//&frac12;&Uacute;
  6.         0x83,0xBB,0xBB,0x83,0xBB,0xBB,0x83,0xFF,//&Egrave;&Otilde;
  7.         0xB7,0xB7,0xA1,0xB5,0x00,0xB7,0xAB,0x9D,//&iquest;ì
  8.         0xC3,0xB7,0xB7,0xB7,0x00,0xF7,0xD3,0xA5 //&Agrave;&Ouml;
  9.         };

  10. sbit DIO=P3^4;
  11. sbit S_CLK=P3^5;
  12. sbit R_CLK=P3^6;

  13. void send_byte (unsigned char dat)
  14. {
  15.         unsigned char i;
  16.         dat=0xfe;
  17.         S_CLK=0;
  18.         R_CLK=0;
  19.         for (i=0;i<8;i++)
  20.         {
  21.                 if (dat & 0x01)
  22.                         DIO=1;
  23.                 else
  24.                         DIO=0;
  25.                 S_CLK=1;
  26.                 dat >>=1;
  27.                 S_CLK=0;
  28.         }
  29. }

  30. unsigned char j,k,row;
  31. unsigned int z;

  32. void main()
  33. {
  34.         while (1)
  35.         {
  36.                 for (k=0;k<4;k++)
  37.                 {
  38.                         for (z=0;z<1000;z++)
  39.                         {
  40.                                 row=0x80;
  41.                                 for (j=0;j<8;j++)
  42.                                 {
  43.                                         send_byte(tabel[k][j]);
  44.                                         send_byte(row);
  45.                                         R_CLK=1;
  46.                                         R_CLK=0;
  47.                                         row=_cror_(row,1);
  48.                                 }
  49.                         }
  50.                 }
  51.         }
  52. }
复制代码



回复

使用道具 举报

ID:704714 发表于 2020-4-25 09:25 | 显示全部楼层
不要沉啊
回复

使用道具 举报

ID:275826 发表于 2020-4-25 11:04 | 显示全部楼层
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;
        }
}去掉dat=0xfe;
回复

使用道具 举报

ID:704714 发表于 2020-4-25 12:59 | 显示全部楼层
tyrl800 发表于 2020-4-25 11:04
void send_byte (unsigned char dat)
{
        unsigned char i;

去掉可以了,终于弄回来了,太感谢您了,谢谢!!!
回复

使用道具 举报

ID:704714 发表于 2020-4-25 13:39 | 显示全部楼层
tyrl800 发表于 2020-4-25 11:04
void send_byte (unsigned char dat)
{
        unsigned char i;

去掉可以了,终于弄回来了,太感谢您了,谢谢!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表