用了一个星期的时间,经过长时间打磨
有工程文件和仿真文件
原创加二次改编的
具体问题留帖
电路原理图如下:
单片机源程序如下:- //宏定义
- #define uchar unsigned char
- #define uint unsigned int
- //头函数
- #include <reg51.h>
- #include <intrins.h>
- //管脚定义
- //154
- sbit A_=P0^0;
- sbit B_=P0^1;
- sbit C_=P0^2;
- sbit D_=P0^3;
- sbit G2=P0^7;//低电平使能
- //595
- sbit SI=P0^6;//数据脚
- sbit SCK=P0^5;
- sbit RCK=P0^4;
- //管脚定义
- //154
- sbit A_1=P2^0;
- sbit B_1=P2^1;
- sbit C_1=P2^2;
- sbit D_1=P2^3;
- sbit G2_1=P2^7;//低电平使能
- //595
- sbit SI_1=P2^6;//数据脚
- sbit SCK_1=P2^5;
- sbit RCK_1=P2^4;
- sbit K1=P1^0;
- sbit K2=P1^1;
- sbit K3=P1^2;
- uchar flag1,flag2,X,Y;
- uchar zishu=10; //字数
- uint num;
- bit ssflag;
- uchar sscount;
- //函数声明
- void Init595();
- void Init595_1();
- void Write_byte595(uchar temp);
- void Write_byte595_1(uchar temp);
- void WriteS(uchar data1,uchar data2);
- void WriteS_1(uchar data1,uchar data2);
- void Wei_154(uchar W);
- void Wei_154_1(uchar W);
- void delay(uint z);
- void scan();
- //汉字数组
- uchar code HanZi[]=
- {
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",0*/
- 省略
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",18*/
- };
- void scan()
- {
- if(K1==0)
- {
- delay(70);
- if(K1==0)
- {
- WriteS(0xff,0xff);//消影
- while(K1==0);
- ssflag=0;
- flag1++;
- if(flag1==2)
- flag1=0;
- Y=num;
- X=0;
-
- }
- }
- if(K2==0)
- {
- delay(70);
- {
- if(K2==0)
- {
- WriteS(0xff,0xff);//消影
- while(K2==0);
- ssflag=0;
- // Y=num;
- // X=0;
- flag2++;
- if(flag2==2)
- flag2=0;
- }
- }
- }
- if(K3==0)
- {
- delay(70);
- if(K3==0)
- {
- WriteS(0xff,0xff);//消影
- while(!K3);
- ssflag = ~ssflag;
- flag1=0;
- flag2=0;
- Y=num;
- X=0;
- }
- }
- }
- //主函数
- void main()
- {
- uchar i=1,j=0;
-
- flag1=0;
- num=16*(zishu+3);
-
- //595c初始化
- Init595();
- Init595_1();
- //循环演示
- while(1)
- {
-
- if(flag1==0)
- {
- if(ssflag==0){
- for(j=0;j<4;j++)
- { scan();
- for(i=1;i<17;i++)
- {
-
- WriteS(0xff,0xff);//消影
- Wei_154(i);
-
- {WriteS(HanZi[i*2-2+2*X],HanZi[i*2-1+2*X]);}//显示内容
-
-
-
-
- delay(1);//显示
- G2=0;//关闭
- WriteS_1(0xff,0xff);//消影
-
- Wei_154_1(i);
- WriteS_1(HanZi[i*2-2+2*X+32],HanZi[i*2-1+2*X+32]);//显示内容
-
- delay(1);//显示
- G2_1=0;//关闭
-
-
- }
- }
- if(flag2==0)
- {
- X++;
- if(X>=num) //16*字数+2
- {
- X=0;
- }
- }
- }else{
- scan();
- sscount++;
- if(sscount>=50){
- sscount=0;
- X=X+2*16;
- if(X>=num-16) //16*字数+2
- {
- X=32;
- }
- }
- if(sscount<20){
- for(i=1;i<17;i++)
- {
- WriteS(0xff,0xff);//消影
- Wei_154(i);
-
- {WriteS(HanZi[i*2-2+2*X],HanZi[i*2-1+2*X]);}//显示内容
-
-
-
-
- delay(1);//显示
- G2=0;//关闭
- WriteS_1(0xff,0xff);//消影
-
- Wei_154_1(i);
- WriteS_1(HanZi[i*2-2+2*X+32],HanZi[i*2-1+2*X+32]);//显示内容
-
- delay(1);//显示
- G2_1=0;//关闭
-
-
- }
- }else{
- for(i=1;i<17;i++)
- {
- WriteS(0xff,0xff);//消影
- Wei_154(i);
-
- {WriteS(HanZi[i*2-2+2*0],HanZi[i*2-1+2*0]);}//显示内容
-
-
-
-
- delay(1);//显示
- G2=0;//关闭
- WriteS_1(0xff,0xff);//消影
-
- Wei_154_1(i);
- WriteS_1(HanZi[i*2-2+2*0+32],HanZi[i*2-1+2*0+32]);//显示内容
-
- delay(1);//显示
- G2_1=0;//关闭
-
-
- }
- }
- }
- }
- if(flag1==1)
- {
-
- for(j=0;j<4;j++)
- { scan();
- for(i=1;i<17;i++)
- {
-
- WriteS(0xff,0xff);//消影
- Wei_154(i);
-
-
- WriteS(HanZi1[i*2-2+2*Y-32],HanZi1[i*2-1+2*Y-32]);//显示内容
-
-
-
-
- delay(1);//显示
- G2=0;//关闭
- WriteS_1(0xff,0xff);//消影
-
- Wei_154_1(i);
- WriteS_1(HanZi1[i*2-2+2*Y],HanZi1[i*2-1+2*Y]);//显示内容
-
-
- delay(1);//显示
- G2_1=0;//关闭
-
-
- }
- }
- if(flag2==0)
- {
- Y--;
- if(Y<=0)
- Y=num;
- }
- }
- }
- }
- //初始化
- void Init595()
- {
- SI=1;
- SCK=0;
- RCK=0;
- }
- void Init595_1()
- {
- SI_1=1;
- SCK_1=0;
- RCK_1=0;
- }
- void Write_byte595(uchar temp)
- {
- uchar i,data_=temp;
- G2=1;
- for(i=0;i<8;i++)//传值8位
- {
- if(data_&0x01==0x01)//低位为1
- {
- SI=1;
- }
- else //低位为0
- {
- SI=0;
- }
- //产生一个上升沿
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
Proteus8.10版本的仿真图(只支持此版本打开)与程序:
仿真程序.7z
(11.22 MB, 下载次数: 51)
|