串行7段LED显示应用程序

发布时间:2022-12-26  

#include

#include

void LedScan();

/******************************

* 常量定义

*****************************/

#define OSC_FREQ 40000 /* OSC frequncy in 200Hz for 8.0Mhz*/

#define TIMER0_CNTR(OSC_FREQ/6)/*OSC/12/[10000h-CNT]=FREQ=100Hz*/

#define LED_DISP_RATIO3//Display time space ratio in 1/10

/*(the up-limit of LED_DISP_RATIO is 65535/TIMER0_CNTR,for 11.0592M,4M,1.709M are 7,19,46)*/

#define TIMER0_CNTSR(LED_DISP_RATIO*TIMER0_CNTR/30)

#defineTIMER0_CNTLRTIMER0_CNTR-(TIMER0_CNTSR*3)

#defineTIMER0_CNTS(65535-TIMER0_CNTSR)

#defineTIMER0_CNTL(65535-TIMER0_CNTLR)

/******************************

* 控制线定义

*****************************/

/*

#defineLedDispOffP0.0//LED segment clear control line(low active)置零后LED所有段都清除

#defineLedDispDataP0.1//LED shift out data单个LED要显示的数

#defineLedDispClkCsP0.2//LED chip select latch clock LED芯片选择

#defineLedDispClkDataP0.3//LED segment latch clockLED的数据位锁存时钟

*/

sbit LedDispOff = P0^0;

sbit LedDispData = P0^1;

sbit LedDispClkCs = P0^2;

sbit LedDispClkData = P0^3;

/*

#defineLedDispOffP00//LED segment clear control line(low active)置零后LED所有段都清除

#defineLedDispDataP01//LED shift out data单个LED要显示的数

#defineLedDispClkCsP02//LED chip select latch clock LED芯片选择

#defineLedDispClkDataP03//LED segment latch clockLED的数据位锁存时钟

*/

/******************************

* 变量定义

*****************************/

unsigned char CntScanLed=0;//current scaned LED No.(初始值为0)

unsigned char CntDispByte=0;//current scaned LED BYTE(当前数码管显示字节值)

/******************************

* 只要将LedSeg0-LedSeg5设置为特定的7段码,系统就会完成各LED显示的扫描

*****************************/

/*

unsigned char LedSeg0;//第一个LED段码

unsigned char LedSeg1;//第二个LED段码

unsigned char LedSeg2;//第三个LED段码(add a byte for LedScan match the last three LED)

unsigned char LedSeg3;//第四个LED段码

unsigned char LedSeg4;//第五个LED段码

unsigned char LedSeg5;//第六个LED段码

*/

unsigned char LedSeg[6]={0,0,0,0,0,0};//LED段码

//#define LedIndex(NO) (LedSeg##NO)

//#define KeyOn(key) (SwStatus[B##key] & A##key)

unsigned char Led_transfer_table[10]={0XC0,0XF9,0XA4,0XB0,0X99,

0X92,0X82,0XF8,0X80,0X90};

//0~9对应的数码管显示查找表

/******************************

* TIMER0 initialization

* Set the TIMER0 mode 0 and enable T0 INT

*****************************/

void TimerInit()

{

CKCON=0x00;//Clock Control Register(use 12T for Timer OSC source)

TMOD=0x20;/* 定时器0工作在方式0 */

TH0=TIMER0_CNTS>>8;/* 写入计数初值到TH0 */

TL0=TIMER0_CNTS&0x00ff;/* 写入计数初值到TL0 */

ET0=1;/* 定时器0中断允许*/

TF0=0;/* 定时器0中断标志位清0 */

TR0=1;/* 定时器0准备开始 */

EA=1;/* 全局中断允许 */

}

/******************************

* Timer0 中断服务程序

* 本程序主间隔为10ms,每一个10ms又分为三个子间隔,每一个子间隔完成

* 一个7段LED的数据输出,两个主间隔完成6个LED的数据输出。

*****************************/

void Timer0_Overflow() interrupt 1 using 0

{

TR0=0;

TH0=TIMER0_CNTS>>8;/* 写入计数初值到TH0 */

TL0=TIMER0_CNTS&0x00ff;/* 写入计数初值到TL0 */

LedDispOff=0;

LedScan();

TR0=1;

}

/******************************

* Scan the LED display

*Send the Display scan code to current LED and feed CntLedScan to next one

*****************************/

void LedScan()

{

unsigned char ucCounter=0;

LedDispOff=0;//关闭数码管的7段输出

LedDispData=0;

LedDispClkCs=1;

LedDispClkCs=0;

CntDispByte=Led_transfer_table[LedSeg[CntScanLed]];

LedDispOff=1;//启动数码管段输出

for(ucCounter=0;ucCounter<=7;ucCounter++)

{if(1==CntDispByte&(1<LedDispData=1;

else LedDispData=0;

LedDispClkData=1;

LedDispClkData=0;

}

CntScanLed++;

if(CntScanLed>5)

CntScanLed=0;

}

main()

{

int i;

TimerInit();

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

{LedSeg[i]=i;//初始化显示数据

}

while(1);

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    高云半导体推出基于GW2AR系列的LED显示屏控制系统解决方案;广东佛山,2017年2月15日讯,广东高云半导体科技股份有限公司(以下简称“高云半导体”)今天宣布推出基于中密度晨熙Ⓡ家族的GW2AR......
    基于STC89C52单片机的LED显示器设计;随着LED 显示屏在广告领域的广泛应用,控制系统也在逐步发展。由于控制系统是基于嵌入式微处理器而开发的,所以,单片机在其中占有非常重要的位置。LED......
    适配器和电缆*计算机或触摸屏控制系统*调整参数的必要权限 二.连接电源和电机 首先,将ABB变频器与电源和电机正确连接。通常情况下,ABB变频器的输入电源为三相四线制,而电......
    指示灯输出 有些单片机没有串口功能,或者需要使用串口进行其他调试工作,此时可以考虑使用LED指示灯输出调试信息。单片机可以通过控制LED指示灯的亮灭来输出各种调试信息,例如错误码、状态信息等。 在单......
    西门子PLC变频器和触摸屏控制程序;  本任务控制要求如下:   1.电动机调速控制系统由PLC、模拟量扩展模块、触摸屏和变频器构成,要求控制功能强,操作方便。   2.可以在屏暮上通过修改和设定电动机的转速来实现电动机调速控制......
    基于HMS30C7202嵌入式处理器实现触摸屏控制器的接口设计;1.导言 随着现代计算机技术和互联网技术的飞速发展,嵌入式系统开始占据市场主流。因32位ARM嵌入式处理器具有高性能、低功......
    公交车到站信息的语音提示。 2.2 软件设计 本设计采用Keil C51编译器进行软件开发,具体软件设计如下: (1)LED显示屏控制程序 LED显示屏控制程序主要实现MAX7219点阵LED驱动模块控制2*8的LED显示屏,显示......
    分享一个用变频器和触摸屏控制的恒压供水实例;在供水设备中,水箱向外供水时,会存在水压不稳定,忽高忽低的现象。针对此类情况,我们可以对水箱的水位进行恒液位控制,构建一个恒压供水控制系统。例举......
    能够实现彩色显示,但显示的颜色较少。本文利用单片机STC12C5A60S2设计了一种4 096色旋转柱式LED显示屏控制系统。 1 系统总体设计 系统总体框图如图1所示,主要由电机转速与控制LED阵列控制......
    同时集成各种设备,从冲床到印刷机和AOI设备等等。PanKonix 不仅可以连接现有的PLC设备,还可以实现数据的可视化、采集生产的信息,并将其发送到云端。 它与EtherCAT运动控制系统实现了无缝集成,无需额外的控制......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>