我手上有一块空调显示板,是两个74HC595驱动的,双8数码管显示。 我刚学单片机,就想能编个小程序点亮他,程序设想是,60秒倒计时,并有嘀嘀声。S1键为设置键,S2键数码上升,S3键数码下降。S4键,停止工作。
刚学单片机,程序可能编写的不好,望各位大侠指点!
(咋样添加视频啊,搞半天上部去,自己拍的视频可以上传吗?)
单片机源程序如下:
- #include < reg51.h> //51芯片管脚定义头文件
- #include < intrins.h> //内部包含延时函数 _nop_() ;
- #define uchar unsigned char
- #define uint unsigned int
- uchar code leddata [ ]={0x01,0xf9,0x42,0xc0,0xa8,0x84,0x04,0xe1,0x00,0x80} ;
- sbit SDATA_595=P1^0 ; //串行数据输入
- sbit SCLK_595 =P1^1 ; //移位时钟脉冲
- sbit RCK_595 =P1^2 ; //输出锁存器控制脉冲
- sbit beez = P3^6;
- sbit S1 = P3^5;
- sbit S2 = P3^4;
- sbit S3 = P3^3;
- sbit S4 = P3^2;
- uchar temp_shi,temp_ge,ge,ge1,k ;
- uint m,n,p;
- void delay ( uint z )
- {
- uint x,y;
- for (x = z ;x>0;x--)
- for( y = 114;y>0;y--) ;
- }
- void delay1 ( uint z )
- {
- uint x,y;
- for (x = z ;x>0;x--)
- for( y = 10;y>0;y--) ;
- }
- void WR_shi_595(void) //值595十位 为低
- {
- uchar j ;
- uchar we;
- we = 0x7f;
- for (j=0 ;j< 8 ;j++)
- {
- we = we << 1 ;
- SDATA_595=CY ;
- SCLK_595=1 ; //上升沿发生移位
- _nop_() ;
- _nop_() ;
- SCLK_595=0 ;
- }
-
- for (j=0 ;j< 8 ;j++) //写595十位数据
- {
- temp_shi = temp_shi << 1 ;
- SDATA_595=CY ;
- SCLK_595=1 ; //上升沿发生移位
- _nop_() ;
- _nop_() ;
- SCLK_595=0 ;
- }
- }
- void WR_ge_595(void) //值595个位 为低
- {
- uchar j ;
- uchar we1;
- we1 = 0x8f;
- for (j=0 ;j< 8 ;j++)
- {
- we1 = we1 << 1 ;
- SDATA_595=CY ;
- SCLK_595=1 ; //上升沿发生移位
- _nop_() ;
- _nop_() ;
- SCLK_595=0 ;
- }
- for (j=0 ;j< 8 ;j++) //写595个位数据
- {
- temp_ge = temp_ge << 1 ;
- SDATA_595=CY ;
- SCLK_595=1 ; //上升沿发生移位
- _nop_() ;
- _nop_() ;
- SCLK_595=0 ;
- }
- }
- void OUT_595(void)
- {
- RCK_595=0 ;
- _nop_() ;
- _nop_() ;
- RCK_595=1 ; //上升沿将数据送到输出锁存器
- _nop_() ;
- _nop_() ;
- _nop_() ;
- RCK_595=0 ;
- }
- void dispiay_595 (z) //显示子函数
- {
- uchar shi ,ge;
- shi = z/10;
- ge = z%10;
- temp_shi = leddata[shi] ;
- temp_ge = leddata[ge];
- WR_shi_595();
- OUT_595();
- delay(5);
- WR_ge_595();
- OUT_595();
- delay(5);
- }
- main()
- {
- SCLK_595=0 ;
- RCK_595=1 ;
- k = 60;
- while(1)
- {
- for ( m=0; m<78;m++)
- {
- dispiay_595(k);
- delay(1) ;
-
- if ( S1 == 0 )
- {
- delay (5);
- if ( S1 ==0 )
- { while ( !S1 );
- }
-
- for ( p=0;p<300;p++)
- {
- dispiay_595(k);
- delay(1) ;
- if ( S2 == 0 )
- { delay (5);
- if ( S2 ==0 )
- k++;
- p=0;
- while (!S2) ;}
- if ( S3 == 0 )
- { delay (5);
- if ( S3 ==0 )
- k--;
- p=0;
- while (!S3) ;
- }
- if ( S4 == 0 )
- { delay (5);
- if ( S4 ==0 )
- while (1) ;
- }
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
74HC595.rar
(14.83 MB, 下载次数: 32)
|