使用定时器0中断控制8x8点阵屏循环左移
#include #include typedef unsigned char u8; typedef unsigned int u16; sbit SRCLK=P3^6; sbit RCLK=P3^5; sbit SER=P3^4; u16 i,k; u16 time; u8 code ledduan[][8]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24}, {0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x6c}, {0x00,0x00,0x00,0x00,0x00,0x24,0x6c,0xff}, {0x00,0x00,0x00,0x00,0x24,0x6c,0xff,0xff}, {0x00,0x00,0x00,0x24,0x6c,0xff,0xff,0x6c}, {0x00,0x00,0x24,0x6c,0xff,0xff,0x6c,0x24}, {0x00,0x24,0x6c,0xff,0xff,0x6c,0x24,0x00}, {0x24,0x6c,0xff,0xff,0x6c,0x24,0x00,0x00}, {0x6c,0xff,0xff,0x6c,0x24,0x00,0x00,0x00}, {0xff,0xff,0x6c,0x24,0x00,0x00,0x00,0x00}, {0xff,0x6c,0x24,0x00,0x00,0x00,0x00,0x00}, {0x6c,0x24,0x00,0x00,0x00,0x00,0x00,0x00}, {0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00},}; u8 code ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; void delay(u16 i) { while(i--); } void timer0init() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; ET0=1; TR0=1; EA=1; } void Hc595SendByte(u8 dat) { u8 a; SRCLK=0; RCLK=0; for(a=0;a<8;a++) { SER=dat>>7; dat<<=1; SRCLK=1; _nop_(); _nop_(); SRCLK=0; } RCLK=1; _nop_(); _nop_(); RCLK=0; } void main() { timer0init(); { while(1) { for(i=0;i<8;i++) { P0=ledwei[i]; Hc595SendByte(ledduan[k][i]); delay(50); Hc595SendByte(0x00); } } } } void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; time++; { if(time>=5) { k++; time=0; } if(k>12) { k=0; } } }
上一篇:51单片机项目设计:基于超声波的车库停车系统、车位检测
下一篇:51单片机 外部中断0控制LED亮灭
推荐阅读最新更新时间:2024-11-10 10:18