标题:
学习一个单片机新知识点,74HC595驱动四位共阴数码管
[打印本页]
作者:
likejian
时间:
2023-8-17 15:40
标题:
学习一个单片机新知识点,74HC595驱动四位共阴数码管
最近学习辉芒微单片机,自己弄了一个驱动74HC595 四位共阴数码管,还在不断学习新知识。
#include "SYSCFG.h";
#include "FT62F21X.h";
#define uchar unsigned char
#define uint unsigned int
uchar LedChar[]={
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
}; //共阴数码管0-F真值表
#define Key1 PA2 //按键输入
#define smg_wei1 PA0 //数码管位选1
#define smg_wei2 PA1 //数码管位选2
#define SER PA3 //串行数据输入
#define RCLK PA4 //存储寄存器时钟
#define SRCLK PA5 //串行输入时钟
uchar mode=0;
//bit flags =0;
uchar kk;
void Hc595SendByte(uchar dat);
//uint i;
/*-------------------------------------------------
* 函数名:DelayUs
* 功能: 短延时函数 --16M-4T--大概快1%左右.
* 输入: Time延时时间长度 延时时长Time*2Us
* 输出: 无
-------------------------------------------------*/
void DelayUs(unsigned char Time)
{
unsigned char a;
for(a=0;a<Time;a++)
{
NOP();
}
}
/*-------------------------------------------------
* 函数名:DelayMs
* 功能: 短延时函数 快1%
* 输入: Time延时时间长度 延时时长Time ms
* 输出: 无
-------------------------------------------------*/
void DelayMs(unsigned char Time)
{
unsigned char a,b;
for(a=0;a<Time;a++)
{
for(b=0;b<5;b++)
{
DelayUs(98);
}
}
}
/*-------------------------------------------------
* 函数名:DelayS
* 功能: 短延时函数
* 输入: Time 延时时间长度 延时时长Time S
* 输出: 无
-------------------------------------------------*/
void DelayS(unsigned char Time)
{
unsigned char a,b;
for(a=0;a<Time;a++)
{
for(b=0;b<10;b++)
{
DelayMs(100);
}
}
}
/*******************************************************************************
* 函数名 : Hc595SendByte(u8 dat)
* 函数功能 : 向74HC595发送一个字节的数据
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void Hc595SendByte(uchar dat)
{
char a;
SRCLK=0; //串行输入时钟
RCLK =0; //存储寄存器时钟
for(a=0;a<8;a++)
{
SER=dat>>7;
dat<<=1;
SRCLK=1;
NOP();
NOP();
SRCLK=0;
}
RCLK=1;
NOP();
NOP();
RCLK=0;
}
void POWER_INITIAL (void)
{
OSCCON = 0B01110000; //IRCF=111=16MHz/4T=4MHz,0.25us
INTCON = 0; //暂禁止所有中断
OPTION = 0; // /PAPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
//PSRCA = 0; //00:4mA 01/10:8mA 11:28mA bit[3:2]控制PA5源电流 bit[1:0]控制PA4源电流
//PSINKA = 0; //bit[1:0] 控制PA5和PA4 0:灌电流最小 1:灌电流最大
TRISA = 0B00000100; //1:输入 0:输出 PA2为输入模式
PORTA = 0B00000100; //1:PAx输出高电平 0:PAx输出低电平 PA2输出低电平 ,PA3输出高电平
WPUA = 0B00000100; //1:使能PA口上拉 0:关闭PA口上拉 PA3 上拉
}
/*-------------------------------------------------
* 函数名:main
* 功能: 主函数
* 输入: 无
* 输出: 无
--------------------------------------------------*/
void main()
{
uchar i=0;
POWER_INITIAL(); //系统初始化
Hc595SendByte(LedChar[0]);
while(1)
{
if(Key1==0)
{
DelayMs(10);
if(Key1==0)
{
DelayMs(10);
Hc595SendByte(LedChar[i]);
i++;
if(i>=15)
{
i=0;
}
}
while(!Key1);
}
}
}
复制代码
作者:
joyb
时间:
2023-8-25 10:56
辉芒微单片机,不常用,有原理图最好
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1