历史上的今天
返回首页

历史上的今天

今天是:2026年01月13日(星期二)

正在发生

2023年01月13日 | 用C语言写一个驱动数码管程序

2023-01-13 来源:zhihu

/****** 本程序功能说明 *****用STC的MCU的IO方式控制74HC595驱动8位数码管。显示效果为: 数码时钟。使用Timer0的16位自动重装来产生1ms节拍,程序运行于这个节拍下, 用户修改MCU主时钟频率时,自动定时于1ms.*****/

#define MAIN_Fosc 22118400L //定义主时钟

#include "STC15Fxxxx.H"

#define Timer0_Reload (65536UL -(MAIN_Fosc / 1000)) //Timer 0 中断频率, 1000次/秒

#define DIS_DOT 0x20

#define DIS_BLACK 0x10

#define DIS_ 0x11

u8 code t_display[]={ //标准字库

// 0 1 2 3 4 5 6 7 8 9 A B C D E F

0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,

//black - H J K L N o P U t G Q r M y

0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,

0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46}; //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1

u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码

sbit P_HC595_SER = P4^0; //pin 14 SER data input

sbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clock

sbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clock

u8 LED8[8]; //显示缓冲

u8 display_index; //显示位索引

bit B_1ms; //1ms标志

u8 hour,minute,second;

u16 msecond;

/******* 显示时钟函数 ********/

void DisplayRTC(void)

{

if(hour >= 10) LED8[0] = hour / 10;

else LED8[0] = DIS_BLACK;

LED8[1] = hour % 10;

LED8[2] = DIS_;

LED8[3] = minute / 10;

LED8[4] = minute % 10;

LED8[5] = DIS_;

LED8[6] = second / 10;

LED8[7] = second % 10;

}

/***** RTC演示函数 *****/

void RTC(void)

{

if(++second >= 60)

{

second = 0;

if(++minute >= 60)

{

minute = 0;

if(++hour >= 24) hour = 0;

}

}

}

/**** 主函数 *******/

void main(void)

{

u8 i,k;

P0M1 = 0; P0M0 = 0; //设置为准双向口

P1M1 = 0; P1M0 = 0; //设置为准双向口

P2M1 = 0; P2M0 = 0; //设置为准双向口

P3M1 = 0; P3M0 = 0; //设置为准双向口

P4M1 = 0; P4M0 = 0; //设置为准双向口

P5M1 = 0; P5M0 = 0; //设置为准双向口

P6M1 = 0; P6M0 = 0; //设置为准双向口

P7M1 = 0; P7M0 = 0; //设置为准双向口

AUXR = 0x80; //Timer0 set as 1T, 16 bits timer auto-reload,

TH0 = (u8)(Timer0_Reload / 256);

TL0 = (u8)(Timer0_Reload % 256);

ET0 = 1; //Timer0 interrupt enable

TR0 = 1; //Tiner0 run

EA = 1; //打开总中断

display_index = 0;

hour = 11; //初始化时间值

minute = 59;

second = 58;

RTC();

DisplayRTC();

// for(i=0; i<8; i++) LED8[i] = DIS_BLACK; //上电消隐

for(i=0; i<8; i++) LED8[i] = i; //显示01234567

k = 0;

while(1)

{

if(B_1ms) //1ms到

{

B_1ms = 0;

if(++msecond >= 1000) //1秒到

{

msecond = 0;

RTC();

DisplayRTC();

}

}

}

}

/*** 向HC595发送一个字节函数 *******/

void Send_595(u8 dat)

{

u8 i;

for(i=0; i<8; i++)

{

dat <<= 1;

P_HC595_SER = CY;

P_HC595_SRCLK = 1;

P_HC595_SRCLK = 0;

}

}

/******** 显示扫描函数 **********/

void DisplayScan(void)

{

Send_595(~T_COM[display_index]); //输出位码

Send_595(t_display[LED8[display_index]]); //输出段码

P_HC595_RCLK = 1;

P_HC595_RCLK = 0; //锁存输出数据

if(++display_index >= 8) display_index = 0; //8位结束回0

}

/***** Timer0 1ms中断函数 ********/

void timer0 (void) interrupt TIMER0_VECTOR

{

DisplayScan(); //1ms扫描显示一位

B_1ms = 1; //1ms标志

}



推荐阅读

史海拾趣

Corning Cable Systems公司的发展小趣事

在追求经济效益的同时,Corning Cable Systems公司也积极履行社会责任,致力于推动绿色环保理念的实践。公司注重环保材料的选择和使用,并在生产过程中采取多项环保措施,以降低对环境的影响。此外,公司还积极推广绿色通信解决方案,为全球通信行业的可持续发展做出了积极贡献。

通过以上五个故事,我们可以看到Corning Cable Systems公司在电子行业中的发展历程和取得的成就。作为光纤通信领域的领军企业,公司凭借其创新技术、扩大生产规模、技术合作和绿色环保理念等方面的努力,不断推动着整个行业的进步和发展。

EXCELTA公司的发展小趣事

Excelta公司创立于20世纪90年代初,当时电子元器件市场正处于快速发展阶段。创始人李明看到连接器市场的巨大潜力,决定投身其中。然而,初创时期资金紧张,技术储备薄弱,公司面临巨大挑战。李明带领团队日夜兼程,通过技术创新和成本控制,成功开发出第一款具有竞争力的连接器产品,并迅速获得了市场的认可。此后,Excelta逐渐在连接器领域崭露头角。

创世(CS)公司的发展小趣事

随着产品的不断创新和技术的不断突破,创世公司的市场份额逐渐扩大。公司的SD NAND产品已经广泛应用于医疗设备、工业控制、轨道交通、安防、网络设备等多个领域。这一市场布局的成功,不仅提升了创世公司的品牌影响力,也为其在电子行业树立了良好的口碑。同时,创世公司还积极参与各种行业展会和交流活动,与国内外客户建立了广泛的合作关系,进一步拓展了市场。

Catalyst / ON Semiconductor公司的发展小趣事

随着技术的不断进步,Catalyst / ON Semiconductor公司逐渐在半导体领域取得了重要的技术突破。公司投入大量资源进行研发,成功开发出了一系列高性能、低功耗的半导体产品,这些产品在市场上受到了广泛的欢迎。这些技术突破不仅提升了公司的市场竞争力,也为整个电子行业的发展注入了新的活力。

Honeywell公司的发展小趣事

背景:近年来,随着全球对可持续发展和数字化转型的重视,霍尼韦尔积极调整战略方向。

发展:公司加大了在可持续技术和数字化转型领域的投入,推出了一系列创新的产品和解决方案。例如,在能源转型领域,霍尼韦尔与多家中国合作伙伴共同推动可持续航空燃料生产基地的建设;在智慧建筑领域,与腾讯云合作打造联合解决方案等。

关键事件:这些举措不仅体现了霍尼韦尔对可持续发展的承诺和责任担当,也展示了公司在数字化转型方面的前瞻性和创新能力。同时,这些合作也进一步巩固了霍尼韦尔在全球电子行业的领先地位。

ERP Power公司的发展小趣事

巨化集团作为我国较早的化工企业,在信息化道路上一直走在前列。为了进一步提升企业的管理水平和竞争力,巨化集团决定实施ERP系统。在选型过程中,巨化集团看中了ERP Power系统的稳定性和可靠性,最终选择了该系统作为企业信息化建设的核心。

通过ERP Power系统的实施,巨化集团实现了企业资源的优化配置和业务流程的标准化管理。系统不仅整合了企业内外部的信息资源,还提供了强大的数据分析功能,帮助企业做出更明智的决策。此外,ERP Power系统还提高了巨化集团的工作效率和员工满意度,为企业带来了显著的经济效益和社会效益。

问答坊 | AI 解惑

论坛资料重复太多了,有办法解决吗?

本人在论坛下载下来的时候发现,竟然有很多资料内容都是一样的,只改头换面而已,既浪费芯币又浪费时间,可怜我辛苦攒来的芯币呀!晕…希望管理员重视。…

查看全部问答>

源程序--我用逻辑分析仪测试时隙,调试出的18b20

我用逻辑分析仪测试出的1820时隙,源代码 …

查看全部问答>

再次请教wince程序访问pc上数据库的问题

一直想通过wince上的程序连接pc上的数据库如sql server,mysql等,一直没搞定。不知有没有大侠能够指导一下啊?    这几天看了下sqlite数据库的东西,简单小程序能写了,但是发现sqlite有个问题就是好像不支持c/s结构,只能在本地进行sq ...…

查看全部问答>

求爱之后,她终于来到了我身边(STM32)

终于收到力源申请的套件了,哈哈哈哈还以为与她无缘,现在开始,晚上的"夜生活"开始丰富了也开始倒塌STM32~~~~~~~~~~~~~~~~~~~…

查看全部问答>

WWDG进不了中断

我用一个灯监视WWG中断,正常的话每进20次中断改一次灯的状态,(主要是因为看门狗58.25MS喂一次狗,想让LED大约1S闪一次),但是不知哪里出现问题,灯从没闪烁过,说明WWDG中断没有进入,我将断点设在WWDG中断程序中,结果也没有跑到中断程序 ...…

查看全部问答>

Stm32之寄存器汇总

很全的stm32寄存器表格,借以了解分析库函数。。。。。。 [ 本帖最后由 xinjitmzy 于 2012-4-17 21:26 编辑 ]…

查看全部问答>

低版本IAR简易开发LaunchPad的歪道

    (写得很认真,先留着,等板子来了就可以耍了!感谢作者)    故事的起因是这样滴。。。LaunchPad包装盒中并没有附带资料光盘(至少我收到的是这样的),只有一张纸的简单介绍,即TI网站上的文档MSP-EXP430G2 LaunchPa ...…

查看全部问答>

为什么我的 INA CMRR 不随增益变化?

转自:deyisupport 前面有两篇关于仪表放大器 (INA) 电源及共模抑制比 (PSRR & CMRR) 的极好博客文章。(参见“处理抑制问题:仪表放大器 PSRR 与 CMRR”第 I 部分 和 第 II 部分)。 准确指出了大多数 INA 器件的 CMRR 与 PSRR 性能会随增益变化 ...…

查看全部问答>

如何设计基于DS18B20温度计

要求基于DS18B20的温度计,按键切换显示华氏和摄氏度。…

查看全部问答>

模数转换器中的混叠:并不是所有的信号都像其看上去那样

转自deyisupport 你看没看到过汽车向前行驶,而车的轮子实际上是向后转呢?如果不是在表演高难度特技的话,我打赌你一定在汽车广告中看到过。你想没想过这是为什么呢?真实的生活如流水般不可中断,而视频摄像头每秒钟只记录了有限数量的画面。每 ...…

查看全部问答>