
-
UID:619690
-
- 注册时间2009-01-31
- 最后登录2021-10-03
- 在线时间2022小时
-
-
访问TA的空间加好友用道具
|
修改了多次,闪烁感无法去除,倒是弄明白怎么调亮度了。 这个程序本来说明“晶振用33M 单片机用STC89C51 6T 模式”是不是单片机性能不足啊?然后行扫描的速度过慢?89s52最高33MHz,后来我插了个40MHz的上去,还是一样。 +:看来最主要的问题是单片机的速度不够快。第一次觉得普通51性能不够了。原来觉得速度已经够快了。 实际的感觉是闪烁感很强,不像视频拍的这样。毕竟机器还是比人的眼睛快。 flash: http://player.youku.com/player.php/sid/XNjIzMzM1ODcy/v.swf - /*
- 32_64_138_595点阵屏 C程序
- [LED显示屏] 2008-6-17
- 595连级输出数据,138行驱动。4593驱动 晶振用33M 单片机用STC89C51 6T 模式
- 单片机通过P0口与点阵屏连接,点阵屏列驱动为74HC595一个数8位,四字须8个595IC,行驱动为74HC138由于
- 两个138驱动16行。 本程序未用到串口,程序使用P0口模拟串口方式与595通信
- 8个595输出例信号,两个138输出16行信号。
- 595连级输出数据,138行驱动。4593驱动 晶振用33M 单片机用STC89C51 6T 模式
- //#include <at89x51.H>
- #include <reg52.h>
- #include <intrins.h> //包含NOP空指令函数_nop_();
- unsigned char code hanzi[4][32]; //字模数组
- unsigned char code sw[16]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x087,
- 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, };//138的驱动代码,根据138的真值表计算而来。 //p0.0--p0.3 代表ABCD 2片138扫描 16行[color=#008ef1] [/color]
- unsigned char e,i,a;
- /*ABCD--P00,P01,P02,P03*/
- unsigned char TEMPR;
- bit b;
- sbit EN =P3^0; //使能
- sbit STB =P1^4; //锁存
- sbit CLK =P1^5; //时钟
- sbit R =P1^6; //红数据
- sbit G =P1^7; //绿数据
- void delay(); //延时
- void out_R(unsigned char *d); //发送红色数据
- void out_G(unsigned char *d); //发送绿色数据
- void SHOW_R(); //显示红色
- void delay()
- {unsigned char n;
- for(n=200;n>0;n--)
- {;}
- }
- void main()
- {unsigned int f;
- // P2_0=0; //关闭蜂鸣器
- //CLK=0;
- while(1) //重复循环显示
- {
- for(i=1;i<=31;i+=2) //
- {
- // EN=0;
- // if(f<100)
- SHOW_R(); //显示红色
- // else if(f<200)
- // SHOW_G(); //显示绿色
- // else if(f<300)
- // SHOW_RG(); //显示红绿色
- // else
- // SHOW_GR(); //显示绿红色
- // delay();
- P0=sw[e]; //输出行信号
- STB=0;
- STB=1; //锁存为高,595锁存信号
-
- // EN=1; //开显示
- //delay(); //延时,等待一段时间,让这列显示的内容在人眼内产生“视觉暂留”现象。*/
-
- e++; //行加一
- if(e==16) //一共16行。
- e=0;
- }
- //if(f++==400)
- // f=0;
- }
- }
- void SHOW_R()
- {
- out_R(&hanzi[0][i-1]); //从串口输出第1个字的第二字节。
- out_R(&hanzi[0][i]); //从串口输出第1个字的第一字节。
- out_R(&hanzi[1][i-1]); //从串口输出第2个字的第二字节
- out_R(&hanzi[1][i]); //从串口输出第2个字的第一字节。
- out_R(&hanzi[2][i-1]);
- out_R(&hanzi[2][i]);
- out_R(&hanzi[3][i-1]);
- out_R(&hanzi[3][i]); [color=#008ef1] [/color]
- }
- void out_R(unsigned char *d)//发送数据
- {
- TEMPR=*d;
- // G=1; //关闭红色
- for(a=0;a<8;a++)
- {CLK=0;
- // TEMPR<<a; //取出最高位。
- R=(TEMPR<<a)&0x80;; //输出数据1[color=#008ef1] [/color]
- //发送时钟
- CLK=1;[color=#008ef1] [/color][color=#008ef1] [/color]
- }
- }
- void out_G(unsigned char *d)//发送数据
- { unsigned char i,TEMP;
- bit e;
- TEMP=*d;
- R=1; //关闭红色
- for(i=0;i<8;i++)
- {
- e=(TEMP<<i)&0x80; //取出最高位。
- if(e==0)
- G=0;
- else
- G=1; //输出数据1
- CLK=1; //发送时钟
- CLK=0;
- }
- }
- unsigned char code hanzi[4][32]={ //二维数据
- 0xDF,0xFF,0xEC,0x03,0xEF,0xFB,0xBF,0xFB,0xBE,0xFB,0xBE,0xFB,0xBE,0xFB,0xBE,0xFB,
- 0xBD,0x7B,0xBD,0xBB,0xBB,0xDB,0xA7,0xDB,0xBF,0xFB,0xBF,0xFB,0xBF,0xEB,0xBF,0xF7,/*"闪",0*/
- 0xEF,0xF7,0xEF,0xC3,0xEC,0x3F,0xE9,0xDF,0xA5,0xDF,0xAD,0xDF,0xAC,0x01,0x6F,0xDF,
- 0xEF,0xDF,0xE7,0x57,0xDA,0x5B,0xDA,0xDD,0xBD,0xDD,0xBB,0xDF,0x7F,0x5F,0xFF,0xBF,/*"烁",1*/
- 0xFF,0xFB,0x80,0x01,0xDD,0xB7,0xED,0xB7,0xF5,0xAF,0xC0,0x01,0xDF,0xFF,0xDF,0xFF,
- 0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xBF,0xFF,0xBF,0xFF,0x7F,0xFF,0xFF,0xFF,/*"严",2*/
- 0xFE,0x0F,0xC0,0xFF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xE0,0x0F,0xEE,0xEF,0xE0,0x0F,
- 0xEE,0xEF,0xE0,0x0F,0xFE,0xFF,0xC0,0x07,0xFE,0xFF,0xFE,0xFF,0x00,0x01,0xFF,0xFF,/*"重",3*/
- };
[ 此帖被chenppo在2013-10-19 12:07重新编辑 ]
|