5192|11

25

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于4位数码管的动态显示问题,新手虚心求教,有空的大兄弟进来看看 [复制链接]

以下是程序,下载到板子上不能实现一秒变化一次,大概8秒才一次
#include
typedef unsigned char uint8;
typedef unsigned int  uint16;
typedef unsigned long uint32;

code uint8 number[] = {0xc0,0xf9,0xa4,0xb0,
                                                              

                       0x99,0x92,0x82,0xf8,
                                                              

                       0x80,0x90,0x88,0x83,
                                                              

                       0xa7,0xa1,0x86,0x8e}; //【16进制数组】
uint8  i = 0;
uint16 counter = 0;

//sbit ENLED = P1^4;
sbit SMG1 = P3^4;
sbit SMG2 = P3^5;
sbit SMG3 = P3^6;
sbit SMG4 = P3^7;

void timer1_init()                //定时器初始化
{
        TMOD |= 0x01;
        TH1   = 0xfc;
        TL1   = 0x67;                //1ms
        TR1   = 1;
}

void int_init()                        //中断初始化
{
        ET1 = 1;
        EA  = 1;
}

main()
{
        P0 = 0xff;P3 = 0xff;
    timer1_init();
        int_init();
        while(1);
}

void refresh() //数码管动态扫描显示
{
        static uint8 j = 0;

        switch(j)
        {
                case 0: SMG1 = 0;P0 = number[i];break;
                case 1: SMG2 = 0;P0 = number[i];break;
                case 2: SMG3 = 0;P0 = number[i];break;
                case 3: SMG4 = 0;P0 = number[i];break;
                default: break;
        }
        if(3 == j++)
                j = 0;
}

void interrupt_timer1() interrupt 3
{
        TH1 = 0xfc;
        TL1 = 0x67;
        counter++;
        if(1000 == counter)
        {
                i++;
                if(15 == i)
                {
                        i = 0;
                }       
        }
        refresh();
}



附上原理图
在线等  谢谢各位了~~

交通灯开发板原理图.pdf

89.1 KB, 下载次数: 12

此帖出自51单片机论坛

最新回复

下次再写就这样写吧,仅供参考 void timer1_init()                //定时器初始化 {         //初始化 } void display(void) {         //显示函数 } main() {         P0 = 0xff;P3 = 0xff;             timer1_init();         while(1)         {                 if(timer>=1)                 {                         dispaly_time++;                         check_time++;                         timer=0;                 }                 if(display_time>=Display_Timer)                 {                         dispaly_time=0;                         display();                 }                 if(check_time>=Check_Timer)                 {                         check_time=0;                         //定时加1                 }         } } void interrupt_timer1() interrupt 3 {         TH1 = 0xfc;         TL1 = 0x67;         timer++; }   详情 回复 发表于 2015-2-12 20:13
点赞 关注
 

回复
举报

25

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
没人吗?有什么不清楚的可以说说  
此帖出自51单片机论坛
 
 
 

回复

750

帖子

3

TA的资源

版主

板凳
 
1,com口只开不关,估计数码管会飘一片红
2,屏变化慢,应该是定时器参数没调好,你再算算

另外说一点,数码管程序需要分层次写,将IO脚根据逻辑分组定义,这样你的上层程序会完全与硬件无关
此帖出自51单片机论坛
 
个人签名

要666

 
 

回复

750

帖子

3

TA的资源

版主

4
 
晕眩,刚才第一点说错了

lz的代码逻辑就有问题,1秒的扫描间隔?
至少需要30Hz(或更好) * 4(com口数量)的扫描频率
此帖出自51单片机论坛
 
个人签名

要666

 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

5
 
le062 发表于 2015-2-12 19:42
1,com口只开不关,估计数码管会飘一片红
2,屏变化慢,应该是定时器参数没调好,你再算算

另外说一点,数码管程序需要分层次写,将IO脚根据逻辑分组定义,这样你的上层程序会完全与硬件无关
1,数码管可以正常从0显示到F,只是不是1秒变化一次,没有出现飘红的情况,2.定时器参数应该没有算错  以前都是用这个,附上算法12*(65536-x)/1105926=0.001s  算出x,转化为16进制是 FC67
   数码管程序需要分层次写,将IO脚根据逻辑分组定义,这样你的上层程序会完全与硬件无关,,这句话没有理解到  能详细点吗?
  
谢谢细心解答~~THX!




此帖出自51单片机论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

6
 
le062 发表于 2015-2-12 19:49
晕眩,刚才第一点说错了

lz的代码逻辑就有问题,1秒的扫描间隔?
至少需要30Hz(或更好) * 4(com口数量)的扫描频率
我用的是1ms的扫描(定时器的fc67)。。1秒的是数组1秒变化一次达到秒表的效果



此帖出自51单片机论坛
 
 
 

回复

750

帖子

3

TA的资源

版主

7
 
闂備礁鎼悮顐﹀磿閸愯鑰块柛娑欐綑鐎氬銇勯幒鍡椾壕缂備焦顨嗛敃銏犵暦濡ゅ懎惟闁宠桨绀佹慨銈夋煟閻橀亶妾烽柛鏂跨箻椤㈡瑩骞嬮敂鑺ユ珫閻庡厜鍋撻柛鎰劤濞堬拷闂備浇鐨崱鈺佹缂傚倸绋勯幏锟�闂備胶鎳撻悺銊╂偋閻愬搫鐒垫い鎺戯攻鐎氾拷婵犵數鍋涢ˇ顓㈠礉瀹€鍕埞闁跨噦鎷�
此帖出自51单片机论坛
 
个人签名

要666

 
 

回复

977

帖子

4

TA的资源

纯净的硅(中级)

8
 
闂備礁鎼悮顐﹀磿閸愯鑰块柛娑欐綑鐎氬銇勯幒鍡椾壕缂備焦顨嗛敃銏犵暦濡ゅ懎惟闁宠桨绀佹慨銈夋煟閻橀亶妾烽柛鏂跨箻椤㈡瑩骞嬮敂鑺ユ珫閻庡厜鍋撻柛鎰劤濞堬拷闂備浇鐨崱鈺佹缂傚倸绋勯幏锟�闂備胶鎳撻悺銊╂偋閻愬搫鐒垫い鎺戯攻鐎氾拷婵犵數鍋涢ˇ顓㈠礉瀹€鍕埞闁跨噦鎷�
此帖出自51单片机论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

9
 
闂備礁鎼悮顐﹀磿閸愯鑰块柛娑欐綑鐎氬銇勯幒鍡椾壕缂備焦顨嗛敃銏犵暦濡ゅ懎惟闁宠桨绀佹慨銈夋煟閻橀亶妾烽柛鏂跨箻椤㈡瑩骞嬮敂鑺ユ珫閻庡厜鍋撻柛鎰劤濞堬拷闂備浇鐨崱鈺佹缂傚倸绋勯幏锟�闂備胶鎳撻悺銊╂偋閻愬搫鐒垫い鎺戯攻鐎氾拷婵犵數鍋涢ˇ顓㈠礉瀹€鍕埞闁跨噦鎷�
此帖出自51单片机论坛
 
 
 

回复

750

帖子

3

TA的资源

版主

10
 
闂備礁鎼悮顐﹀磿閸愯鑰块柛娑欐綑鐎氬銇勯幒鍡椾壕缂備焦顨嗛敃銏犵暦濡ゅ懎惟闁宠桨绀佹慨銈夋煟閻橀亶妾烽柛鏂跨箻椤㈡瑩骞嬮敂鑺ユ珫閻庡厜鍋撻柛鎰劤濞堬拷闂備浇鐨崱鈺佹缂傚倸绋勯幏锟�闂備胶鎳撻悺銊╂偋閻愬搫鐒垫い鎺戯攻鐎氾拷婵犵數鍋涢ˇ顓㈠礉瀹€鍕埞闁跨噦鎷�
此帖出自51单片机论坛
 
个人签名

要666

 
 

回复

977

帖子

4

TA的资源

纯净的硅(中级)

11
 
闂備礁鎼悮顐﹀磿閸愯鑰块柛娑欐綑鐎氬銇勯幒鍡椾壕缂備焦顨嗛敃銏犵暦濡ゅ懎惟闁宠桨绀佹慨銈夋煟閻橀亶妾烽柛鏂跨箻椤㈡瑩骞嬮敂鑺ユ珫閻庡厜鍋撻柛鎰劤濞堬拷闂備浇鐨崱鈺佹缂傚倸绋勯幏锟�闂備胶鎳撻悺銊╂偋閻愬搫鐒垫い鎺戯攻鐎氾拷婵犵數鍋涢ˇ顓㈠礉瀹€鍕埞闁跨噦鎷�
此帖出自51单片机论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

12
 
闂備礁鎼悮顐﹀磿閸愯鑰块柛娑欐綑鐎氬銇勯幒鍡椾壕缂備焦顨嗛敃銏犵暦濡ゅ懎惟闁宠桨绀佹慨銈夋煟閻橀亶妾烽柛鏂跨箻椤㈡瑩骞嬮敂鑺ユ珫閻庡厜鍋撻柛鎰劤濞堬拷闂備浇鐨崱鈺佹缂傚倸绋勯幏锟�闂備胶鎳撻悺銊╂偋閻愬搫鐒垫い鎺戯攻鐎氾拷婵犵數鍋涢ˇ顓㈠礉瀹€鍕埞闁跨噦鎷�
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播报名| TI 面向楼宇和工厂自动化行业的毫米波雷达解决方案
【内容简介】TI 60GHz IWRL6432和 IWRL1432毫米波雷达传感器如何帮助解决楼宇和工厂自动化应用中的感应难题
【直播时间】5月28日(周三)上午10:00
【直播礼品】小米双肩包、contigo水杯、胶囊伞、安克充电器

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 11

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表