找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1165|回复: 0
打印 上一主题 下一主题
收起左侧

单片机8*8点阵,帮忙看程序哪里有问题,谢谢!

[复制链接]
跳转到指定楼层
楼主
ID:908996 发表于 2021-5-13 14:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 javastory 于 2021-5-13 16:36 编辑

我的问题是,给的数据是temp=0x7e,就是让点阵0和7列不亮,其他都亮,但是现在的现象是,在proteus里一步一步执行,每列导通的时候,行数据会变化2-3次,感觉是行、列数据不同步,但是printf输出的数据都是正确的数据。不知道问题在哪里,帮忙看看程序哪里错了吗?
8*8的点阵扫描代码,程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <stdio.h>

  4. #define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))
  5. #define ITM_Port16(n)    (*((volatile unsigned short*)(0xE0000000+4*n)))
  6. #define ITM_Port32(n)    (*((volatile unsigned long *)(0xE0000000+4*n)))

  7. #define DEMCR       (*((volatile unsigned long *)(0xE000EDFC)))
  8. #define TRCENA       0x01000000

  9. char putchar(char s)
  10. {
  11.     SBUF=s;
  12.    while(TI==0)
  13.    {
  14.       _nop_();
  15.    }
  16.    TI=0;

  17. }


  18. sbit ADDR0 = P2^0;
  19. sbit ADDR1 = P2^1;
  20. sbit ADDR2 = P2^2;
  21. sbit ADDR3 = P2^3;
  22. sbit COW_1641 = P0^0;  
  23. //sbit COW_1642 = P0^2;
  24. sbit CLK_1641 = P0^1;  
  25. sbit CLK_1642 = P0^3;
  26. sbit CLE_1641 = P0^2;

  27. unsigned char colcount[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

  28. unsigned char code image[8] = {0x00,0x00,0x7E,0x50,0x50,0x50,0x00,0x00};

  29. unsigned char i = 0;   //动态扫描的索引
  30. unsigned int cnt = 0;  //记录 T0 中断次数
  31. unsigned char flag1s = 0;  //1 秒定时标志


  32. void delay(unsigned int delay){
  33.         unsigned char i;
  34.         for(;delay>0;delay--)
  35.                 for(i=0;i<150;i++);
  36. }


  37. void main(){
  38.         unsigned long sec = 0;  //记录经过的秒数

  39.     EA = 1;        //使能总中断
  40.     CLE_1641 = 1;

  41.     TMOD = 0x01;  //设置 T0 为模式 1
  42.     TH0  = 0xFC;  //为 T0 赋初值 0xFC67,定时 1ms
  43.     TL0  = 0x67;
  44.     ET0  = 1;     //使能 T0 中断
  45.     TR0  = 1;     //启动 T0
  46.         while ( 1 ) {

  47.         
  48.         }
  49. }

  50. /* 定时器 0 中断服务函数 */
  51. void InterruptTimer0() interrupt 1 {
  52.         unsigned int col,coldata,speed;                                                                                                               
  53.         unsigned char temp;
  54.     TH0 = 0xFC;  //重新加载初值
  55.     TL0 = 0x67;
  56.     cnt++;        //中断次数计数值加 1
  57.     if (cnt >= 1000)  //中断 1000 次即 1 秒
  58.     {
  59.         cnt = 0;       //清零计数值以重新开始下 1 秒计时
  60.         flag1s = 1;   //设置 1 秒定时标志为 1
  61.     }
  62.     //以下代码完成数码管动态扫描刷新
  63.     for (col=0;col<8;col++){
  64.                 P2=col;
  65.                 //temp=image[col];
  66.                 temp=0x7E;
  67.                 printf("col = %u  temp 1 = 0x%lX \n", col, temp);
  68.                         for(coldata=0;coldata<8;coldata++){
  69.                                 
  70.                                 printf("coldata = %u  temp&0x80 = 0x%lX \n",coldata,temp);
  71.                                 CLK_1641 = 0;
  72.                                 COW_1641=temp&0x01;
  73.                                 printf("coldata = %u  COW_1641 = 0x%lX \n",coldata,COW_1641);
  74.                                 CLK_1641 = 1;
  75.                                 temp>>=1;
  76.                                 
  77.                                 printf("temp <<1  = 0x%lX \n",temp);
  78.                         }

  79.         }
  80. }

复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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