历史上的今天
返回首页

历史上的今天

今天是:2025年10月20日(星期一)

正在发生

2022年10月20日 | STC89C52单片机 流水灯

2022-10-20 来源:csdn

流水灯

宏定义

用define 进行宏定义的典型用法

#define uchar unsigned char

注意宏定义后面不能加分号,它是预处理指令不是语句。

其中用“uchar”直接替换了unsigned char

此时我们可以用uchar去定义变量类型如:uchar i ;等价于 unsigned char i ;


对于上面的宏定义我们是用来给已有数据类型取别名。

对已有数据类型取别名一般还有使用关键字typedef,

定义方法如下:

typedef 已有数据类型 新的数据类型;(要加分号)


函数的定义

函数就是将多条语句集合在一起,来完成一种特定功能。


函数分为标准函数库,和用户自定义函数。

标准函数库:keil 编译器提供的,不需要用户进行定义。

自定义函数:用户根据自己需要编写的函数,它必须在使用前定义。


自定义函数一般格式为:


函数类型 函数名(形式参数表)  

{  

局部变量定义  

函数体语句  

}  


延时函数

自定义函数: 延时函数 delay(毫秒级)


void delay(unsigned int z){  

unsigned int x, y;  

for (x = z; x > 0; x--){  

for (y = 114; y > 0; y--);  

}  

}  


给形参z赋值,如延时100 毫秒:delay(100);


标准库函数中的循环移位函数

标准库函数:intrins.h

内部函数:


字符型循环左移:_crol_(unsigned char, unsigned char)

字符型循环右移:_cror_(unsigned char, unsigned char)

#include   

void test_crol (void){  

unsigned char a;  

unsigned char b;  

a = 0xFE;   //  1111 1110  

b = _crol_(a, 1); // b now is 0xFD 二进制为 1111 1101  

}  


_crol_(unsigned char, unsigned char):第一个参数 参与运算的数值,第二个参数,如果是1循环左移一位,如果是2循环左移2位…


_cror_(unsigned char, unsigned char):第一个参数 参与运算的数值,第二个参数,如果是1循环右移一位,如果是2循环右移2位…


循环移位函数与左移和右移运算符的区别

使用字符型循环左移:


#include   

void test_crol (void) {  

unsigned char a;  

unsigned char b;  

a = 0xFE; // 1111 1110  

  b = _crol_(a, 1); // b now is 0xFD 二进制为 1111 1101   

}


使用左移运算符


a = 0xFE; //1111 1110    

b = a<<1; // b now is 0xFC 二进制为 1111 1100    


区别:循环左移是把最高位移到最低位上,左移运算符是把最高位移除最低位补0


1. 流水灯实现左移

#include

#include


#define uint unsigned int

#define uchar unsigned char  


uchar temp; // LED灯相关变量


void delay(unsigned int z){ // 毫秒级延时函数定义

unsigned int x, y;

for (x = z; x > 0; x--){

for (y = 114; y > 0; y--){

}

}

}


// 实现左移

void main(){ // main函数自身会循环

temp = 0xfe;

P1 = temp;  // 1111 1110

delay(100);


while(1){

temp = _crol_(temp, 1);

P1 = temp;

delay(100); // 延时 100毫秒 通过增加延时的时间或减少延时的时间,来控制流水灯的速度   

}

}


2.流水灯实现右移

#include

#include


#define uint unsigned int

#define uchar unsigned char  


uchar temp; // LED灯相关变量


void delay(unsigned int z){ // 毫秒级延时函数定义

unsigned int x, y;

for (x = z; x > 0; x--){

for (y = 114; y > 0; y--){

}

}

}


// 实现右移

void main(){ // main函数自身会循环

temp = 0xfe;

P1 = temp;  // 1111 1110

delay(100);


while(1){

temp = _cror_(temp, 1);

P1 = temp;

delay(500); // 延时 100毫秒   

}

}


3.每四个流水灯实现左移:

#include

#include


#define uint unsigned int

#define uchar unsigned char  


uchar temp; // LED灯相关变量


/*====================================

函数 : delay(uint z)

参数 :z 延时毫秒设定,取值范围0-65535

返回值 :无

描述 :12T/Fosc11.0592M毫秒级延时

====================================*/


void delay(unsigned int z){ // 毫秒级延时函数定义

unsigned int x, y;

for (x = z; x > 0; x--){

for (y = 114; y > 0; y--){

}

}

}


// 实现左移

void main(){ // main函数自身会循环

temp = 0xf0;  // 每4个灯进行流水闪烁

P1 = temp;  // 1111 1110

delay(100);


while(1){

temp = _crol_(temp, 1);

P1 = temp;

delay(100); // 延时 100毫秒 通过增加延时的时间或减少延时的时间,来控制流水灯的速度   

}

}


keil中Debug的用法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-teVzCnNY-1604149519040)(img/Options.png?imageView2/2/w/550)]

需要修改晶振频率为:11.0592


如果要看LED灯的高低电频的情况,通过菜单栏的Peripherals选项,中的 I/O-Ports → Port 1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W5adFF17-1604149519044)(img/Peripherals.png?imageView2/2/w/550)]

开启Debug的界面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kk6Kt5DL-1604149519049)(img/menu.png?imageView2/2/w/550)]

单片机小精灵的使用

选择 晶振频率为:11.0592 MHz 12T 时钟周期


可以同过该程序定义生成延时函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ZLsKwXq-1604149519054)(img/elf.png?imageView2/2/w/550)]

注:在使用晶振频率精准的同时也要保证串口波特率和晶振对应,减小串口波特率的误差,所以选择 晶振频率为:11.0592

推荐阅读

史海拾趣

Acopian Power Supplies公司的发展小趣事

Acopian Power Supplies是一家专业生产电源供应器件的公司,以下是该公司发展的五个相关故事:

  1. 公司创立与起步阶段: Acopian Power Supplies成立于1956年,总部位于美国宾夕法尼亚州。公司创始人Sarkis Acopian先生将其家庭小作坊扩展为一家专业的电源供应器件制造商。创立之初,公司专注于生产高品质、高可靠性的直流电源,并提供定制化的解决方案。

  2. 技术创新和产品拓展: 随着市场需求的增长和技术进步,Acopian Power Supplies不断进行技术创新,并扩展了产品线。公司逐步推出了各种规格和型号的直流电源、交流电源、开关电源等产品,满足不同行业的需求,如工业、通信、医疗等领域。

  3. 市场拓展和国际化发展: Acopian Power Supplies积极开拓国内外市场,并与全球各地的客户建立了长期合作关系。公司的产品远销至美国以外的多个国家和地区,赢得了广泛的市场认可。通过与国际渠道商合作,公司逐步实现了国际化发展战略。

  4. 质量控制和技术支持: Acopian Power Supplies注重产品质量和技术支持,建立了完善的质量控制体系和售后服务体系。公司引进先进的生产设备和检测设备,严格控制产品质量,并提供专业的技术支持和解决方案,确保客户获得最佳的用户体验。

  5. 未来发展展望: Acopian Power Supplies将继续致力于电源供应器件领域的研发和生产,不断推出更先进、更可靠的产品和解决方案,以满足客户在不断变化的市场需求。公司将进一步加强研发投入,不断提升产品性能和质量水平,努力成为行业内的领先企业。

飞虹(FeiHong)公司的发展小趣事

随着业务规模的不断扩大,苏州锋驰开始积极拓展国内外市场。公司不仅在国内市场取得了显著的成绩,还逐步将产品和服务推向国际市场。在品牌建设方面,苏州锋驰注重提升品牌知名度和美誉度,通过参加行业展会、举办技术交流会等多种方式,加强与客户的沟通和交流,赢得了广泛的关注和认可。同时,公司还不断优化产品和服务质量,提升客户满意度和忠诚度。

这五个故事共同勾勒出了苏州锋驰微电子有限公司在电子行业中的发展历程和成就,展现了其作为一家科技型中小企业的蓬勃生机和广阔前景。

ARBOR公司的发展小趣事

ARBOR公司一直致力于电子技术的研发与创新。在某个时期,公司研发团队成功开发出一款具有颠覆性的电路板技术,这项技术在信号传输速度和稳定性上实现了重大突破。凭借这一技术,ARBOR公司迅速占领了高端电子市场,成为行业内的技术领导者。公司股价随之飙升,吸引了大量投资者的关注。

Elite公司的发展小趣事

随着科技的不断进步,Elite始终将技术研发作为公司发展的核心驱动力。公司投入大量资金引进先进设备和技术人才,不断提升产品性能和质量。同时,Elite积极拓展国内外市场,通过参加各类展会、建立合作伙伴关系等方式,提高品牌知名度和市场占有率。

台湾美丽微(FMS)公司的发展小趣事

近年来,FTDI通过战略并购进一步拓展了其业务领域。例如,电连技术通过发行股份及支付现金的方式收购了FTDI的控股权,这一举措不仅使电连技术在产品和客户层面实现了更完整的布局,也增强了其在汽车电子、物联网、工业产品、医疗设备等多个领域的市场竞争力。FTDI凭借其在USB桥接芯片领域的深厚积累和技术优势,为电连技术的业务扩展提供了有力支持,共同推动了公司在全球电子元件产业的持续发展。

Amveco Toroidal Power Products公司的发展小趣事

随着电子行业的快速发展,客户对环形变压器的性能要求也越来越高。Amveco公司敏锐地捕捉到了这一市场变化,加大了在技术创新和产品升级上的投入。公司研发团队不断攻克技术难关,成功开发出了一系列具有更高效率、更低损耗的环形变压器产品,满足了客户对高性能产品的需求。同时,公司还不断优化生产工艺,提高了产品的可靠性和稳定性。

问答坊 | AI 解惑

降低成本 ADI发布WiMAX终端RF收发器

降低成本 ADI发布WiMAX终端RF收发器         美国模拟器件公司(Analog Devices, Inc.,纽约证券交易所代码: ADI),全球领先的高性能信号处理解决方案供应商,10月10~12日在美国波士顿WiMAX世界峰会上展示了两款用于全 ...…

查看全部问答>

全国电子设计竞赛之电动跷跷板

本帖最后由 paulhyde 于 2014-9-15 09:19 编辑 电子爱好者请加QQ:273605686!经过这将近四天的奋战和赛前的准备和培训,确实学到了很多东西。  …

查看全部问答>

模拟设计与验证工具现状(1)

大约从20世纪80年代起,就有许多业内专家宣称模拟电路已走进死胡同,而数字应用将在电子世界中大放异彩,包括用在通信上的集成电路(integrated circuits,ICs)。在现实中,当然,现代化的通信系统同时需要将模拟及数字功能复杂地融合在一起。   ...…

查看全部问答>

奥特曼Zigbee读书日记(四)-- 设备“对话”专题(2)

原贴地址:http://www.feibit.com/bbs/viewthread.php?tid=86&extra=page%3D1   心理学专家告诉我们,一个贴子不能写得太长,否则会让读者有疲劳感。。。(背景音:哪个专家说的?--自己百度去,肯定不是奥特曼~~~)按照专家的指点,我们 ...…

查看全部问答>

proteul问题

出现下列问题,一直不知道是什么意思 SIMULATION LOG ============== Design:   E:\\C51实例\\MCS-51 examples_67 EEPROM\\EEPROM.DSN Doc. no.: Revision: Author:    Created:  06/08/06 Modified: 06/0 ...…

查看全部问答>

如何做一个基于51单片机的电脑遥控器?

小弟最近在忙毕业设计,想做一个基于51单片机的电脑遥控器,想法是这样的,做一个类似U盘的红外接收端,能实现遥控关机的功能就行了。这是最基本的,至于开机,貌似通过USB接口实现开机是有难度的。所以只想做一个能实现关机功能的就差不多了,我查 ...…

查看全部问答>

申请TI的片子来了,怎么用大家给个意见吧

  430的单片机之前只是耳闻,还没用过,我51,EMC单片机会用,还有ARM9,ARM11会用。   现在要用这430还需要哪些工具和软件?? [ 本帖最后由 青叶漂零 于 2011-11-16 11:35 编辑 ]…

查看全部问答>

南华大学黄智伟 备战2013 有关 “高频无线电类”赛题的一些问题

本帖最后由 paulhyde 于 2014-9-15 03:07 编辑 南华大学黄智伟 备战2013 有关 “高频无线电类”赛题的一些问题    …

查看全部问答>

Xilinx PCIe Endpoint Master DMA设计实现

基于PCI Express的数据采集卡 PCIe数据采集卡 PCI Express数据采集卡 本人在北京工作6年以上,从事FPGA外围接口设计,非常熟悉PCI Express协议,设计调试了多个基于PCI Express接口的数据采集卡. 本人非常熟悉Virtex-5/Virtex-6/7 Series FPGA PCI ...…

查看全部问答>

请教f28035 SCI

以下是我程序中的SCI相关代码,我用中断方式接收,查询方式发送,但是不知为什么我用串口调试助手发送字符后不能接收到CPU发送回来的数据? void sInitSCI(void) { EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0; // Enable pullup on GPIO28 ...…

查看全部问答>