最近学习辉芒微单片机,自己弄了一个驱动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);
- }
- }
- }
复制代码
|