打印

求助 数码管和点阵怎么同时工作

[复制链接]
1889|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
未央未央|  楼主 | 2018-11-17 22:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大佬们,我是想让数码管显示2018,点阵显示0--9,请大佬们指教我该怎么改正
#include<reg51.h>[img][/img]
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

//uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code DSY_CODE[]={0xa4,0xc0,0xf9,0x80};
uchar code wei[]={0x80,0x40,0x20,0x10};
unsigned char const xuehao[]={
0x00,0x00,0xFE,0x82,0x82,0x82,0xFE,0x00, //0
0x00,0x00,0x84,0x82,0xFF,0x80,0x80,0x00, //1
0x00,0x00,0xF2,0x92,0x92,0x92,0x9E,0x00, //2
0x00,0x00,0x92,0x92,0x92,0xFE,0x00,0x00, //3
0x00,0x20,0x30,0x28,0x24,0xFE,0x20,0x00, //4
0x00,0x00,0x9E,0x92,0x92,0x92,0xF2,0x00, //5
0x00,0x00,0xFE,0x92,0x92,0x92,0xF2,0x00, //6
0x00,0x00,0x00,0x02,0x02,0x02,0xFE,0x00, //7
0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, //8
0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00  //9
                                    };
unsigned char code lie[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void DelayMS(uint x)
{
        uchar t;
        while(x--) for(t=0;t<120;t++);
}

void Timer1Init()
{
        TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。

        TH1=0XFC;        //给定时器赋初值,定时1ms
        TL1=0X18;       
        ET1=1;//打开定时器1中断允许
        EA=1;//打开总中断
        TR1=1;//打开定时器                       
}
void main()
{
       
        uchar i;
        while(1)
                {
                        for(i=0;i<4;i++)
                {
                        P3=0x00; //关闭显示
                  P1=DSY_CODE[i]; //发送数字段码
                        P3=wei[i];
            DelayMS(10);
                 }
                Timer1Init();  //定时器1初始化
          }
          


}
void Timer1() interrupt 3
{
  uchar t,j,k;
        TH1=0XFC;        //给定时器赋初值,定时1ms
        TL1=0X18;
          for(t=0;t<10;t++)
    {
       for(j=0;j<30;j++)
        {
          for(k=0;k<8;k++)
           {
            P2=lie[k];
            P0=~xuehao[t*8+k];
                                                 DelayMS(2);
                                         }
                                 }
    }
               
}

相关帖子

沙发
未央未央|  楼主 | 2018-11-17 22:08 | 只看该作者
本帖最后由 未央未央 于 2018-11-17 22:15 编辑

使用特权

评论回复
板凳
未央未央|  楼主 | 2018-11-17 22:08 | 只看该作者
本帖最后由 未央未央 于 2018-11-17 22:17 编辑

请大神指教

使用特权

评论回复
地板
一事无成就是我| | 2018-11-18 00:17 | 只看该作者
IO口分开的,同时刷新就是,看你程序结构就是学习的,工程上一班在主程序里刷新,点阵刷新加快一倍,不然会感觉到闪烁

使用特权

评论回复
5
gx_huang| | 2018-11-18 09:01 | 只看该作者
主程序里刷新显示的,基本上是书呆子的教程,只适合简单的场合,显示效果很差,容易闪烁。
高级的,一般是定时器里定时刷新,主程序只更新需要显示的内容即可。

使用特权

评论回复
6
一事无成就是我| | 2018-11-19 00:01 | 只看该作者
谁给你说的高级的在定时器里执行,做过工程没有,中断里执行会严重的影响事件时事性,难道你没有听说过有限状态机吗

使用特权

评论回复
评论
gnaijnaoul 2018-11-19 08:21 回复TA
在中断里驱动LED几条IO口的赋值指令就完成了,怎么会影响中断的响应速度了? 一般程序架构肯定都是上层逻辑层,底层驱动层。 
7
1261867136| | 2018-11-20 10:25 | 只看该作者
我能推荐鸿哥的状态机思维吗?~

使用特权

评论回复
8
一事无成就是我| | 2018-11-21 11:35 | 只看该作者
在中断里执行才是书呆子的教程模式,还是自己多去看看操作系统原理,搞清楚时间分片对你有好处的,裸奔也是操作系统,只不过是你自己编写的专用操作系统,要从宏观的系统去安排,别动不动就那么偏激,有利有弊,选择是中断中还是主程序中是看系统的复杂程度确定的,一般多进程都是在主程序里循环扫描执行的,记住不是教学立场里的那种独占资源

使用特权

评论回复
9
q977389872| | 2018-12-11 11:22 | 只看该作者
看帖留言学习

使用特权

评论回复
10
无语画眉| | 2019-3-27 10:02 | 只看该作者
看帖留言学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

14

帖子

0

粉丝