| #include<pic.h>  //pic12f629通过,但pic12f765没有任何反应
 __CONFIG(0x3F84);
 //两块74HC595级联,前一块驱动段,后一块驱动位,驱动的是共阴四位数码管
 //本程序依次驱动八位数码管,显示01234567,12345678,23456789,……,89AbCdEF,.....
 #define SH_CP GPIO0  // 74HC595时钟输入
 #define DS GPIO1  // 74HC595数据端口
 #define ST_CP GPIO4  // 74HC595数据锁存
 #define uchar unsigned char
 #define uint unsigned int
 void delay(uint);
 void xians(uchar);
 
 const uchar LED[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7d,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//段选
 const uchar WEI[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};  //位选
 
 main()
 {
 uint x,y,z,m;
 OPTION=0b10000000; //禁止弱上拉
 
 WPU= 0x00; //关闭弱上拉
 
 TRISIO=0; //IO 口做输出
 
 CMCON=0x3f; // 设置全部为普通数字IO口 关闭所有比较器
 
 GPIO=0x00; //端口0 输出低电平
 
 while(1)
 {
 for(x=0;x<17;x++)
 {
 for(z=0;z<500;z++)
 {
 for(y=0;y<8;y++)
 {
 xians(WEI[y]);
 m=x+y;
 if(m<16);
 else m=m-16;
 xians(LED[m]);
 ST_CP=0;
 asm("NOP");
 asm("NOP");
 ST_CP=1;
 asm("NOP");
 asm("NOP");
 ST_CP=0;
 }
 }
 delay(20);
 }
 }
 
 }
 
 void delay(uint x)  //短暂延时程序
 
 {
 
 uint a,b;
 
 for(a=x;a>0;a--)
 
 for(b=100;b>0;b--);
 
 }
 void xians(uchar udata)  //将数据写入74HC164
 {
 uchar i;
 for (i=0;i<8;i++)
 {
 if(udata&0x80)
 {
 DS=1;
 SH_CP=0;
 asm("NOP");
 asm("NOP");
 SH_CP=1;
 udata = udata<<1;
 }
 else
 {
 DS=0;
 SH_CP=0;
 asm("NOP");
 asm("NOP");
 SH_CP=1;
 udata = udata<<1;
 }
 
 }
 }
 |