上拉电阻使能后默认就是高电平
P22 P23 P24 高电平 就是111 ,对应第7位:
如果不想显示可以设置段码P00-P07对应的 下拉电阻使能,默认低电平,
这样不管位码如何,数码管就没有显示
我们设置好之后保存,建立系统:
接着我们添加用户的代码:
和蜂鸣器一样,新建文件目录APP
建立2个文件 SMG.c 和smg.h
我们是动态扫描8个数码管,反正肉眼分辨20ms---50ms没差别的
我们位码先让com8 有效(低电平)就是要求P22 P23 P24 是111 (可以回去看看真值表) 111=7
然后段选传达0 的字摸 0x3F(因为段选只有第7位有效,其他位是没显示的)
同理第二位com7有效的时候 P22 P23 P24 就是011 =6
然后段选传达1 的字摸 0x06(因为段选只有第6位有效,其他位是没显示的)
同理第三位com6有效的时候 P22 P23 P24 就是101 =5
然后段选传达2 的字摸 0x5b(因为段选只有第5位有效,其他位是没显示的)
........................................
同理第三位com1有效的时候 P22 P23 P24 就是000 =0
然后段选传达7 的字摸 0x07(因为段选只有第1位有效,其他位是没显示的)
注意消隐的原因,SMG_PORT=0; //消隐
实际是段码给0,清除段数据,消除重影
完整的看我们的功能函数:
#include"smg.h"
//共阴极数码管显示0~F的段码数据
u8 gsmg_code={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//从第pos位开始,显示缓冲器dat[]的内容
void SMG_DisPlay(u8 dat[],u8 pos)//dat[]是显示的内容,pos是显示的开始位置
{
u8 i=0;
u8 pos_temp=pos-1;
for (i=pos_temp; i<8;i++)
{
switch (i)
{
case 0: LSC=1;LSB=1;LSA=1;break;
case 1: LSC=1;LSB=1;LSA=0;break;
case 2: LSC=1;LSB=0;LSA=1;break;
case 3: LSC=1;LSB=0;LSA=0;break;
case 4: LSC=0;LSB=1;LSA=1;break;
case 5: LSC=0;LSB=1;LSA=0;break;
case 6: LSC=0;LSB=0;LSA=1;break;
case 7: LSC=0;LSB=0;LSA=0;break;
}
SMG_PORT=dat ;
delay_ms (1) ;
SMG_PORT=0; //消隐,实际是段码给0,清除段数据,消除重影
}
}
主函数:
//<<AICUBE_USER_INCLUDE_BEGIN>>
// 在此添加用户头文件包含
#include"smg.h"
//<<AICUBE_USER_INCLUDE_END>>
//<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
// 在此添加用户全局变量定义、用户宏定义以及函数声明
u8 i = 0;
u8 smgbuf;
//<<AICUBE_USER_GLOBAL_DEFINE_END>>
////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
//<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
// 在此添加用户主函数初始化代码
//<<AICUBE_USER_MAIN_INITIAL_END>>
SYS_Init();
//<<AICUBE_USER_MAIN_CODE_BEGIN>>
// 在此添加主函数中运行一次的用户代码
//<<AICUBE_USER_MAIN_CODE_END>>
while (1)
{
USBLIB_OUT_Done(); //查询方式处理USB接收的数据
//<<AICUBE_USER_MAIN_LOOP_BEGIN>>
// 在此添加主函数中用户主循环代码
for (i=0; i<8; i++) smgbuf = gsmg_code;
SMG_DisPlay(smgbuf,1);//dat[]是显示的内容,pos是显示的开始位置
//smgbuf有8个元素,从第一位开始全部显示
delay_ms(10) ;
//<<AICUBE_USER_MAIN_LOOP_END>>
}
}
编译后下载
一切顺利,接着我们开始学习8.1-按键控制实验-简介
主要是学对GPIO的输入控制
按键是机械的结构:
硬件设计:
我手头的普中HC6800-ES V2.0 的按键:
RXD 就是 P31TXD 就是P30
RXD 就是 P31TXD 就是P30
LED是对应P2口
我们设置上拉,把开关初始电平固定为高电平
软件设计: