历史上的今天
今天是:2024年10月29日(星期二)
2019年10月29日 | 入门第一个74HC595驱动 C语言
2019-10-29 来源:51hei
/******** 实验驱动74HC595 芯片********
单片机型号:ATMEGA48PA
/********** 74HC595电平逻辑*********************
SI SCK SCLR RCK OE 输出管脚
X X X X H QA--QH 输出高阻
X X X X L QA--QH 输出有效值
X X L X X 称位寄存器清零
L 上沿 H X X 称位寄存器存储 L
H 上沿 H X X 称位寄存器存储 H
x 下沿 H X X 称位寄存器壮态保持
X X X 上沿 X 输出存储器锁存(移位寄存器中的壮态值)
X X X 下沿 X 输出存储器壮态 保持
**************分析******************
实计使用:
SI 数据 (14脚)
RCK 锁存 (12脚)
SCK 时钟 (11脚)
OE 与 RCK 相连 (13脚)
SCLR 接高电平 (10脚)
***************************************/
//ICC-AVR application builder : 2017-12-5 17:22:41
// Target : m48
// Crystal: 1.0000Mh
/***************************************************/
#include #include #define uchar unsigned char #define uint unsigned int extern unsigned int a = 10; //延时基数 extern unsigned int b = 1; //并行数据 初使参数 extern unsigned int c = 0; // int temp=0b00000001; // 移位数据 初使参数 /**************分析****************** 实计使用: SI 数据 (14脚) RCK 锁存 (12脚) SCK 时钟 (11时钟) 注意:第调用一次 脚位电平反转 ^= ***************************************/ #define SI_1 PORTB |= (1<<0) #define SI_0 PORTB &= ~(1<<0) #define SCK_1 PORTB |= (1<<1) #define SCK_0 PORTB &=~(1<<1) #define RCK_1 PORTB |= (1<<2) #define RCK_0 PORTB &=~(1<<2) /************端口初使化******************************/ void port_init(void) { PORTB = 0x00; DDRB = 0xFF; PORTC = 0x00; DDRC = 0xFF; PORTD = 0B00000011; DDRD = 0xFF; } /***************mS延时***********************/ void Delay_ms(unsigned int Time) { unsigned char n=0; while(Time>0) { for (n=1;n<187;n++) { NOP(); } Time--; } } /***********显示/字**************************/ const unsigned char DisTab[]= { 0b00000000, // 0 0b00000001, // 1 0b00000011, // 2 0b00000111, // 3 0b00001111, // 4 0b00011111, // 5 0b00111111, // 6 0b01111111, // 7 0b11111111, // 8 // 0b00000000, // 9 }; /********将显示数据装入74HC595内部移位奇存器*****/ void WR_595(char c) { char unm,j,i,x; //定义3个(16位)常量 unm=DisTab[c]; // 显示数据存入 unm 中 for (j=0;j<7;j++) { SCK_1; //上沿 移位寄存器(存储) // x = unm&0x80; //数据 (unm 与 0X80)与运算后存入X x = unm&0b1000000; if(x==0) // 数据写到 SI 端口 { SI_0; //如果X==0,SI_1 数据写1, } else //如果X==0,SI_1 数据写0, { SI_1; } SCK_0; //下沿 移位寄存器(壮态保持) unm = unm<<1; //数据移位 } } /**********锁存并显示**************/ void OUT_595(void) { RCK_1; //上沿,壮态锁存 RCK_0; //下沿,保持74HC595输出壮态 Delay_ms(500); //延时 74HC显示一段时间 } /**********************************/ /***************开始***********************/ void main(void) { port_init(); //端口初使化 while(1) //超极循环 { char i; for(i=0;i<8;i++) { WR_595(2); //显示数据装入并显示 OUT_595(); } } }
上一篇:AVR红外遥控解码代码
史海拾趣
|
遥控器用的红外LED,因为红外LED发出的光不完全是红外光,也包含部分的可见光(红色)成分,所以肉眼能看到少许光。遥控器使用的LED,一般发射角度是30度左右,用户即使没有完全对准目标,也能有效操作。在没有外界红外线干扰的时候,遥控距离可以 ...… 查看全部问答> |
|
最近我刚买一块2440的开发板,跑wince5.0,按照PC机设置wince,连上网线后不能上网!不知道是什么原因。PC机可以通过网线与ARM板通信。ftp和fttp都正常。那我应该怎么样设置或还需要哪些工作才能实现我这块开发板与网络的连接呢。… 查看全部问答> |
|
在wince 6.0中我有一个客户端程序,先后两次调用InitializeSecurityContext用于和google服务器端进行安全认证,第一次调用返回的是SEC_I_CONTINUE_NEEDED,第二次返回的是SEC_E_WRONG_PRINCIPAL,请问怎么解决啊?是不是和证书有关系?相同程序在wi ...… 查看全部问答> |
|
各位有需要电子元件的请和我联系,库存商品优惠啦!:D 小店欢迎您的光临 石家庄傲尔科技有限公司是一家专注于国外中小电子工程分包商,经过多年的发展,我公司与国际大的元件供应商如MOUSER, DIGIKEY建立了稳定的合作。 我们的优势:1. 保证 ...… 查看全部问答> |
|
【招聘】汇编语言入门图书兼职作者 本公司是业内知名IT图书策划出版公司,正在运作一本汇编语言入门相关图书。想征求关于汇编语言的设计高手参与编写。有意者请将个人介绍和联系方式(QQ或MSN)发到本人邮箱macuilhy@sina.cn。… 查看全部问答> |
|
void main(){ init_serialcom(); //步进电机不能有这个函数,这是一个初始化串口的函数, ATE0(); //步进电机也不能有这个函数,这是个向串口发送AT指令的函数。 为什么去掉这前两个函 ...… 查看全部问答> |




