用STC12C5A60S2直驱一个16*16LED点阵显示屏 作者: 时间:2016-11-29 来源:网络 加入技术交流群 扫码加入和技术大咖面对面交流海量资料库查询 收藏 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00, //最后留一空白字符. }; uchar code tab[]= {0x7f,0xff,0xbf,0xff,0xdf,0xff,0xef,0xff,0xf7,0xff,0xfb,0xff,0xfd,0xff, 0xfe, 0xff, 0xff, 0x7f,0xff,0xbf,0xff,0xdf,0xff,0xef,0xff,0xf7,0xff,0xfb,0xff,0xfd,0xff,0 xfe }; //16列扫描分时输出,从右到左每次输出1列 ,低电平有效. bit SHAN; //以下变量作为时钟计数用,本程序单显汉字,未用到. uchar second,minute,hour; void init(); //初始化函数. #define HAN1 P1 //定义p1口为行0-行7数据口 #define HAN2 P3 //定义p3口为行8-行15数据口 #define LIE1 P2 //定义p2口为列1-行7数据口 #define LIE2 P0 //定义p0口为列8-列15数据口 void delay(uchar delay_time); //延时函数 //--------------------------------------------------------------------- void main() {uchar i ,speed; uint k ; init(); //初始化STC12C5A60S2的P0-P3端口为强推输出,每端 口输出可输出20MA电流,可直驱8X8LED点阵. while(1) { for( k = 0 ; k <1056 ;k += 2 ) //以下的循 环体为流动显示16X16字符. { for( speed = 0 ; speed <10 ; speed++) //改 变这行参数可以改速度. { for(i=0 ;i <16 ; i++) { LIE1=0xff; LIE2=0xff; HAN1 = zimo1[2*i + k ] ; HAN2 = zimo1[2*i+1+ k] ; LIE2=tab[2*i]; LIE1=tab[2*i+1]; delay(20) ; LIE1=0xff; LIE2=0xff; } } } }; } //--------------------------------------------------------------------- void delay(uchar t) // 延时函数 { uchar i; //定义变量 for(;t>0;t--) //如果t大于0,t减1(外层循环) for(i=124;i>0;i--); //i等于124,如果i大于0,i减1 } //--------------------------------------------------------------------- /*************************************** 函 数 名:init 功 能:初始化函数 说 明:初始化定时器及中断 入口参数:无 返 回 值:无 ***************************************/ void init() { TMOD=1;TH0=0X3C;TL0=0XB0; //定时器0模式1,50毫秒 ET0=1;TR0=1;EA=1; //开定时器0中断、启动定时器0、开总中断 P4SW=0xff; //定义P4口为I/O口 P0M1=0x00; P0M0=0xff; //定义P0为强上拉输出. P1M1=0x00; P1M0=0xff; //定义P1为强上拉输出. P2M1=0x00; P2M0=0xff; //定义P2为强上拉输出. P3M1=0x00; P3M0=0xff; //定义P3为强上拉输出. P4M1=0x00; P4M0=0xff; //定义P4为强上拉输出. } /********************************************************************** ****** 函数功能:定时器中断延时程序 这一段的作用计时用,程序中没有用到,保留作为 计时时钟或延时用. 入口参数: 出口参数: *********************************************************************** *****/ void timer0(void) interrupt 1 { uchar tim1,tim2; //定义临时变量 TL0=TL0+0XB0;TH0=0X3C; //重装定时器初值 tim1++; //每中断一次tim1加1 if(tim1==10) //中断10(0.5秒) { SHAN=!SHAN; //闪烁标志取反 tim1=0;tim2++; //tim1清零,tim2加1 if(tim2==2) //到了1秒 { tim2=0;second++; //tim2清零,秒加1 if(second==60) //如果秒到60 { second=0;minute++; //秒变0,分加1 if(minute==60) //如果分到60 { minute=0;hour++; //分变0,时加1 if(hour==24) hour=0; //如果时到24,时变0 } } } } } 上一页 1 2 下一页
评论