一般引脚:
go
sbit beep=P2^4; //将单片机的P2.4端口定义为beep.本口用于屏蔽上电后蜂鸣器响
sbit led=P1^0; //将单片机的P1.0端口定义为led,用于点亮LED-D1
sbit DIG1=P0^0; //数码管位选1
sbit DIG2=P0^1; //数码管位选2
P1=0xFF;//初始化P1引脚全部置高,LED全灭
beep=0; //蜂鸣器不响
DIG1=0; //禁止数码管个位亮
DIG2=0; //禁止数码管十位亮
sbit key1=P3^2; //摇杆A按键
sbit key2=P3^3; //摇杆B按键
if(key1==0) //检测摇杆A按键是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(key1==0) //再次判断按键是否按下
{
LED=~LED; //每按下一次,P1口状态求反一次
}
while(!key1); //等待按键松开
}
sbit beep=P2^4; //该口接蜂鸣器驱动三极管b极,1导通,0截断
beep=1; //蜂鸣器响
#define SEG P1 //将P1口定义为SEG 后面就可以使用SEG代替P1口 数码管段选
/*口袋板OLED电路引脚定义*/
sbit OLED_SCL=P4^3;//SCL-D0
sbit OLED_SDA=P4^1;//SDA-D1
sbit OLED_RES =P3^6;//RES
sbit OLED_DC =P3^7;//DC
sbit OLED_CS=P2^7; //CS
sbit CLOCK=P3^5; /*2543时钟*/
sbit D_IN=P4^0; /*2543输入*/ //【注意:此处是口袋实验室连接引脚】
//sbit D_IN=P1^7; /*2543输入*/ //【注意:此处是仿真连接引脚,仿真时请使用本行定义并注释掉上一行】
sbit D_OUT=P0^2; /*2543输出*/
sbit _CS=P3^4; /*2543片选*/
sbit DIN=P2^0;
sbit SCLK=P1^6;
sbit CS=P1^7;
`
``
数码管显示程序:
```go
/**************************************************************************************
------晨启科技------
实验现象:两位数码管的个位数位(或十位数位,由学员自己选择)显示数字
***************************************************************************************/
#include "STC89C5xRC.h" //STC89C52RC的头文件
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit beep = P2^4; //蜂鸣器引脚
sbit DIG1=P0^0; //数码管位选1
sbit DIG2=P0^1; //数码管位选2
u8 seg7_table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管0~9段码
#define SEG P1 //将P1口定义为SEG 后面就可以使用SEG代替P1口
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 大致延时函数
* 输 入 : ms (ms=1时,大约延时了1ms)
* 输 出 : 无
*******************************************************************************/
void delay(int ms)
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii<ms;ii++)
for(jj=0;jj<500;jj++);
}
/*******************************************************************************
* 函 数 名 : Seg_Display_Left()
* 函数功能 : 数码管显示函数。数码管十位数位置显示一个数字
* 输 入 : x (x为0~9任何一个整数,它会显示在数码管上)
* 输 出 : 无
*******************************************************************************/
void Seg_Display_Left(u8 x)
{
DIG2=0; //个位数 数位 位选禁止(共阳数码管的共阳供电脚)
DIG1=1; //十位数 数位 位选允许
SEG=seg7_table[x]; //【举例】例如个位数需要显示4,seg7_table[4]对应0x99,数码管会显示"4"
//事实上每个时刻只有一位数码管会亮,利用人眼视觉残留效果
delay(4); //给一个合适的延时,人眼看不出闪动即可
}
/*******************************************************************************
* 函 数 名 : Seg_Display_Right()
* 函数功能 : 数码管显示函数。数码管个位数位置显示一个数字
* 输 入 : y (y为0~9任何一个整数,它会显示在数码管上)
* 输 出 : 无
*******************************************************************************/
void Seg_Display_Right(u8 y)
{
DIG2=1; //个位数数位位选允许
DIG1=0; //十位数数位位选禁止
SEG=seg7_table[y]; //【举例】例如个位数需要显示4,seg7_table[4]对应0x99,数码管会显示"4"
delay(4); //事实上每个时刻只有一位数码管会亮,利用人眼视觉残留效果
} //
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
beep=0; //不允许蜂鸣器蜂鸣
delay(500); //等待上电稳定
while(1)
{
/*方法一:数码管左边那一位(十位)显示数字6*/
//Seg_Display_Left(6);
/*方法二:数码管右边那一位(个位)显示数字8*/
Seg_Display_Right(7);
//方法一和方法二任选一种。另一种请屏蔽掉。否则就是显示两位数了
}
}