C语言两个程序合并就出错,51单片机已经把两个功能的c语言写好了,不会合并到一起,总出错,求指点...

本文介绍了如何将两个51单片机的C语言程序合并,一个是静态数码管显示,另一个是矩阵键盘控制LED。程序中包含了数码管显示函数、延时函数以及矩阵键盘的读取和LED控制逻辑。在合并过程中可能会遇到错误,需要确保全局变量、函数名和定义的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

静态数码管

#include

typedef unsigned char u8;

typedef unsigned int u16;

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

u8 code smgduan[]={0x06,0x4f,0x6d,0x07,0x6f};

void delay(u16 i)

{

while(i--);

}

void display()

{

u8 a;

for(a=0;a<5;a++)

{

P0=smgduan[a];

delay(100000);

P0=0x00;

}

}

void main()

{

LSA=0;

LSB=0;

LSC=0;

while(1)

{

display();

}

}

矩阵键盘控制led

#include "reg52.h"

#include  //因为要用到左右移函数,所以加入这个头文件

typedef unsigned int u16;

typedef unsigned char u8;

#define LED P2

#define GPIO_KEY P1

u8 KeyValue; //用来存放读取到的键值

u8 code led[]={0xfe,0xfd,0xfb,0xf7,0xef  };//led亮灯位置

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

* 函 数 名         : delay

* 函数功能     : 延时函数,i=1时,大约延时10us

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

void delay(u16 i)

{

while(i--);

}

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

* 函 数 名         : KeyDown

* 函数功能     : 检测有按键按下并读取键值

* 输    入         : 无

* 输    出         : 无

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

void KeyDown(void)

{

char a=0;

GPIO_KEY=0x0f;

if(GPIO_KEY!=0x0f)//读取按键是否按下

{

delay(1000);//延时10ms进行消抖

if(GPIO_KEY!=0x0f)//再次检测键盘是否按下

{

//测试列

GPIO_KEY=0X0F;

switch(GPIO_KEY)

{

case(0X07): KeyValue=0;break;

case(0X0b): KeyValue=1;break;

case(0X0d): KeyValue=2;break;

case(0X0e): KeyValue=3;break;

}

//测试行

GPIO_KEY=0XF0;

switch(GPIO_KEY)

{

case(0X70): KeyValue=KeyValue;break;

case(0Xb0): KeyValue=KeyValue+4;break;

case(0Xd0): KeyValue=KeyValue+8;break;

case(0Xe0): KeyValue=KeyValue+12;break;

}

while((a<50)&&(GPIO_KEY!=0xf0))  //检测按键松手检测

{

delay(1000);

a++;

}

}

}

}

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

* 函 数 名       : main

* 函数功能   : 主函数

* 输    入       : 无

* 输    出      : 无

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

void main()

{

u8 i;

while(1)

{

KeyDown();     //按键判断函数

LED=led[KeyValue];

if(LED==0xef)

{

delay(50000); //大约延时450ms

while(1)

{

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

{

P2=~(0x01<

delay(50000); //大约延时450ms

}

*/

for(i=0;i<3;i++)  //将led左移一位

{

LED=_crol_(LED,1);

delay(50000); //大约延时450ms

}

for(i=0;i<3;i++) //将led右移一位

{

LED=_cror_(LED,1);

delay(50000); //大约延时450ms

}

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值