找回密码
 立即注册

QQ登录

只需一步,快速开始

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

八位数码管和32x16的点阵怎么用啊,有干扰

[复制链接]
ID:272089 发表于 2018-11-7 18:07 | 显示全部楼层 |阅读模式
YL-236设备上的,我的这个会有干扰
  1. #include<reg51.h>
  2. #include<intrins.h>

  3. #define uchar unsigned char
  4. #define uint  unsigned int

  5. sbit cs1=P2^0; sbit cs2=P2^1; sbit wr=P2^2;

  6. void delay(uint i){while(--i);}

  7. void delays(uchar i)
  8. {
  9.     uchar j;
  10.     for(j=0;j<i;j++)
  11.         {
  12.            delay(55550);
  13.            delay(55550);
  14.         }
  15. }

  16. sbit row0=P3^7;sbit row1=P2^3;sbit col0=P2^4;
  17. sbit col1=P2^5;sbit col2=P2^6;sbit col3=P2^7;

  18. sbit ka1=P3^3; sbit ka2=P3^4; sbit ka3=P3^5; sbit ka4=P3^6;
  19. sbit LED1=P1^0; sbit pri=P1^1;        sbit out1=P3^0; sbit out2=P1^2;
  20. sbit sw=P3^1;  sbit sb=P3^2;

  21. //字模数组,一个8*8字符占1行
  22. uchar code zm[][8] =
  23. {        
  24.       0x40,0x42,0x44,0xF4,0x40,0x40,0x47,0x44,         //进
  25.       0xF4,0x44,0x44,0x44,0x24,0x0A,0xF1,0x00,
  26.       0x04,0x04,0x14,0x3F,0x04,0x04,0x04,0x14,
  27.       0x3F,0x04,0x04,0x04,0x04,0x64,0x3F,0x00,

  28.       0x10,0x92,0x54,0x34,0x10,0xFF,0x10,0x18,         //料
  29.       0x38,0xD4,0x54,0x12,0x11,0x10,0x10,0x10,
  30.       0x10,0x10,0x12,0x14,0x10,0x12,0x14,0x14,
  31.       0x70,0x1F,0x10,0x10,0x10,0x10,0x10,0x10,

  32.       0x48,0x88,0x88,0xE8,0x3F,0x28,0xC8,0x58,          //搅
  33.       0x4C,0x4B,0x48,0x48,0x48,0x08,0x8A,0x64,
  34.       0x22,0x24,0x14,0x7F,0x40,0x20,0x1F,0x10,
  35.       0x12,0x12,0x12,0x12,0x12,0x45,0x44,0x78,

  36.       0x08,0x08,0x48,0x88,0x3F,0xC8,0x28,0x18,          //拌
  37.       0x0C,0xEB,0x08,0x08,0x08,0x08,0x0A,0x04,
  38.       0x02,0x02,0x12,0x0A,0x02,0x3F,0x02,0x02,
  39.       0x22,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,

  40.       0x08,0x08,0x08,0x48,0xFF,0x48,0x48,0x48,          //加
  41.       0x48,0x44,0x44,0x44,0x44,0x52,0x21,0x00,
  42.       0x00,0x00,0x20,0x7E,0x22,0x22,0x22,0x22,
  43.       0x22,0x22,0x22,0x22,0x22,0x3E,0x22,0x00,

  44.       0x10,0x10,0x10,0xFE,0x10,0x50,0x38,0x16,          //热
  45.       0x10,0x10,0x94,0x48,0x00,0x12,0x22,0x21,
  46.       0x02,0x02,0x12,0x3F,0x12,0x12,0x13,0x12,
  47.       0x15,0x51,0x50,0x20,0x00,0x11,0x62,0x42,

  48.       0x10,0x12,0xD4,0x10,0x18,0x94,0x52,0x90,          //装
  49.       0xFF,0x40,0x20,0x30,0x28,0xA6,0x60,0x20,
  50.       0x02,0x12,0x3F,0x02,0x0A,0x1F,0x00,0x20,
  51.       0x7F,0x10,0x09,0x05,0x02,0x0C,0x70,0x20,

  52.       0x42,0xA4,0x14,0x7F,0x24,0x24,0x24,0x24,          //瓶
  53.       0xFF,0x24,0x24,0xA4,0xA4,0xA2,0xA1,0x20,
  54.       0x20,0x7F,0x01,0x11,0x3F,0x11,0x11,0x13,
  55.       0x15,0x15,0x11,0x10,0x14,0x53,0x50,0x60
  56. };

  57. uchar buf[8];          //缓存

  58. uchar code ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
  59. uchar buf1[8];

  60. void dis()
  61. {
  62.     uchar i,j=0x7f;
  63.         for(i=0;i<8;i++)
  64.         {
  65.            cs1=0;cs2=1;
  66.            P0=ledcode[buf1[i]];wr=1;wr=0;
  67.            cs1=1;cs2=0;
  68.            P0=j;wr=1;wr=0;
  69.            delay(100);
  70.            cs1=cs2=1;
  71.            j=_cror_(j,1);
  72.            P0=0xff;wr=1;wr=0;
  73.         }
  74. }

  75. void disp3216(){
  76.         uchar i,n;
  77.         uint row=0x01;
  78.         for(i=0;i<16;i++){
  79.                 n=i<8?0:1;
  80.                 P0=zm[buf[0+4*n]][i-8*n];         col0=1;col0=0;
  81.                 P0=zm[buf[1+4*n]][i-8*n];        col1=1;col1=0;
  82.                 P0=zm[buf[2+4*n]][i-8*n];        col2=1;col2=0;
  83.                 P0=zm[buf[3+4*n]][i-8*n];        col3=1;col3=0;
  84.                 P0=row%0x100;        row0=1;row0=0;
  85.                 P0=row/0x100;        row1=1;row1=0;
  86.                 delay(50);                 row=_irol_(row,1);
  87.                 P0=0;
  88.                 row0=row1=col0=col1=col2=col3=1;
  89.                 row0=row1=col0=col1=col2=col3=0;               
  90.         }
  91. }

  92. void s16x16(uchar c,uchar n){
  93.         c%=3;                 
  94.         n=n*4+0;          //计算字模实际行号
  95.         buf[c]=n;buf[c+1]=n+2;           
  96.         buf[c+4]=n+1;buf[c+5]=n+3;
  97. }

  98. void init()
  99. {   
  100.     TMOD=0X01;
  101.         EA=ET0=TR0=1;
  102.     buf[0]=buf[1]=buf[2]=buf[3]=10;
  103.         buf[4]=buf[5]=buf[6]=buf[7]=10;
  104.            ka1=ka2=ka3=ka4=1;
  105.         LED1=0;
  106. }
  107. bit workflag=1;

  108. void guti()
  109. {
  110.     s16x16(0,0);
  111.     s16x16(2,1);
  112.          ka1=0;
  113.         buf1[0]=1;
  114.         delays(10);
  115.         ka1=1;
  116.         delays(5);
  117.         ka1=0;
  118.         buf1[0]=2;
  119.         delays(10);
  120.         ka1=1;         
  121. }

  122. void main()
  123. {
  124.     init();
  125.         while(1)
  126.         {
  127.            if(sb==0){workflag=0;LED1=1;}
  128.            while(workflag==0)
  129.            {
  130.                guti();
  131.                   
  132.            }
  133.            //dis();
  134.         }
  135. }
  136. void time() interrupt 1
  137. {
  138.     TH0=0XFC;
  139.         TL0=0x17;
  140.         disp3216();
  141.         dis();
  142. }
复制代码



回复

使用道具 举报

ID:274097 发表于 2018-11-8 06:18 | 显示全部楼层
从程序上来看,两个显示器件都用了P0口,产生中断后每个器件执行显示一次。这个可以增加外设器件在硬件上对P0口进行扩展,把两个器件分开,当然这要增加地址选择线,要增加代码。或是把一个器件改接到其它端口,并改动程序。
回复

使用道具 举报

ID:422732 发表于 2018-11-8 08:21 | 显示全部楼层
学习了
回复

使用道具 举报

ID:123289 发表于 2018-11-8 13:13 | 显示全部楼层
把所有的LED的段看成是一个点,就可以了。
回复

使用道具 举报

ID:36900 发表于 2019-9-5 22:08 | 显示全部楼层
请问高手们: P0=row%0x100;        row0=1;row0=0;
                P0=row/0x100;        row1=1;row1=0;
                delay(50);                 row=_irol_(row,1);
程序中的P0=row%0x100;与P0=row/0x100;怎么理解,始终搞不明白呀?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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