用 74HC595 把 LCD1602 改成串行数据接口

用 74HC595 把 LCD1602 改成串行数据接口
用 74HC595 把 LCD1602 改成串行数据接口

用 74HC595 把 LCD1602 改成串行接口形式的案例

LCD1602 的接口形式是并行的,它有8 条数据线、3 条控制线。这样就需要11 条线来控制它的正常工作。虽然它还可以工作在 4 位数据线的形式,最精简的形式是 6 条线。

有位网友想要使用74HC595 进行串-并转换,想要用 4 条线来控制LCD1602。可见链接:

https://www.360docs.net/doc/be10654620.html,/question/458604195.html。

多用了一块芯片,省下了单片机的引脚,这也算是一种方法吧,在系统规模较大、资源紧张的条件下,还是值得应用的。

74HC595 是“串入并出”的移位寄存器芯片,它需要用3 条线控制数据的输入,才能正常的输出8 位数据。

有了8 位数据,这时,LCD1602 还需要至少两条控制线。

经过做而论道的精心设计,分时使用这些控制线,最终,仅仅使用了 3 条线,就完成了对74HC595 和LCD1602 的有效控制!

这要比前面的网友提出的4 条线的方案,还要更加精简,节省率提高了25%。

精简后的电路图如下:

图中是一个数字钟,是为另一个网友编写的,可以参考下面的链接:

https://www.360docs.net/doc/be10654620.html,/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/a0c99e2343b541844423e865.html

由于LCD1602 的驱动电路发生了改变,所以数字钟的程序,也要相应的修改。那么,针对本电路的程序如下://===================================================

#include

#define uchar unsigned char

#define uint unsigned int

#define KEY_IO P3

sbit LCD_RS = P2^0;

sbit LCD_EN = P2^2;

sbit SCK = P2^0;

sbit SDI = P2^1;

sbit RCK = P2^2;

sbit SPK = P1^2;

sbit LED = P2^4;

bit new_s, modify = 0;

char t0, sec = 50, min = 59, hour = 23;

char code LCD_line1[] = "Designed by ZELD";

char code LCD_line2[] = "Timer: 00:00:00 ";

char Timer_buf[] = "23:59:50";

//--------------------------------------------------- void delay(uint z)

{

uint x, y;

for(x = z; x > 0; x--) for(y = 100; y > 0; y--); }

//--------------------------------------------------- void write_595(uchar date)//写入595

{

uchar i;

for(i = 0; i < 8; i++) {

SCK = 0; SDI = date & 0x80;

SCK = 1; date <<= 1;

}

}

//--------------------------------------------------- void W_LCD_Com(uchar com) //写指令

{

write_595(com); LCD_RS = 0;//写入指令

RCK = 1; RCK = 0; //令595输出, 并用EN输出一个高脉冲}

//---------------------------------------------------

void W_LCD_Dat(uchar dat) //写数据

{

write_595(dat); LCD_RS = 1;//写入数据

RCK = 1; RCK = 0; //令595输出, 并用EN输出一个高脉冲

}

//---------------------------------------------------

void W_LCD_STR(uchar *s) //写字符串

{

while(*s) W_LCD_Dat(*s++);

}

//---------------------------------------------------

void W_BUFF(void) //填写显示缓冲区

{

Timer_buf[7] = sec % 10 + 48; Timer_buf[6] = sec / 10 + 48; Timer_buf[4] = min % 10 + 48; Timer_buf[3] = min / 10 + 48; Timer_buf[1] = hour % 10 + 48;Timer_buf[0] = hour / 10 + 48; W_LCD_Com(0xc0 + 7); W_LCD_STR(Timer_buf);

}

//---------------------------------------------------

uchar read_key(void)

{

uchar x1, x2;

KEY_IO = 255;

x1 = KEY_IO;

if (x1 != 255) {

delay(100);

x2 = KEY_IO;

if (x1 != x2) return 255;

while(x2 != 255) x2 = KEY_IO;

if (x1 == 0x7f) return 0;

else if (x1 == 0xbf) return 1;

else if (x1 == 0xdf) return 2;

else if (x1 == 0xef) return 3;

else if (x1 == 0xf7) return 4;

}

return 255;

}

//--------------------------------------------------- void Init()

{

W_LCD_Com(0x38); delay(50);

W_LCD_Com(0x38); delay(50);

W_LCD_Com(0x0c);

W_LCD_Com(0x06);

W_LCD_Com(0x01); delay(50);

W_LCD_Com(0x80); W_LCD_STR(LCD_line1);

W_LCD_Com(0xC0); W_LCD_STR(LCD_line2);

TMOD = 0x01; //T0定时方式1

TH0 = 0x4c;

TR0 = 1; //启动T0

PT0 = 1; //高优先级, 以保证定时精度

ET0 = 1;

EA = 1;

}

//--------------------------------------------------- void main()

{

uint i, j;

uchar Key;

Init();

while(1) {

//-------------------------------

if (new_s) { //如果出现了新的一秒, 修改时间

new_s = 0; sec++; sec %= 60;

if(!sec) { min++; min %= 60;

if(!min) { hour++; hour %= 24;}

}

W_BUFF(); //写显示

//-------------------------------

if (!sec && !min) { //整点报时

for (i = 0; i < 200; i++) {

SPK = 0; for (j = 0; j < 100; j++);

SPK = 1; for (j = 0; j < 100; j++);

} }

}

//-------------------------------

Key = read_key(); //读出按键

switch(Key) { //分别处理四个按键

case 0: modify = 1; break;

case 1: if(modify) {min++; min %= 60; W_BUFF(); break;}

case 2: if(modify) {hour++; hour %= 24; W_BUFF(); break;}

case 3: modify = 0; break;

} }

}

//---------------------------------------------------

void timer0(void) interrupt 1 //T0中断函数, 50ms执行一次

{

TH0 = 0x4c;

t0++; t0 %= 20; //20, 一秒钟

if(t0 == 0) {new_s = 1; LED = ~LED;}

if(modify) LED = 0;

}

//===================================================

欢迎到“做而论道”的百度空间访问,这里有许多新奇实用的电路和程序。

花样流水灯设计

单片机课程设计 2014年 6月 15日 课 程 单片机课程设计 题 目 花样流水灯 院 系 电气工程及其自动化系 专业班级 1112班 学生姓名 温亿锋 学生学号 7 指导教师 张瑛

一丶任务 设计一款以AT89C51单片机作为主控核心,按键控制电路、流水灯显示电路以及单片机最小系统等模块组成的核心主控制电路。 二丶设计要求 通过发光二极管显示不同的花样(至少有六种花样),并且可以通过按键来控制流水灯的速度。 三丶设计方案 本方案主要是通过对基于单片机的多控制、多闪烁方式的LED流水灯循环系统的设计,来达到本设计的要求。其硬件构成框图如下图所示,以单片机为核心控制,由单片机最小系统(时钟电路、复位电路、电源)、按键控制电路、LED 发光二极管和5V直流电源组成。 单片机流水灯循环控制系统硬件框图 此设计方案中单片机的P1口接5路按键控制电路,实现流水灯花型的切换功能;单片机的P3.7引脚接上一个按钮开关以实现对流水灯闪烁频率的控制,即实现了快慢两种节拍实现花型的变换;单片机上的P2口接八路LED发光二极管组成流水灯电路,显示流水灯循环情况。 四丶系统硬件设计 4.1 直流稳压电源电路

对于一个完整的电子设计来讲,首要问题就是为整个系统提供电源供电模块,电源电路的稳定可靠是系统平稳运行的前提和基础。电子设备除用电池供电外,还采用市电(交流电网)供电。通过变压、整流、滤波和稳压后,得到稳定的直流电。直流稳压电源是电子设备的重要组成部分。本项目直流稳压电源为+5V。 直流稳压电源的制作一般有3种制作形式,分别是分立元件构成的稳压电源、线性集成稳压电源和开关稳压电源。下图为稳压电源采用的是三端集成稳压器7805构成的正5V直流电源。 三端固定式集成稳压电源电路图 AT89C51单片机的工作电压范围:4.0V---5.5V,所以通常给单片机外接5V 直流电源。此处用3节1.5V的干电池供电。 4.2 单片机最小系统 要使单片机工作起来,最基本的电路的构成由单片机、时钟电路、复位电路等组成,单片机最小系统如图所示。 时钟电路:本系统采用单片机内部方式产生时钟信号,用于外接一个12MHz 石英晶体振荡器和2个30pF微调电容,构成稳定的的自激振荡器,其发出的脉冲直接送入内部的时钟电路。 复位电路:确定单片机工作的起始状态,完成单片机的启动过程。单片机系统的复位方式有上电自动复位和手动按键复位。本设计采用手动按键复位,该复位方式同样具有上电自动复位功能。

利用74HC595实现多位LED显示的方法

1 引言 单片机应用系统中使用的显示器主要有LED和LCD两种。近年来也有用CRT显示的。前者价格低廉,配置灵活,与单片机接口方便;后者可进行图形显示,但接口较复杂,成本也较高。LED(Ling Emiting Diode)是发光二极管的缩写。实际应用非常普遍的是八段LED显示器。LED显示器在大型报时屏幕,银行利率显示,城市霓虹灯建设中,得到广泛应用。在这些需要多位LED显示的场合,怎样实现系统稳定,价格低廉的显示,成为决定其成本的关键所在。 2 74HC595实现LED静、动态显示基本原理 74HC595是美国国家半导体公司生产的通用移位寄存器芯片。并行输出端具有输出锁存功能。与单片机连接简单方便,只须三个I/O口即可。而且通过芯片的Q7引脚和SER引脚,可以级联。而且价格低廉,每片单价为1.5元左右. 2.1 静态显示 每位LED显示器段选线和74HC595的并行输出端相连,每一位可以独立显示(见图1)。在同一时间里,每一位显示的字符可以各不相同(每一位由一个74HC595的并行输出口控制段选码)。 N位LED显示要求N个74HC595芯片及N+3条I/O口线,占用资源较多,而且成本较高。这对于多位LED 显示很不利。 2.2 动态显示

在多位LED显示时,为了简化电路,降低成本,节省系统资源,将所有的N位段选码并联在一起,由一片74HC595控制(见图2)。由于所有LED的段选码皆由一个74HC595并行输出口控制,因此,在每一瞬间,N位LED会显示相同的字符。想要每位显示不同的字符,就必须采用扫描的方法,即在每一瞬间只使用一位显示字符。在此瞬间,74HC595并行输出口输出相应字符段选码,而位选则控制I/O口在该显示位送入选通电平,以保证该位显示相应字符。如此轮流,使每位分时显示该位应显示字符。由于74HC595具有锁存功能,而且串行输入段选码需要一定时间,因此,不需要延时,即可形成视觉暂留效果。 N位LED显示时,只需要一片74HC595即可完成,成本最低。但是,此种方法的最大弱点就是当LED的位数大于12位时,出现闪烁现象,这是所有动态LED显示方式共同的弱点。 3 多位LED显示方法的实现

基于单片机的LED流水灯设计

基于单片机的LED流水灯设计 设计任务 1掌握MCS-51系列8051、8255的最小电路及外围扩展电路的设计方法 2了解单片机数据转换功能及工作过程 3设计LED流水灯系统,实现8个LED霓虹灯的左、右循环显示4完成主要功能模块的硬件电路设计 5用proteus软件完成原理电路图的绘制 一设计方法 本课题使用AT89C51单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED 的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到

“流水”效果了。 二方案论证与比较 2.1循环移位法 在上个程序中我们是逐个控制P1端口的每个位来实现的,因此程序显得有点复杂,下面我们利用循环移位指令,采用循环程序结构进行编程。我们在程序一开始就给P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至P1口,这样就实现“流水”效果啦。由于8051系列单片机的指令中只有对累加器ACC中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样同样可以实现“流水”效果。具体编程如下所示,程序结构确实简单了很多。 2.2查表法 上面的两个程序都是比较简单的流水灯程序,“流水”花样只能实现单一的“从左到右”流方式。运用查表法所编写的流水灯程序,能够实现任意方式流水,而且流水花样无限,只要更改流水花样数据表的流水数据就可以随意添加或改变流水花样,真正实现随心所欲的流水灯效果。我们首先把要显示流水花样的数据建在一个以TAB为标号的数据表中,然后通过查表指令“MOVC A,@A+DPTR”把数据取到累加器A中,然后再送到P1口进行显示。具体源程序如下,TAB标号处的数据表可以根据实

74HC595工作原理及应用

74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。数据在SCHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能 OE时(为低电平),存储寄存器的数据输出到总线。74HC595各个引脚的功能:Q1~7 是并行数据输出口,即储寄存器的数据输出口Q7' 串行输出口,其应该接SPI总线的MISO接口STcp 存储寄存器的时钟脉冲输入口SHcp 移位寄存器的时钟脉冲输入口OE的非输出使能端MR的非芯片复位端Ds 串行数据输入端程序说明:每当spi_shcp上升沿到来时,spi_ds 引脚当前电平值在移位寄存器中左移一位,在下一个上升沿到来时移位寄存器中的所有位都会向左移一位,同时Q7'也会串行输出移位寄存器中高位的值,这样连续进行8次,就可以把数组中每一个数(8位的数)送到移位寄存器;然后当 spi_stcp上升沿到来时,移位寄存器的值将会被锁存到锁存器里,并从Q1~7引脚输出附子程序: void hc595send_data(uint8 data)//要传输的数据,建议用数组的方法来查询{ uint8 i; IO0CLR = spi_stcp; 12 脚 for(i=0;i<8;i++) { IO0CLR = spi_shcp; 11 脚 if((data&0x80)!=0)IO0SET = spi_ds; else IO0CLR = spi_ds; data <<= 1; IO0SET = spi_shcp; } IO0SET = spi_stcp;} 1 引言 单片机应用系统中使用的显示器主要有LED和LCD两种。近年来也有用CRT 显示的。前者价格低廉,配置灵活,与单片机接口方便;后者可进行图形显示,但接口较复杂,成本也较高。LED(Ling Emiting Diode)是发光二极管的缩写。实际应用非常普遍的是八段LED显示器。LED显示器在大型报时屏幕,银行利率显示,城市霓虹灯建设中,得到广泛应用。在这些需要多位LED显示的场合,怎样实现系统稳定,价格低廉的显示,成为决定其成本的关键所在。 2 74HC595实现LED静、动态显示基本原理 74HC595是美国国家半导体公司生产的通用移位寄存器芯片。并行输出端具有输出锁存功能。与单片机连接简单方便,只须三个I/O口即可。而且通过芯片的Q7引脚和SER引脚,可以级联。而且价格低廉,每片单价为1.5元左右. 2.1 静态显示 每位LED显示器段选线和74HC595的并行输出端相连,每一位可以独立显示。在同一时间里,每一位显示的字符可以各不相同(每一位由一个74HC595的并行输出口控制段选码)。 N位LED显示要求N个74HC595芯片及N+3条I/O口线,占用资源较多,而且成本较高。这对于多位LED显示很不利。 2.2 动态显示 在多位LED显示时,为了简化电路,降低成本,节省系统资源,将所有的N位段选码并联在一起,由一片74HC595控制。由于所有LED的段选码皆由一个74HC595并行输出口控制,因此,在每一瞬间,N位LED会显示相同的字符。想

stm32使用三片74HC595级联程序代码

stm32使用三片74HC595级联程序代码 /**************************************************************** ******** Function: Read_74HC595 Description: 读取n 片74HC595 的输入数据Calls: HC595_delay;GPIO_ResetBits;GPIO_SetBits;Data Accessed: 无Data Updated: 无Input: HC595x:用户使用的595 端口,类型定义在74HC595.h 中ChipNum: 用户使用的595 端口上连接的芯片个数Output: DataBuf: 输出数据 存放缓冲区Return: 无Others: 此模块为Stm32 单片机中使用,调试时在72M 系统时钟下 ******************************************************************** *****/ void Write_74HC595(HC595 HC595x,unsigned char ChipNum,unsigned char *DataBuf){ unsigned char i = 0; unsigned char DataBufTmp = 0; GPIO_ResetBits(HC595x.Lck.Port, HC595x.Lck.Pin); //设置LCK 为低电平,上升 沿数据锁存for(; ChipNum>0; ChipNum--) { DataBufTmp = *DataBuf; for(i=0; itips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

流水灯设计

新能源与动力工程学院课程设计报告 单片机系统课程设计 专业: 班级: 姓名: 学号: 指导教师: 2014年7 月

新能源与动力工程学院课程设计任务书课程名称:单片机系统课程设计指导教师(签名): 班级:姓名:学号:

指导教师评语及成绩评定表 指导教师签字: 年月日

目录 绪论 ....................................................................................................................... - 1 -1 引言 ....................................................................................................................... - 1 - 1.1设计任务 .................................................................................................... - 2 - 1.2设计意义 .................................................................................................... - 2 - 1.3设计思路 .................................................................................................... - 2 - 1.4设计目的 .................................................................................................... - 2 - 2 总体设计 ............................................................................................................... - 3 - 2.1系统框图 .................................................................................................... - 3 -3设计步骤 ................................................................................................................ - 3 - 3.1 STC89C52简介 ......................................................................................... - 3 - 3.2硬件设计 .................................................................................................... - 5 - 3.3单片机时钟电路 ........................................................................................ - 5 - 3.4复位电路 .................................................................................................... - 5 - 3.5工作电路 .................................................................................................... - 6 - 4 软件设计 ............................................................................................................... - 6 - 4.1设计要求 .................................................................................................... - 6 - 4.2软件的流程图 ............................................................................................ - 7 - 4.3程序代码 .................................................................................................... - 7 - 5 软件调试 ............................................................................................................... - 9 - 6 总结 ....................................................................................................................... - 9 - 7 心得体会 ............................................................................................................... - 9 -参考文献 ................................................................................................................. - 10 -附录1 元件清单 .................................................................................................... - 11 -

串入并出芯片74HC595应用实例

基于proteus的51单片机仿真实例七十五、串入并出芯片74HC595应用实例 标签: proteus单片机实例芯片应用2010-02-24 00:33 1、本例中利用一片595控制一个数码管显示。实现了利用3个IO口控制8位数据的输出 2、74HC595的控制端口: 1)SH_CP(11脚):移位时钟脉冲输入端。在上升沿时移位寄存器将数据移位 2)DS(14脚):串行数据输入端。本例通过移位运算将每次移位的数据送到PWD寄存器的进位标志位CY,CY再将值传递给DS引脚,8次移位后完成一个字符的串行传送。 3)ST_CP(12脚):锁存脉冲控制端,在上升沿时移位寄存器的数据被传入存储寄存器,这时如果OE端为低电平,传入存储器的数据会直接输出到输出端Q0-Q7。本例在一个字节的移位操作完成后,通过在ST_CP端产生一个上升沿将数据送出。 4)/MR(10脚):低电平时将移位寄存器数据请0.一般情况下接VCC 5)/OE(13脚):高电平时输出端禁止输出(高阻态)。低电平时允许数据输出 使用74HC595的优点是能锁存数据,这样在移位过程中可以保持输出端的数据不变。而 74HC164则没有这种功能。 //利用74HC595实现端口扩展 #include // 寄存器头文件包含 #include // 空操作函数,移位函数头文件包含 sbit SH_CP = P2^0; //移位时钟脉冲端口 sbit DS = P2^1; // 串行数据输入端口 sbit ST_CP = P2^2; //锁存端口 unsigned char temp; unsigned char code disp_buff[] =

74HC595驱动数码管上显示数字

/******************************************************************************* * 标题: 试验74HC595驱动数码管上显示数字(C语言)* 连接方法:JP12用条线冒短接JP3和JP2 用8PIN排线连接 ******************************************************************************** * 通过本例程了解74HC595(串入并出)基本原理和使用* 请学员认真消化本例程,懂74C595在C语言中的操作* ********************************************************************************/ #include #include #define NOP() _nop_() /* 定义空指令*/ //SPI IO sbit MOSIO =P3^4; //串行数据线 sbit R_CLK =P3^5; //数据并行输出控制 sbit S_CLK =P3^6; //串行时钟线 void delay(unsigned int i); //函数声名 void HC595SendData(unsigned char SendV al); //函数声名 // 此表为LED 的字模// 0 1 2 3 4 5 6 7 8 9 A b c d E - L P U Hidden _ (20) unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71}; main() { unsigned char HC595SendVal; unsigned int LedNumVal = 1; while(1) { LedNumVal++; HC595SendVal = LED7Code[LedNumV al%16]; //LED7;显示0-F LedNumVal%10 显示0-9 HC595SendData(HC595SendVal); //调用595驱动函数 delay(200); } } /*******************延时函数************/ void delay(unsigned int i) { unsigned int j; for(i; i > 0; i--) //CPU循环执行i*300次 for(j = 300; j > 0; j--);

单片机课程设计报告--心形流水灯

井冈山大学 机电工程学院 单片机 课程设计报告 课程名称:单片机 设计题目:心形流水灯 姓名:彭玉红 专业:生物医学工程 班级:11级医工本一班 学号:110615017 指导教师:王佑湖 2013年11月27日

目录 1引言 (2) 1.1设计任务 (2) 1.2设计要求……………………………………………… ..2 2 课题综述 (2) 2.1课题的来源 (2) 2.2面对的问题 (2) 3 系统分析 (2) 3.1 STC89C52单片机引脚图及引脚功能介绍 (2) 4 系统设计 (4) 4.1硬件设计 (4) 4.1.1硬件框图 (4) 4.1.2硬件详细设计 (5) 4.2 软件设计 (5) 4.3 硬件原理图 (6) 4.4 元件清单 (6) 4.5 硬件焊接图 (6) 4.6 代码编写 (7) 5心得体会 (7) 6致谢 (8) 参考文献 (8)

1 引言 单片机课程设计主要是为了让我们增进对STC89C51单片机电路的感性认识,加深对理论方面的理解。了解软硬件的有关知识,并掌握软硬件设计过程、方法及实现,为以后设计和实现应用系统打下良好基础。另外,通过简单课题的设计练习,使我们了解必须提交的各项工程文件,达到巩固、充实和综合运用所学知识解决实际问题的目的。 1.1设计任务 设计一个单片机控制的流水灯系统 1.2设计要求 (1)32个LED灯; (2)可实现多种的亮灯(如左循环,右循环,间隔闪,90度交叉闪等)。 2 课题综述 2.1 课题的来源 当今社会,这种由单片机芯片控制各种硬件工作的技术也日益成熟,并普及在交通、化工、机械等各个领域。而流水灯这项技术在生活中的应用更是广泛,较为贴近生活。而流水灯控制的设计所需要的知识也正好吻合了我们本学期对于单片机这门课程的学习,所以设计流水灯控制的这个课题让我们对知识的学习和巩固都有了进一步的加深。 2.2 面对的问题 这次课程设计是通过STC89C52位单片机实现。但面对的问题却

51单片机驱动两片74HC595级联动态驱动8位数码管

51单片机驱动两片74HC595级联动态驱动8位数码管 功能: 用2片74HC595驱动8位数码管, 级联的最低1片595控制位选,那么第一片控制段选 平台: STC89C52 现象: 8位数码管从第一位开始从0计数,满10进位 版本说明: 第0版本没有使用定时器中断,同时定义了一个unsigned long int 变量计数,再把这个数的每位分离出来显示,所以导致有点闪屏,此版本使用定时器中断,而且没有用unsigned long int 之类的变量,而是用数组Val[8] 来计数, 主函数只负责显示,其它的在中断函数里面处理,这样显示一点都不闪屏, 备注: 可以用ULN2003A 接在数码管的com 口来提高驱动能力,ULN2003A里面有7个NPN三极管, 可以大大提高驱动能力 #include <> sbit SCK = P1^1; // 数据输入时钟线,脉冲 sbit SI = P1^0; // 数据线 sbit RCK = P1^2; // 锁存 unsigned char code SMG[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; // 段码 unsigned char code Wei[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; // 位选unsigned char Val[8] = {0}; // 要显示的数据 ************************ 函数声明************************ void interrupt_init(void); void timer_init(void); 控制74HC595输出数据 void Output(void) { RCK = 0; RCK = 1; } 向74HC595中写入一字节数据 void Write_Byte(unsigned char dat) { unsigned char i = 0; for(i=0; i<8; i++) { SCK = 0; SI = dat & 0x80;

51单片机+74HC595驱动数码管程序

51单片机+74HC595驱动数码管程序 这里是电路图:完整的源码和图纸下载地址:51hei/bbs/dpj-20392-1.html 下面是51 单片机驱动74hc595 芯片的程序:#include //包含51 单片机的头文 件#include #define uint unsigned int#define uchar unsigned char//sbit sin_595 =P1;//sbit rclk_595 =P1;//sb it sclk_595 =P1 ;//sbit s_clr =P1;sb it a_cp_595 =P2; //串行移位时钟脉冲sh_cp_595sbit b_cp_595 =P2;//输出锁存器控制脉冲 st_cp_595//sbit _oe_595 =P1 ; //8 位并行输出使能/禁止(高阻态)sbit ds_595 =P2 ; //串行数据输入extern uchar datas[6]; //存放6 个数码管的显示数字uchar ledcode[]={0xC0,// 00xF9,// 10xA4,// 20xB0,// 30x99,// 40x92,// 50x82,// 60xF8,// 70x80,// 80x90,// 90x88,// A0x83,// B0xC6,// C0xA1,// D0x86,// E0x8E// F};void delay(uint z){uint t1,y;for(t1=z;t1>0;t1--)for(y=110;y>0;y--);}void led_display(void){ uchar i,j; bit testb; uchar bdata movebit[6]; uchar bdata test; //_oe_595=0; //选中数码管for(i=0;i<6;i++) movebit[i]=ledcode[datas[i]]; // P1=0; delay(1); for(i=0;i<6;i++) //数据移位{ test=movebit[i]; for(j=0;j<8;j++) { testb=test&0x80; test=test<<1; if(testb) { ds_595=1; } else {ds_595=0; }a_cp_595=1; a_cp_595=0; } //数据移位} b_cp_595=0; b_cp_595=1; b_cp_595=0;} tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

proteus原理图及程序(74HC595级联点亮LED)

#include //51头文件 #include // #define uchar unsigned char #define uint unsigned int //--定义使用的IO口--// sbit DS=P2^1; //串行数据输入 sbit SHCP=P2^0; //移位寄存器时钟输入,为低电平时将595数据清零 sbit STCP=P2^2; //片选,存储寄存器时钟输入,STCP时钟上升沿时,将595数据送入存储寄存器 uchar data adata; void delayms(uint t); void Input(uchar ch); void Output(adata); /******************************************************** * * * 延时子程序* * * *********************************************************/ void delayms(uint t) { uchar i; while(t-->0){ for(i=0;i<125;i++){;}

} } /******************************************************** * * * 输入数据子程序* * * *********************************************************/ void Input(uchar ch) //将显示数据送入74HC595内部移位寄存 { uchar BitCounter=8; //位数控制 uchar tmp; do { tmp=ch; SHCP=0; if((tmp&0x80)==0x80) //如果最高位是1 DS=1; else DS=0; SHCP=1; tmp=ch<<1; //左移 ch=tmp; BitCounter--; _nop_(); STCP=0; } while(BitCounter); } /******************************************************** * * * 输出数据子程序* * * *********************************************************/ void Output(adata) //将移位寄存器内的数据锁存到输出寄存器并显示,adata为输出的数据{ STCP=0; _nop_(); _nop_(); _nop_(); STCP=1; //上升沿将数据送到输出锁存器 _nop_(); _nop_(); _nop_();

最新基于单片机的流水灯系统设计与实现

摘要 本设计着重在于分析计算器软件和开发过程中的环节和步骤,并从实践经验出发对计算器设计做了详细的分析和研究。本系统就是充分利用了G2452芯片的I/O引脚。系统以采用MSP430系列单片机G2452为中心器件来设计花样LED流水灯系统,通过按键实现8个LED灯不同花样式的闪烁。 关键词:流水灯;单片机;按键;闪烁

目录 1 项目要求 (3) 2 项目分析和系统设计 (3) 3 硬件设计 (3) 3.1单片机选型模块 (3) 3.2 LED流水灯模块 (4) 3.3功能模式选择模块 (5) 4 软件设计 (6) 4.1主程序 (6) 4.2子程序 (7) 5 系统调试 (8) 5.1硬件调试 (8) 5.2程序调试 (8) 5.3联合调试 (9) 6 外延 (11) 7 项目演练 (14) 8项目总结 (14) 附录1电路设计原理图(参考) (15) 附录2 PCB设计原理图(参考) (15) 附录3 关键程序(参考) (16)

基于单片机的流水灯系统设计与实现 1 项目要求 本项目花样流水灯采用MSP430单片机为控制器件,用于各方面的装饰,此花样流水灯有8个LED灯,六种花样灯光效果。 (1)初始化后,执行8个LED灯从右至左逐次点亮,每隔0.2s亮一个LED 灯,直到8个LED灯全亮,再从左至右依次熄灭直到全灭,以此循环; (2)当按下按键后,执行8个LED灯从右至左每隔0.2s逐一亮灭,直到点亮最左边一个灯后再从左至右每隔0.2s逐一亮灭,以此循环; 2 项目分析和系统设计 本系统分为硬件和软件模块。硬件上我们打算在单片机的不同的i/o中装上一个流水灯来进行对流水灯进行控制。 在程序方面,首先对msp430的i/o口进行的定义和设置,然后在去定义了一个delay进行延时功能,在用一个switch循环来使得流水灯不断的循环亮灭。 花样流水灯采用MSP430单片机为控制器件,用于各方面的装饰,此花样流水灯有8个LED灯,两种花样灯光效果。 3 硬件设计 本系统采用MSP430单片机为控制核心进行设计,该流水灯系统共可分为两个模块:单片机选型模块和LED流水灯模块。 Power MCU MSP430G2553 LED 花样流水灯 图1 系统框图 3.1单片机选型模块 MSP430单片机是16位的单片机,采用了精简指令集(RISC)结构,只有简洁的27条内核指令,大量的指令则是模拟指令;众多的寄存器以及片内数据存储器都可参加多种运算。这些内核指令均为单周期指令,功能强,运行的速度快。

74HC595测试程序

//74HC595测试程序,在一个数码管上循环显示1~9. #include #include sbit sdat=P2^0; //串行数据输入端 sbit sclk=P2^1; //移位寄存器时钟输入端 sbit srck=P2^3; //存储寄存器时钟输入 sbit srst=P2^4; //主复位端,低电平复位 unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90}; //共阳极编码 void delay(unsigned int z ) { unsigned char x; while(z--) //1ms延时程序 for(x=120;x>0;x--); } void txdbyte(unsigned char dat) { unsigned char i,j; j=dat; //74HC595的数据串入并出子程序 for(i=0;i<8;i++) { sdat=(bit)(j&0x80); //从最高位开始传送 sclk=0; //发送一个上升沿信号,告诉对方读取数据发送线上的数据线 sclk=1; //锁存到移位寄存器 j<<=1; } srck=0; //锁存到输出并口 srck=1; } void main() { unsigned char i; srst=0; //先复位 delay(2); srst=1; //复位完毕 while(1) for(i=0;i<10;i++) { txdbyte(~table[i]); //将0~9发送到数码管

流水灯设计与总结报告

流水灯设计与总结报告 摘要:近年来,随着电子技术和微型计算机的发展呢,单片机的档次不断提高应用领域也不断扩大,已在工业控制、尖 端科学、智能仪器仪表、日用家电汽车电子系统、 办公自动化设备、个人信息终端及通信产品中得到广泛 的应用,成为现代电子系统中最重要的智能化的核心部件。关键字:单片机,流水灯 需求分析: 随着现代社会的发展,人们越来越追求审美和新颖,而流失灯就是其中一种,以前简单的照明工具变得越来越多样化,流水灯的千姿百态给人一种视觉冲动,现在不管大街小巷我们都可以随处可见这种变幻万千的流水灯,而这种流水灯我们可以产用子电路去设计,我们可以用控制器和状态译码器来实现灯光的流水效果,但是现在我们可以用单片机AT89C51来实现,因为其相对于电子电路有明显的优越性,控制硬件电路比较简单,软件方面也不复杂,而且功能作用并不低于电子电路设计的。由于它的小巧方便,我们采用单片机来做流水灯。 设计系统

1.复位电路部分 为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分。单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位。手动按钮不仅具有上电复位的功能,还可以通过按按键的方法实现复位,(如上图所示按S22)此时电源VCC经两个电阻分压,在RST端产生一个复位高电平。 2.时钟电路部分 时钟电路为单片机工作提供基本时钟,它是计算机工作的心脏,它控制着计算机的工作节奏。时钟电路一般由晶体震荡器和电容组成。

74hc595和74hc165级连c51程序

#include #define uchar unsigned char #define uint unsigned int sbit DS=P1^0 ; //595 sbit SH=P1^1 ; sbit ST=P1^2 ; //sbit MR=P1^3; sbit CLK=P1^4;//165 sbit INH=P1^5; sbit LD=P1^6; sbit SO=P1^7; //msec(511);0.5s //msec(2);2ms //msec(1021);//1s void msec(unsigned long x) //延时{ unsigned char j; while(x!=0) { x--; for(j=0;j<116;j++) {;} } } void hc595(uchar *p,n) { uchar i,j; for(;n>0;n--) { i=*p; for(j=0;j<8;j++) { DS=i&0x80; i=i<<1; SH=0; SH=1; } ST=0;

ST=1; ST=0; p++; } } void hc165(uchar *d,n) { uchar i=0,j,c=0; LD=1; LD=0; LD=1; INH=0; for(j=0;j<(n*8);j++) { CLK=1; i=i<<1; i=i|SO; CLK=0; c++; if(c==8){*d=i;c=0;d++;} } } main() {uchar *P,*D; uchar i,a[5]={0x00,0x00,0x00,0x00,0x01},b[5]={0x0ff,0x0ff,0x0ff,0x0ff,0x0ff}; P=a; D=b; hc595(P,5); hc165(D,5); P3=b[4]; while(1); for(i=0;i<34;i++) { if(i==8){a[3]=0x01; a[4]=0x00;} if(i==16){a[2]=0x01;a[3]=0x00;} if(i==24){a[1]=0x01;a[2]=0x00;} if(i==32){a[0]=0x01;a[1]=0x00;} P=a; hc595(P,5); a[0]<<=1; a[1]<<=1; a[2]<<=1;

基于单片机的流水灯的设计与制作

设计成绩 《电子设计大赛培训》 素质拓展设计报告 题目基于单片机的流水灯的设计与制作 姓名 学号 专业年级 12级通信工程3班 指导教师张学斌 2015年 06 月 25 日

摘要 (3) 一.单片机课程设计的目的和意义 (2) 二.设计任务与总体设计思路 (2) 2.1 设计要求 (2) 三.硬件电路设计 (4) 3.1 AT89C52RC简介 (3) 3.2 硬件电路图......................................... 错误!未定义书签。四.软件设计 (8) 五.收获与展望 (13) 参考文献 (13)

单片机的应用已经广泛的渗透到国民经济的各个领域,随着在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未有的速度被单片机智能控制系统所取代,它已经成为工科大学生的必修课程之一。本设计用单片机8951结合LED制作了一种新型的LED流水灯控制系统的设计,以AT89C51作为主控核心,利用软件实现对LED流水灯进行控制。本系统具有体积小、硬件少、电路结构简单及容易操作等优点。 本文设计的是基于单片机89C51的流水灯设计 关键词:LED AT89C51单片机控制系统流水灯 一.单片机课程设计的目的和意义 单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。 采用单片机可以完成很多功能,现在很多电子产品都要用到单片机。 二.计任务与总体设计思路 2.1 设计要求 (1)制作一个基于单片机控制的普通的流水灯(8盏),电路接通电源后流水灯正常跑动(如每次亮2盏); (2)可以实现流水灯的四个特殊功能(通过按键按钮实现功能间的切换)。 (a)实现亮灯数目的增加;

相关文档
最新文档