找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机交通灯设计源码

[复制链接]
跳转到指定楼层
楼主
ID:145459 发表于 2016-11-2 11:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/**************************************************
实验名:交通灯设计
实验内容:利用中断,定时/计数器,数码管和led灯进行交通灯的设计
*************************************************/                                                               
                                       #include <reg52.h>
                                 #define uint unsigned int
                                        #define uchar unsigned char
                                        sbit wei1=P2^4;             //定义位选 0
                                        sbit wei2=P2^5;             //1
                                        sbit wei3=P2^6;             //2
                                        sbit wei4=P2^7;             //3
                                        sbit green_we=P1^2;         //定义交通灯绿东西
                                        sbit green_ns=P1^3; //定义交通灯绿南北
                                        sbit red_we=P1^0;    //定义交通灯红东西
                                        sbit red_ns=P1^1;      //定义交通灯红南北
                                        sbit yellow_we=P1^4;        //定义交通灯黄东西
                                        sbit yellow_ns=P1^5;         //定义交通灯黄南北
                                        uchar num,num1,shi_we,shi_ns,ge_we,ge_ns;
                                        uint xianshi_we,xianshi_ns;
                                        uchar code table[]={
                                        0x3f,0x06,0x5b,0x4f,0x66,
                                        0x6d,0x7d,0x07,0x7f,0x6f}; //定义数值0,1,2....9
                                        void delayms(uint xsm) //延时程序
                                        {
                                        uint i,j;
                                        for(i=xsm;i>0;i--)
                                        for(j=110;j>0;j--);
                                        }
                                        void display(uchar shi_we,uchar ge_we,ucharshi_ns,uchar ge_ns)          //定义数码管函数
                                        {
                                        wei1=1;
                                        wei2=0;
                                        wei3=0;
                                        wei4=0;
                                        P0=table[shi_we];
                                        delayms(5);
                                        wei1=0;
                                        wei2=1;
                                        wei3=0;
                                        wei4=0;
                                        P0=table[ge_we];
                                        delayms(5);
                                        wei1=0;
                                         wei2=0;
                                        wei3=1;
                                        wei4=0;
                                        P0=table[shi_ns];
                                        delayms(5);
                                        wei1=0;
                                        wei2=0;
                                        wei3=0;
                                        wei4=1;
                                        P0=table[ge_ns];
                                        delayms(5);
                                        }
                                        void main()
                                        {
                                        num=0;
                                        num1=0;
                                        xianshi_we=99;
                                        xianshi_ns=99;
                                        shi_we=9;
                                        ge_we=9;
                                        shi_ns=9;
                                        ge_ns=9;
                                        TMOD=0x51;                                   //设置定时器0和计数器1为工作方式1
                                        TH0=(65536-46080)/256;    //设置初值
                                        TL0=(65536-46080)%256;
                                        TH1=(65536-46080)/256;
                                        TL1=(65536-46080)%256;
                                        EA=1;                                        //开总中断
                                        ET0=1;                                               //开定时器0中断
                                        ET1=1;                                               //开定时器1中断
                                        TR0=1;                                               //启动定时器0
                                        TR1=1;                                               //启动定时器1
                                        P1=0xff;         //led灯全灭
                                        P1=0xf6;  //定义东西亮红灯,南北亮绿灯;
                                        while(1)
                                        {
                                               display(shi_we,ge_we,shi_ns,ge_ns);
                                                 if(num1==1140)
                                               {
                                               P1=0xde;//定义东西亮红灯,南北亮黄灯;
                                               }
                                    if(num1==1200)
                                               {
                                               P1=0xf9;//定义东西亮绿灯,南北亮红灯;
                                               xianshi_we=60;
                                    xianshi_ns=60;
                                               }
                                    if(num1==2340)
                                               {
                                               P1=0xed;//定义东西亮黄灯,南北亮红灯;
                                               }
                                    if(num1==2400)
                                               {
                                               num1=0;
                                               xianshi_we=60;
                                    xianshi_ns=60;
                                               P1=0xf6;//定义东西亮红灯,南北亮绿灯;
                                               }
                                        }
                                        }
                                        void T0_time()interrupt 1
                                        {
                                               TH0=(65536-46080)/256;
                                               TL0=(65536-46080)%256;
                                               num++;
                                               if(num%20==0)
                                               {
                                          num=0;
                                                xianshi_we--;
                                           xianshi_ns--;
                                                shi_we=xianshi_we/10;
                                                ge_we=xianshi_we%10;
                                                shi_ns=xianshi_ns/10;
                                                ge_ns=xianshi_ns%10;
                                                }
                                        }
                                        void T1_count() interrupt 3
                                        {
                                        TH1=(65536-46080)/256;
                                        TL1=(65536-46080)%256;
                                        num1++;
                                        }

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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