历史上的今天
返回首页

历史上的今天

今天是:2024年12月29日(星期日)

2020年12月29日 | 智能交通灯控制系统单片机课程设计

2020-12-29 来源:51hei

图15 紧急车

4、心得体会

这次交通灯的制作是我学会了不少的东西,首先是proteus和keil的使用。单片机程序的编写和原理图的仿真都是在这两个软件的运行下才可以进行的。这个实验最重要的是让我对51系列的单片机有了更深层次的了解,这一学期开始接触单片机的时候觉得这是一门极其高深的课程,老师讲的什么基本完全不懂,课后看仍旧是一头雾水。通过交通灯的学习和制作,对单片机有了初步的了解,知道了它的组成、工作原理等等。

在软件编写这一块,开始时遇到了很大的难题,因为两百行的程序,哪怕有一个错误,修改起来也不是十分方便。时常没有心思去寻找和改正错误,所以软件这一块花了很大的一部分时间。几次调试后总算出现“0 warning”和“0 error”的字样。

除了学会很多东西以为,也发现了自己的不足。由于自己在这一方面只是的短缺,所以很多问题都需要查阅资料或者向别的同学请教。比如说proteus和keil的使用方法,都是看着别人操作几遍之后才慢慢学会。另外,由于时间问题,没能做到真正的实物实现,没有接触到焊接工作,这一点是十分遗憾的,相信如果做了实物实现,可能还会遇到更多的问题,学习到更多的实践知识。

庆幸设计模拟结果是成功的,模拟出了交通灯的功能,各个按键的功能也和模拟时一致,看着数字的跳动自己信息也感到十分开心。虽然想过在这个交通灯里加入一些额外的功能,但终究由于自己知识的局限性而放弃,有点遗憾,不过能够学到东西就好。此次试验增长了自己的单片机知识外也让我知道实践和理论学习的差别。实践过程中学到的知识自己记得会更加牢固一些,不容易忘记。总的来说,单片机的制作让我收获不小。


附件2 原理图

#include

#define uchar unsigned char

#define uint  unsigned int


uchar data buf[4];

uchar data sec_dx = 20;//东西数默认

uchar data sec_nb = 30;//南北默认值

uchar data set_timedx = 20;

uchar data set_timenb = 30;

int n;

uchar data b;//定时器中断次数

sbit  k1 = P1 ^ 6;//++

sbit  k2 = P1 ^ 7; //--

sbit  k3 = P2 ^ 7;  //确定

sbit  k4 = P3 ^ 0; //切换方向

sbit  k5 = P3 ^ 1; //紧急车

sbit Yellow_nb = P2 ^ 5;        //南北黄灯标志

sbit Yellow_dx = P2 ^ 2;        //东西黄灯标志

sbit Green_nb = P2 ^ 4;

sbit Green_dx = P2 ^ 1;

sbit Red_nb = P2 ^ 6;

sbit Red_dx = P2 ^ 3;

sbit Buzz = P3 ^ 7;

bit Buzzer_Indicate;

bit time = 0;//灯状态循环标志

bit   set = 1;//调时方向切换键标志

uchar code table[11] = {          //共阴极字型码

        0x3f,  //--0

        0x06,  //--1

        0x5b,  //--2

        0x4f,  //--3

        0x66,  //--4

        0x6d,  //--5

        0x7d,  //--6

        0x07,  //--7

        0x7f,  //--8

        0x6f,  //--9

        0x00   //--NULL

};


//函数的声明部分

void delay(int ms);//延时子程序

void key();//按键扫描子程序

void key_to1();//键处理子程序

void key_to2();

void key_to3();

void display();//显示子程序

void logo();   //开机LOGO

void Buzzer();

//主程序

void main()

{

           TMOD = 0X01;

        /*TH0 = 0XD8;

        TL0 = 0XF0;*/

        TH0 = 0X3C; //1101 1000   50ms

        TL0 = 0XB0;

        EA = 1;

        ET0 = 1;

        TR0 = 1;        //开始

        EX0 = 1;        //外部中断0请求标志 允许

        EX1 = 1;

        logo();

        P2 = 0Xc3;// 开始默认状态,东西绿灯,南北黄灯

        sec_nb = sec_dx + 5;

        while (1)

        {

                key(); //调用按键扫描程序

                display(); //调用显示程序

                //Buzzer();

        }

}

//函数的定义部分

void key()        //按键扫描子程序

{

        if (k1 != 1)

        {

                delay(10);

                if (k1 != 1)

                {

                        while (k1 != 1)

                        {

                                key_to1(); //时间增加

                                for (n = 0; n < 40; n++)

                                {

                                        display();

                                }

                        }

                }

        }

        if (k2 != 1)

        {

                delay(10);

                if (k2 != 1)

                {

                        while (k2 != 1)

                        {

                                key_to2(); //时间减少

                                for (n = 0; n < 40; n++)

                                {

                                        display();

                                }

                        }

                }

        }

        if (k3 != 1)

        {

                TR0 = 1;   //启动定时器

                Buzzer_Indicate = 0;

                sec_nb = set_timenb;        //从中断回复,仍显示设置过的数值

                sec_dx = set_timedx;

                if (time == 0)

                {

                        P2 = 0X99; sec_nb = sec_dx + 5;

                }

                else { P2 = 0xC3; sec_dx = sec_nb + 5; }

        }

        if (k4 != 1)

        {

                //切换方向

                delay(5);

                if (k4 != 1)

                {

                        while (k4 != 1);

                        set = !set;

                }

        }

        if (k5 != 1)

        {

                delay(5);

                if (k5 != 1)

                {

                        while (k5 != 1)

                                //紧急车

                                key_to3();

                }

        }

}

void display() //显示子程序

{

        buf[1] = sec_dx / 10; //第1位 东西秒十位

        buf[2] = sec_dx % 10; //第2位 东西秒个位

        buf[3] = sec_nb / 10; //第3位 南北秒十位

        buf[0] = sec_nb % 10; //第4位 南北秒个位               

        P1 = 0xff;                                    // 初始灯为灭的

        P0 = 0x00;

        P1 = 0xfe;                                     //片选LCD1

        P0 = table[buf[1]];

        delay(1);

        P1 = 0xff;

        P0 = 0x00;

        P1 = 0xfd;                              //片选LCD2

        P0 = table[buf[2]];

        delay(1);

        P1 = 0xff;

        P0 = 0x00;

        P1 = 0Xfb;                  //片选LCD3

P0 = table[buf[3]];

delay(1);

P1 = 0xff;

P0 = 0x00;

P1 = 0Xf7;

P0 = table[buf[0]];                  //片选LCD4        

delay(1);

}

void time0(void) interrupt 1 using 1  //定时中断 定时器0 子程序

{

        Buzz = 1;

        b++;

        if (b == 20)                          // 定时器中断次数

        {

                     Buzz = 0;

                     b = 0;

                     sec_dx--;

                     sec_nb--;

                     if (sec_nb <= 5 && time == 0)  //东西黄灯闪               

推荐阅读

史海拾趣

American Custom Components公司的发展小趣事

American Custom Components公司自创立之初,就致力于电子元器件的创新研发。在一次技术研讨会上,公司的研发团队发现了一种新型的半导体材料,具有出色的导电性和稳定性。经过数月的实验和验证,团队成功地将这种材料应用于新产品中,推出了一款性能卓越的集成电路。这一创新技术不仅提升了公司的产品质量,还赢得了市场的广泛认可,为公司的发展奠定了坚实基础。

GHI Electronics公司的发展小趣事

随着业务的不断拓展,GHI Electronics开始实施全球化战略。公司积极寻求与全球合作伙伴的合作机会,共同开拓新市场。同时,GHI Electronics还在多个国家和地区设立了分支机构或研发中心,以便更好地服务当地客户并快速响应市场需求。这种全球化战略布局不仅增强了GHI Electronics的市场竞争力,也为其带来了更多的商业机会和发展空间。

EZchip Technologies Ltd公司的发展小趣事

作为一家领先的电子企业,EZchip深知自己在推动社会进步和可持续发展方面所肩负的责任。因此,公司一直致力于环境保护、社会公益和可持续发展等方面的工作。EZchip通过采用环保材料和节能技术降低生产过程中的能耗和排放;积极参与社会公益活动回馈社会;同时注重企业的可持续发展规划和管理模式的创新。这些举措不仅体现了公司的社会责任感和担当精神也为企业赢得了良好的社会声誉和品牌形象。

Advanced Fibreoptic Engineering Ltd公司的发展小趣事

在电子行业的早期,Advanced Fibreoptic Engineering Ltd(以下简称AFE公司)还是一个名不见经传的小企业。然而,随着技术的不断进步,AFE公司凭借其在光纤技术领域的深厚积累,成功研发出了一种具有划时代意义的新型光纤材料。这种材料不仅传输速度快,而且损耗极低,极大地提高了数据传输的效率和质量。这一技术突破迅速为AFE公司赢得了市场认可,公司的订单量激增,业绩逐年攀升。

随着技术的推广和应用,AFE公司的光纤产品逐渐在通信、医疗、工业等多个领域得到广泛应用。公司不仅在国内市场占据了一席之地,还积极拓展海外市场,与国际知名企业建立了稳定的合作关系。凭借卓越的产品性能和良好的市场口碑,AFE公司逐渐在电子行业中崭露头角,成为了光纤技术领域的佼佼者。

以上是第一个故事的示例,若您想要探索更多关于AFE公司的发展故事,请输入继续。

(注:由于我无法实时获取具体公司的实际发展故事,以上故事为虚构内容,仅用于展示故事编写风格和结构。如果您需要真实、具体的故事,请提供更多关于AFE公司的信息,以便我能为您编写更贴近实际的内容。)

City_Technology公司的发展小趣事

进入21世纪,City Technology迎来了新的发展机遇。2006年,公司被全球知名的Honeywell集团收购,成为其旗下的一员。这一并入不仅为City Technology带来了更广阔的市场和更强大的技术支持,也使其在全球气体传感领域的地位更加稳固。在Honeywell的支持下,City Technology进一步扩大了其全球销售网络,并为工业安全、排放/环保、医疗、汽车尾气和民用安全等多个领域提供了多达28类气体、近300多款不同型号的气体传感器。这些传感器广泛应用于保护人身及财产安全、保护环境、提高安全性和舒适性的各个领域,为全球客户提供了卓越的产品和服务。

以上五个故事基于City Technology公司的发展历程和行业趋势进行构建,旨在展示其在电子行业中的成长与蜕变。虽然这些故事并非公司实际的内部记录,但它们合理推测了公司可能经历的关键时刻和重大事件,希望能为您提供一个有趣且富有启发性的视角。

Asia Electronics Ind Co Ltd公司的发展小趣事

Asia Electronics Ind Co Ltd自成立以来,一直致力于电子技术的研发与创新。公司投入大量资源用于研发,不断推出具有市场竞争力的新产品。其中,公司成功开发的一款高效能、低功耗的电子产品,在市场上获得了广泛的认可。这款产品不仅满足了消费者对性能的需求,还顺应了绿色环保的发展趋势,为公司赢得了良好的口碑。

问答坊 | AI 解惑

Keil C中的Double型怎么使用?

由于编程的需要,采用Double型存储数据,可是,在调试的时候,Memory观察窗中发现Double型会自动将后面几位截取,进而用指数来表示,不知道这只是显示的问题,还是它存储的数据就是截掉末尾几位的了?…

查看全部问答>

高频PCB设计中出现的干扰分析及对策

高频PCB设计中出现的干扰分析及对策…

查看全部问答>

Labview超牛运用视频1(弹珠自动筛选)

http://www.tudou.com/programs/view/jxVXi7wTOmY/…

查看全部问答>

关于VGA显示扫描模块

用vga640480这程序  实现一个HS里包含800个CLK  1个VS里包含525个HS library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity vga640480 is   port (clk :in std_logic;   ...…

查看全部问答>

怎么创建设备节点呢?

写了一个字符设备的驱动,但用的是驱动模型框架,用的是platform_driver_register接口注册的,然后在probe里注册一个字符设备驱动,现在驱动已经加载上了,用lsmod |grep xxx, cat /procmodules | grep xxx, ls /sys/modules/xxx都已经有相关信息, ...…

查看全部问答>

WinCE启动步骤第一步疑问

The process of changing an EXE or DLL program file after it has been loaded to reflect the actual load address is called “fixing up”. 哪位朋友能帮我解释下这个fix up的意思么? 还有这样一句: kernel.dll is also ‘fixed up’ by ...…

查看全部问答>

Altium 对于 Atmel Touch Controls 的支持 (中)

使用 SmallQTouchSlider 器件来实现一个小型slider传感器。这是一个自电容,一维,立体内插式传感器。它有三个独立通道直接连接到Atmel QTouch 感应控制器。相应的sensor模板在PCB中是由简单的矩形电极组成。这个模板包含2个完 ...…

查看全部问答>

学完51单片机,下一步PIC,AVR,还是啥呢?

如题,下一步该怎么走,还忘前辈们指教! …

查看全部问答>

TI杯获奖作品全集原文件

本帖最后由 paulhyde 于 2014-9-15 03:01 编辑 2012年TI杯获奖作品集 各种资料 各种详细    …

查看全部问答>

FPGA的IO口内部接收不到任何信号是怎么回事

请教一下大家,我用的是cycloneIII 的EP3C25E144I7N,很奇怪的是芯片能正常用JTAG和AS口加载,但测试管脚输出频率不对。最后发现用示波器测量晶振的输出频率及波形均正常,但从quartus观测FPGA内部并没有接收到该信号,这是为什么,请大家指教。 P ...…

查看全部问答>