昨晚,做了一次电灯泡
来源:电子工程专辑 发布时间:2023-03-05
分享至微信


昨晚回家后,打算再做一次这种电灯泡。于是找出尘封已久的单片机,20分钟编写并调完程序,烧录后,跑起来,看动图:
一. 单片机那些往事
当初,为了钱,从嵌入式转到了互联网,面试准备得还可以,没啥问题。不过转行的头几个月,还是挺痛苦呢,很多东西要学。
虽然,现在工作与单片机硬件软件完全无关,却喜欢偶尔弄下这些玩意儿,体会下程序直接(无操作系统)运行在硬件上的感觉。
下图是我曾经的单片机,其型号是STC89C52,有点爱不释手的感觉,每次整理房间都要去擦擦它的灰尘,然后再观摩一番:
下图是我曾经玩的单片机开发板,好久不玩这些东西了。这些玩意儿,我还是挺熟悉的。很喜欢用程序直接控制硬件的感觉。
Lab Center Electronics公司做出了proteus软件,可以仿真和调试单片机。用Keil生成hex后,直接导入到单片机中。
二. 单片机点亮灯泡
下面,我们用C语言编写程序,来控制8051单片机。先来看用单片机点亮灯泡,其实就是置高电平操作,C语言程序如下:
#include<reg51.h>
void main()
{
while(1)
{
P1 = 1;
}
}

三. 单片机闪烁灯泡
#include<reg51.h>
void delay(int n)
{
int i = 0;
int j = 0;
for(i = n; i > 0; i--)
{
for(j = 110; j > 0; j--)
{
;
}
}
}
void main()
{
P1 = 1;
while(1)
{
P1 = 1 - P1;
delay(1000);
}
}
delay函数的作用是延时, main函数中 P1 = 1 - P1 的作用是让D1右边的电平在0和1这两个值中轮流变化,即对应高低电平。

四. 单片机玩流水灯
#include<reg51.h>
void delay(int n)
{
int i = 0;
int j = 0;
for(i = n; i > 0; i--)
{
for(j = 110; j > 0; j--)
{
;
}
}
}
int a[8] = {1, 2, 4, 8, 16, 32, 64, 128};
void main()
{
int i = 0;
P1 = 1;
while(1)
{
P1 = a[i++];
delay(1000);
if(i == 8)
{
i = 0;
}
}
}


可见,与C语言相比,汇编语言繁杂冗余太多了。我有点搞不懂,为什么很过高校还用汇编语言来写单片机程序。
本文很简单,但能在20分钟内把上述流水灯做出来,还是小小开心,毕竟有很久没玩了。嵌入式宝刀,依旧不老。
最后,想说一下,学这些东西,一定要多实践多调试。在结束本文之前,我手绘流水灯玩一下,烘托出节日气氛。
👆长按图片,扫码申请👆
[ 新闻来源:电子工程专辑,更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj]
存入云盘 收藏
举报
全部评论
暂无评论哦,快来评论一下吧!

电子工程专辑
开创IC领域,共创美好未来!
查看更多
相关文章
苹果计划2026年起一年举办两次iPhone发布会
2025-05-27
得润电子控股股东股份将被二次司法拍卖
2025-05-28
大族数控二次冲击资本市场,拟赴港上市
2025-06-04
黄仁勋年内第三次访华:与雷军会面
5 天前
国产量子芯片设计软件“本源坤元”完成第五次迭代
2025-06-03
热门搜索
大联大调整!诠鼎、友尚、品佳,3合1
台积电拟退出氮化镓市场
华为
台积电
中芯国际
联发科
高通
英特尔
芯片