想让串行4位数码管模块块按下的时候显示

您的位置:&&推荐的文章
花样流水灯程序(至少两种模式,用数码管显示模式的数字,用按键控制模式,并且实现灯的加速或减速
花样流水灯程序(至少两种模式,用数码管显示模式的数字,用按键控制模式,并且实现灯的加速或减速
呵呵,我也来凑一个热闹啊!//程序功能:用数组函数让P1的8个二极管花样闪烁//
K1 加速。K2 减速。K3 恢复正常。 K4 暂停1.5s后继续。//制 作 者:*
*//Q
Q:*******#include&reg51.h&#define uchar unsigned char#define uint unsigned intsbit v1=P3^4;sbit v2=P3^5;sbit v3=P3^6;sbit stop=P3^7;uint x,y,z,uchar code led[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};void delay(uint z){for(x=z;x&0;x--)for(y=124;y&0;y--);}void main(){z=150;aa=0;while(1){
for(i=0;i&97;i++){if(v1==0)z+=10;if(v2==0)z-=10;if(z&20)z=10;if(v3==0)z=124;P1=led[i];delay(z);if(stop==0){delay(10);if(stop==0){while(!stop);delay(1500);}}}}}一样的,如果你要数码管显示模式的话,只需要加上数码管显示的几个句子就可以了,我就不帮你改了啊!!呵呵...
呵呵,我也来凑一个热闹啊!//程序功能:用数组函数让P1的8个二极管花样闪烁//
K1 加速。K2 减速。K3 恢复正常。 K4 暂停1.5s后继续。//制 作 者:*
*//Q
Q:*******#include&reg51.h&#define uchar unsigned char#define uint unsigned intsbit v1=P3^4;sbit v2=P3^5;sbit v3=P3^6;sbit stop=P3^7;uint x,y,z,uchar code led[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};void delay(uint z){for(x=z;x&0;x--)for(y=124;y&0;y--);}void main(){z=150;aa=0;while(1){
for(i=0;i&97;i++){if(v1==0)z+=10;if(v2==0)z-=10;if(z&20)z=10;if(v3==0)z=124;P1=led[i];delay(z);if(stop==0){delay(10);if(stop==0){while(!stop);delay(1500);}}}}}一样的,如果你要数码管显示模式的话,只需要加上数码管显示的几个句子就可以了,我就不帮你改了啊!!呵呵...
你改改应该可以#include &reg51.h&#include &intrins.h&#include &I2C_drive.h&//包含I2C总线驱动程序软件包#define uchar unsigned char#define uint unsigned intsbit BEEP=P3^7;/********以下是流水灯数据********/uchar code
led_data1[40]= { 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,//依次逐个点亮0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,//依次逐个叠加0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,//依次逐个递减0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,//依次逐个叠加0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//依次逐个递减uchar code
led_data2[34]= {0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e,//两边靠拢后分开0x7e,0x3c,0x18,0x00,0x00,0x18,0x3c,0x7e,//两边叠加后递减0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e,//两边靠拢后分开0x7e,0x3c,0x18,0x00,0x00,0x18,0x3c,0x7e,//两边叠加后递减0x00,0xff};//全亮和全灭uchar idata led_buf[74]={0xff,0xff };
//数据存储区/********以下是延时函数********/void Delay_ms(uint xms){uint i,j;for(i=i&0;i--)
//i=xms即延时约xms毫秒for(j=110;j&0;j--);}/*********以下是蜂鸣器响一声函数********/void
//蜂鸣器响
Delay_ms(100);
//关闭蜂鸣器
Delay_ms(100);
}/********以下是主函数********/main(void){
I2C_init();
write_nbyte(0xa0,0,led_data1,40);
//从led_data1[]数组中取出40个数据,从24C04的0单元开始写入40个数据
Delay_ms(50);
write_nbyte(0xa0,40,led_data2,34);//从led_data2[......
呵呵,我也来凑一个热闹啊! //程序功能:用数组函数让P1的8个二极管花样闪烁 // K1 加速。K...
以前用汇编语言写过一个控制四种花样的。 /%D7%F6%B6%...
c51 按键控制流水灯,按第一次模式一点亮,依次类推;每按下数码管显示相应数字,数码管能显示,但le...
按键模块:按键有复位键,流水灯启停键,流水程序模式四种!显示模块:数码管显示采集温度。通信模块:实现...
为什么要用38译码器呢?用38译码器,一个数码管就要扫描输出,数码管多了恐怕显示起来就暗了!每个数码...
有这么好的动手机会,就自己做吧。对以后非常有用(过来人的建议。)。 分享下我思路: 1、将你控制用的...
那数码管的公共端(位选)有没有加控制?如果加控制的话,数码管可以单独控制。 但是流水灯没办法控制了,...
数码管到8后,你应设变量=0,然后再进入循环。
用记事本写的,可能有错误 #include&stc.h& #define uchar unsigne...
购物网站热门产品排行借鉴的地方:
1、正点原子的“ALIENTEK MINISTM32 实验20 SPI实验”
&/posts/list/46179.htm
STM32F103RCT6开发板;MAX7219 8位数码管显示模块:
数码管模块电路图:(店家/item.htm?spm=a1z09.2.0.0.FiSjlX&id=&_u=cjnajni5a96提供)
MAX7219中文说明可以借鉴:
/link?url=x3kqYs4DsCZ2V6ZXyDYwK2qgLC6Y6qR_sfo3m53pxHyFjPh6TQfsu1S9o72x3xdJvIO6PjxVgmZMnh-8OXa_2CuxeCSNcpr5S6WBdRmr-VG
/link?url=lsfDPw13GMUDhhplpO87xIvfRDOMr6Jplpt787Hue4YTrAo-WzYQTXexARaBD4wZGWdLW_dZBcOxsTZVuoqBd2nAl4WEQkYHNZvhMLpwcqe
接口VCC(+3.3V),DIN(PA7),CS(PA3),CLK(PA5)
#define Max7219_pinCLK PAout(5)
#define Max7219_pinCS PAout(3)
#define Max7219_pinDIN PAout(7)
/*****************************************************************
Updated time: 12th,12,2015
Function:通过MAX7219驱动数码管
******************************************************************/
#include &delay.h&
#include &sys.h&
#include &usart.h&//串口通信
#define Max7219_pinCLK PAout(5)
#define Max7219_pinCS PAout(3)
#define Max7219_pinDIN PAout(7)
/****************************************************************************
* 名称:SPI1_Init(void)
* 功能:STM32_SPI1硬件配置初始化
* 入口参数:无
* 出口参数:无
* 说明:STM32_SPI1硬件配置初始化,使用3V3
****************************************************************************/
void SPI1_Init(void)
SPI_InitTypeDef
SPI1_InitS
GPIO_InitTypeDef GPIO_InitS
//配置SPI1管脚
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//SPI1相关引脚
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//推挽复用功能
GPIO_Init(GPIOA,&GPIO_InitStructure);
SPI1_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullD//设置SPI单向或者双向的数据模式;SPI设置为双线双向全双工
SPI1_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_64;//定义波特率预分频值;波特率预分频64
SPI1_InitStructure.SPI_DataSize=SPI_DataSize_8b;//设置SPI的数据大小;SPI发送接收8位帧结构
SPI1_InitStructure.SPI_Mode=SPI_Mode_M//设置SPI工作模式;设置为主SPI
SPI1_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB; //高位MSB在先
SPI1_InitStructure.SPI_CPOL = SPI_CPOL_H //选择了串行时钟的稳态,时钟悬空高
SPI1_InitStructure.SPI_CPHA = SPI_CPHA_2E//数据捕获于第二个时钟沿
SPI1_InitStructure.SPI_NSS = SPI_NSS_S //使用软件模式,
SPI1_InitStructure.SPI_CRCPolynomial = 7;//CRC值计算的多项式
SPI_I2S_DeInit(SPI1);
SPI_Init(SPI1, &SPI1_InitStructure); //根据指定的参数初始化
SPI_Cmd(SPI1, ENABLE);
//--------------------------------------------
//功能:向MAX7219写入字节
//入口参数:DATA
//出口参数:无
void Write_Max7219_byte(unsigned char DATA)
Max7219_pinCS=0;
for(i=8;i&=1;i--)
Max7219_pinCLK=0;
Max7219_pinDIN=DATA&0x80;
DATA=DATA&&1;
Max7219_pinCLK=1;
//-------------------------------------------
//功能:向MAX7219写入数据
//入口参数:address,dat
//出口参数:无
void Write_Max7219(unsigned char address,unsigned char dat)
GPIO_ResetBits(GPIOA, GPIO_Pin_3);
SPI_I2S_SendData(SPI1, address);
//写入地址,即数码管编号
delay_us(10);
SPI_I2S_SendData(SPI1, dat);
//写入数据,即数码管显示数字
delay_us(10);
GPIO_SetBits(GPIOA, GPIO_Pin_3);
void Init_MAX7219(void)
Write_Max, 0xFF);
//译码方式:BCD译码
Write_MaxA, 0x03);
Write_MaxB, 0x07);
//扫描界限;8个数码管显示
Write_MaxC, 0x01);
//掉电模式:0;普通模式:1
Write_MaxF, 0x00);
//显示测试:1;测试结束,正常显示:0
int main(void)
unsigned char i,j;
delay_init();//延时初始化
SPI1_Init();//SPI初始化
NVIC_Configuration();//中断分组
uart_init(9600);//串口波特率9600
delay_ms(50);
Init_MAX7219();//初始化
Write_Max, 0x00); //1号数码管显示数字0
Write_Max, 0x01);
Write_Max, 0x02);
Write_Max, 0x03);
Write_Max, 0x04);
Write_Max, 0x05);
Write_Max, 0x06);
Write_Max, 0x07);
for(j=0;j&=9;j++)
Write_Max, j);
delay_ms(50);
关于“”:/posts/list/33654.htm
原子大哥如是说:
<span class="postbody" id="post_body_,硬件NSS,是指SPI自动控制SPI的片选信号,发送数据的时候,输出低电平,不发送的时候,是高电平,这个模式一般不用.因为这种方式只能1个SPI接1个从机,很是蛋疼.
2,软件模式就是完全软件控制SPI片选,就是一个普通IO控制,你要SPI通信之前,必须先用软件的方式,控制SPI从机的片选为低电平,然后在发送数据.发完后,拉高.&一般用这个模式,因为可以一个SPI控制N多个从机...&
a) SPI一些想法可以参考:http://blog.csdn.net/xuezhimeng2010/article/details/
spi通信配置
1、GPIO时钟使能,SPI时钟使能。
2、配置GPIO片选,推挽输出,上拉;SCLK、MOSI、MISO所用到的引脚为复用功能;SCLK下拉,MOSI推挽复用,MISO无推挽。
3、SPI初始化,配置工作模式为全双工,主机模式,SCLK闲时电平为低,第二个时钟沿(下降沿)采样数据,SCLK时钟128预分频,CRC校验置默认&#,内部从机选择软件管理模式。设置接收FIFO为四分之一,内部从机选择设置为主机(置1),使能SPI。
4、从机设备一般上电是默认写使能的,因此若需要读取数据先关闭写使能。
5,stm32f0在使能spi后,miso和mosi都被拉低,因此在读取从机数据时,需要先发送的无效数据为0x00。
b) SPI的复用管脚可以通过STM32F103的datasheet查到
本文已收录于以下专栏:
相关文章推荐
虽然单片机可以驱动液晶屏,但是在实际的应用领域,数码管仍然是主流的显示器件。如果提到多位数码管显示,一般都要讲各个位轮流显示的动态显示技术。这种方法虽然可以节省单片机的输出接口,但是使得单片机的软件负...
网上一般都是数码管例子, 这里我就用点阵吧, 其实原理是一样的~
一,先从单个MAX7219说起.
接法如下图:(DIG0~7为位选, DP~A为段选)(也即 DIG0~7为选行, DP~A为给选...
占用3个IO口,就可以控制8*8点阵的显示,非常实用,简单。
Arduino Uno
MAX7219 LED点阵模块
MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片,一片MAX7219可驱动8个7段(包括小数点共8段)数字LED、LED条线图形显示器、或64个分立的LED发光二级管。该芯片...
他的最新文章
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)【图文】模块3 数码管显示接口控制_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
模块3 数码管显示接口控制
&&机电专业单片机教学课件
大小:694.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢

我要回帖

更多关于 4位数码管模块 的文章

 

随机推荐