找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stc单片机交通灯数码管计时

[复制链接]
跳转到指定楼层
楼主
大学刚刚学单片机没多久,老师要求做一个程序,数码管计时交通灯的[img=0,1]file:///C:\Users\boom\Documents\Tencent Files\775481073\Image\Group\5E[A0ZEWM)%%A8]5U~3MHRM.jpg[/img],大部分程序老师已经改了,只是要按照图片里要求闪烁的做不出来,求帮助,急用,下面是我编好的,这些是不能改的,只能往里面加程序。求大神帮忙指导一下那两个闪烁的部分,楼主新手不太会#include "stc15.h"
#include "intrins.h"
unsigned char miao;
unsigned char i;
unsigned char code DM[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x00}; //共阴段码
               //         0    1    2    3    4    5    6    7    8    9
unsigned char code WM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};              //位码
unsigned char code daojs[]={22,3,27,3};
unsigned char code jtd[]={0XF3,0XEB,0XDE,0XDD};

sbit   SER_595=P3^2;  //pin 14    SER    data input
sbit   RCLK_595=P3^3;   //pin 12   RCLK   store(latch)clock
sbit   SRCLK_595=P3^5;  //pin 11   SRCLK  shift data clock


void send_595(unsigned char dat)
{
    unsigned char   i;
    for(i=0;i<8;i++)
    {
        dat <<= 1;
        SER_595= CY;
        SRCLK_595 = 1;
        SRCLK_595 = 0;
     }
}


void     DisplayScan(unsigned char disp_index,unsigned char disp_data)
{
    send_595(WM[disp_index]);    //位码   
    send_595(DM[disp_data]);     //数码管显示数字的段码
    RCLK_595=1;                  //595锁存输出数据的时钟信号上升沿有效
    RCLK_595=0;

}

void Delay4ms()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        i = 44;
        j = 4;
        do
        {
                while (--j);
        } while (--i);
}


void Delay2ms()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        i = 22;
        j = 128;
        do
        {
                while (--j);
        } while (--i);
}


void xianshi()
{
        if(miao>15)
        {
        DisplayScan(0,11);
        Delay2ms();
        DisplayScan(1,11);
        Delay2ms();
        }
        else
        {
        if(miao>=10)
        {
        DisplayScan(0,miao/10);
        Delay2ms();
        DisplayScan(1,miao%10);
        Delay2ms();
        }
        else
        {
        DisplayScan(1,miao%10);
        Delay4ms();
    }
        }
}





void main()
{
    unsigned char i,j;
    while(1)
        {       
        miao=daojs;
        while(miao!=0)
        {
                P0=jtd;
                for(j=0;j<250;j++)
                {
                xianshi();
                }
                miao--;

        }

        i++;

        if(i>3)(i=0);
        }
        }


[img]file:///C:\Users\boom\Documents\Tencent Files\775481073\Image\Group\5E[A0ZEWM)%%A8]5U~3MHRM.jpg[/img]


QQ图片20170412205047.jpg (66.16 KB, 下载次数: 71)

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

使用道具 举报

沙发
ID:111634 发表于 2017-4-12 21:08 | 只看该作者
本帖最后由 zl2168 于 2017-4-12 22:01 编辑

给你个交通灯参考案例,内有绿灯闪烁程序,自己去对照学习修改吧!
实例29 模拟交通灯
先Proteus仿真一下,确认有效。
实例29 模拟交通灯.rar (35.12 KB, 下载次数: 14)

实例30 带限行时间显示的模拟交通灯
实例30 带限行时间显示模拟交通灯.rar (40.64 KB, 下载次数: 18)


缩短亮灯时间,是为了仿真演示,便于观看,否则,你等得不耐烦了,实际应用时,可可修改延长。以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。书中电路和程序设计有详细说明,程序语句条条有注解。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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