IC解密单片机+74HC595寄存器使用优化
单片机源程序如下:
- IC解密|#include "main.h"
- IC解密|#include "74HC595.h"
- sbit SMG1 =P2^7;
- sbit SMG2 =P2^6;
- sbit SMG3 =P2^5;
- sbit SMG4 =P2^4;
- sbit SHCP = P2^0;
- sbit DS = P2^1;
- sbit STCP = P2^3;
- /*****自定义延时*****/
- void delay(int a)
- {
- u8 i,j;
- for(i=0;i<=a;i++){
- for(j=0;j<=16;j++)
- {;}
- }
- }
- /***标准20um延时****/
- void Delay20us()
- {
- unsigned char i;
- nop_();
- nop_();
- i = 71;
- while (--i);
- }
- /****串转并函数*****/
- void hc595_data(u8 order,u8 dat){
-
- u8 i=0;
- SHCP=0;
- STCP=0;
- for(i=0;i<8;i++){
- SHCP=0; //移位时钟信号拉低
- switch(order)
- {
- case 'R': DS=0x01&dat; //dat与0x01相与,保留高位1
- dat>>=1; break;//dat数据右移位
-
- case 'L': DS=0x80&dat;//dat与0x01相与,保留高位1
- dat<<=1; break; //dat数据左移位
- }
- SHCP=1; //移位时钟拉高,生成上升沿
- Delay20us();//延时20us,因芯片工艺而异
- }
- SHCP=0;
- STCP=0; //拉低寄存器数据输出时钟
- Delay20us();
- STCP=1; //拉高时钟生成上升沿
- }
- void hc595_del(void){ //数据清除函数
-
- u8 i=0;
- SHCP=0;
- STCP=0;
- for(i=0;i<8;i++){
- SHCP=0;
- DS=0x00; //往寄存器中填0,清空上一次数据
- Delay20us();
- SHCP=1;
- }
- SHCP=0;
- STCP=0;
- Delay20us();
- STCP=1;
- }
- void SMGbit(u8 Bit)
- {
- switch(Bit){ //数码管位选
- case 0: SMG4=1;SMG3=1;SMG2=1;SMG1=0; break;
- case 1: SMG4=1;SMG3=1;SMG2=0;SMG1=1; break;
- case 2: SMG4=1;SMG3=0;SMG2=1;SMG1=1; break;
- case 3: SMG4=0;SMG3=1;SMG2=1;SMG1=1; break;
- }
- hc595_del(); //清除寄存器数据,这很重要
- delay(10);
- }

芯片解密