《基于STM8的74HC759驱动数码管显示程序学习笔记.docx》由会员分享,可在线阅读,更多相关《基于STM8的74HC759驱动数码管显示程序学习笔记.docx(5页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、74HC759驱动数码管显示程序学习笔记本程序基于STM8S105K4 单片机学习程序。程序硬件就是STM8的最小开发板搭建,用的内部高速晶振1分频,数码管用595串联驱动输入四线。经测试可以正常显示。最终通过调试和实验。所有的程序如下:(程序中可能还有些其他没有发现的问题,或其他错误有问题再学习更改。 )具体注释见程序:/#ifndef _DISPLAY_595_H/#define _DISPLAY_595_H/*/*DS GPIOD4 串行数据输入 */*STCP GPIOD5 存储寄存器时钟 */*SHCP GPIOD6 移位寄存器时钟 */*OE GPIOD7 输出使能(低电平有效)
2、可选择脉冲输出以调节亮度 */*显示数据调用方法,void init_595();输入实际数据,符号位(0为正,1为负),小数点位置(没有置0)/extern display_all(unsigned int display_data_int ,unsigned char flag ,unsigned char dot);*/*设置方向寄存器*/#define DS_IO() GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);#define STCP_IO() GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MO
3、DE_OUT_PP_LOW_FAST);#define SHCP_IO() GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST);#define OE_IO() GPIO_Init(GPIOD, GPIO_PIN_7, GPIO_MODE_OUT_PP_LOW_FAST);/*设置数据输出0*/#define DS_OUT0() GPIO_WriteLow(GPIOD, GPIO_PIN_4);#define STCP_OUT0() GPIO_WriteLow(GPIOD, GPIO_PIN_5);#define SHCP_OUT0()
4、 GPIO_WriteLow(GPIOD, GPIO_PIN_6);#define OE_OUT0() GPIO_WriteLow(GPIOD, GPIO_PIN_7);/*设置数据输出1*/#define DS_OUT1() GPIO_WriteHigh(GPIOD, GPIO_PIN_4);#define STCP_OUT1() GPIO_WriteHigh(GPIOD, GPIO_PIN_5);#define SHCP_OUT1() GPIO_WriteHigh(GPIOD, GPIO_PIN_6);#define OE_OUT1() GPIO_WriteHigh(GPIOD, GPIO
5、_PIN_7);/*显示数据调用方法,输入实际数据,符号位(0为正,1为负),小数点位置(没有置0)*/extern display_all(unsigned int display_data_int ,unsigned char flag ,unsigned char dot);void init_595(); /595的初始化void decomposition(unsigned int display_data); /将目标数据分解为各位 void data_to_sh(unsigned char data ,unsigned char dot_in ); /送单个字节数据到数据寄存器
6、void data_out_display(); /存储寄存器数据输出void display_all(unsigned int display_data_int ,unsigned char flag ,unsigned char dot); /总显示程序#includedisplay_595.hunsigned char a5=0,0,0,0,0; /五位数的数据分解存放 unsigned char dis_bit=0; /判断显示的位数const unsigned char code=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x
7、88,0x83,0xc6,0xa1,0x86,0x8e,0xbf;/0-9和负号编码/*uchar SEG_A_List16=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/共阴数码管代码表0-Fuchar SEG_B_List16=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;/共阳数码管代码表0-F*/void init_595()DS_IO(); /数据输出方向D
8、S_OUT0(); /输出低STCP_IO(); /数据输出方向STCP_OUT0(); /输出低SHCP_IO(); /SHCP_OUT0(); /OE_IO(); /OE_OUT1(); /输出使能关闭(低电平有效)void decomposition(unsigned int display_data) a4=a3=a2=a1=a0=0;if(display_data=10000)dis_bit=5; /判断显示的位数else if(display_data=1000)dis_bit=4;else if(display_data=100)dis_bit=3; else if(displa
9、y_data=10)dis_bit=2;else dis_bit=1;while(display_data = 10000) display_data -= 10000; a4+;while(display_data = 1000) display_data -= 1000; a3+;while(display_data = 100) display_data -= 100; a2+;while(display_data = 10) display_data -= 10; a1+;a0=display_data;void data_to_sh(unsigned char data ,unsig
10、ned char dot_in )unsigned char i,j;i=codedata; if(dot_in) i=i&0x7f; /有小数点的加小数点SHCP_OUT0(); for(j=0;j8;j+)if(i&0x80)=0x80) /判断并送入低位/ DS_OUT1();else DS_OUT0(); SHCP_OUT1(); /上升沿送入i = 1; /循环右移1位 ;SHCP_OUT0(); void data_out_display()STCP_OUT0(); ;STCP_OUT1();void display_all(unsigned int display_data_int ,unsigned char flag ,unsigned char dot)unsigned char m;/ OE_OUT1();decomposition(display_data_int);for(m=0;m4;m+) if(dot=m) data_to_sh(am,1); else if(flag=1)&(m=4)data_to_sh(10,0); else data_to_sh(am,0);data_out_display(); /将数据输出OE_OUT0(); /输出使能