工具/原料
- 单片机开发板
- keil C IDE开发工具
- 8*8字模取模软件
下载:
(121)8x8点阵显示滚动广告.zip
(16.47 KB, 下载次数: 127)
部分源码预览:
- /*=======================================================================
- 程序名 : 8x8点阵显示滚动广告
- 编写人 : 李镇
- 编写时间: 2015年5月22日
- 硬件支持: STC89C52(QFC51开发板联系旺旺ID:qq763187758)
- 系统时钟: 12MHZ
- 程序目的: 在试验开发板的点阵上显示滚动广告.
- 试验工具: QFC51开发板,记得把显示切换到点阵显示4的位置
- 程序说明: 本程序的取模方式是纵向取模,0电平点亮,所以用软件取的模还要反白,
- 点阵扫描原理是:先选通第最左边的一列,再发送取模数据,一直扫描到最后一列
- 点阵扫描每次只扫描前8列,滚动的效果的原理是,每隔一定时间,就把所有取模向前移一位,就达到滚动效果.
- 当然也可以向后移一位,或者多位.
- ========================================================================*/
- #include <reg52.h> //包含头文件
- /*===把点阵的列选放在这个数组里===*/
- unsigned char big[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
- //0111 1111 = 0x7f 选通第7列.从右至左,与数据的位相对,数据的0位在最右边,点阵的第0列也在最右边
- //1011 1111 = 0xbf
- //1101 1111 = 0xdf
- //1110 1111 = 0xef
- //1111 0111 = 0xf7
- //1111 1011 = 0xfb
- //1111 1101 = 0xfd
- //1111 1110 = 0xfe 选通第0列,从右至左,与数据的位相对,数据的0位在最右边,点阵的第0列也在最右边
- /*===/www.qq763187758.com(纵向取模)===*/
- xdata unsigned char LedFai[] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCF,0xB7,0xBB,0xDD,0xBB,0xB7,0xCF,0xFF,
- 0xF1,0xFE,0xF9,0xFE,0xF1,0xFF,0xF1,0xFE,0xF9,0xFE,0xF1,0xFF,0xF1,0xFE,0xF9,0xFE,
- 0xF1,0xFF,0xFE,0xFF,0xC7,0xBB,0xBB,0xDB,0x80,0xFF,0xC7,0xBB,0xBB,0xDB,0x80,0xFF,
- 0x9F,0xBF,0xB8,0xB7,0x8F,0xFF,0xE1,0xD6,0xB6,0xB6,0xF9,0xFF,0xBD,0xBE,0xAE,0x96,
- 0xB9,0xFF,0xFF,0xDE,0x80,0xFE,0xFF,0xFF,0xC9,0xB6,0xB6,0xB6,0xC9,0xFF,0x9F,0xBF,
- 0xB8,0xB7,0x8F,0xFF,0x9F,0xBF,0xB8,0xB7,0x8F,0xFF,0x8D,0xAE,0xAE,0xAE,0xB1,0xFF,
- 0xC9,0xB6,0xB6,0xB6,0xC9,0xFF,0xFE,0xFF,0xE3,0xDD,0xDD,0xDD,0xFB,0xFF,0xE3,0xDD,
- 0xDD,0xDD,0xE3,0xFF,0xC1,0xEF,0xDF,0xDF,0xE1};
- /*===点阵扫描===*/
- void led_out(void)
- {
- unsigned char i,j; //声明1个变量用来循环用,1个变量用来循环延时用
- for(i = 0;i < 8;i++) //for循环8次,i从0到7循环8次
- {
- P0 = LedFai[i]; //P0口输出纵向取模,P1口输出列选,在哪1列上显示.从列选表里与i配合输出.
- P1 = big[i]; //P1口输出列扫描,分别扫描点阵的8个列,从左到右一列一列扫描.
- for(j = 0;j < 140;j++); //延时一段时间.
- P1 = 0xff; //关闭列选.
- }
- }
- /*===把字模数组里的元素整体向左移一位===*/
- //sizeof(LedFai)的作用是获得LedFai数组的元素的个数。减1就得到此数组的最大元素下标。
- void LedLeft()
- {
- unsigned char i;
- unsigned char j = LedFai[0]; //先把字模数组的第0个元素暂存,因为取模左移时,这个字模要被移出.
-
- for(i = 0;i < sizeof(LedFai)-1;i++)
- {
- LedFai[i] = LedFai[i+1]; //把字模数组里的后一个字模向前移动一位.
- }
- LedFai[sizeof(LedFai)-1] = j; //把字模数组的最前面字模放在这个数组的最后.
- }
- /*===主函数===*/
- void main(void)
- {
- unsigned char j = 0; //声明1个变量用来控制滚动时间
- while(1) //主循环.
- {
- j++; //循环延时变量自增
- if(j == 100) //如果时间到,滚动一次.
- {
- j = 0; //清循环延时计数为0,重新开始计数
- LedLeft(); //取模移整体移一位
- }
- led_out(); //点阵扫描.
- }
- }
复制代码 |