|
下面是单片机16*16点阵的proteus仿真原理图(工程文件可到本帖附件中下载):
仿LED点阵字模的VB6工程源代码:
单片机16*16点阵源程序如下:
- #include <reg51.h> // 预处理命令
- #include <stdio.h>
- #define uint unsigned int
- #define u8 unsigned char
- //u8 Lsd[16]={0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
- u8 j=0; //行变量
- //32字节的字模
- u8 code zmdata[]=
- {0x00,0x08,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,
- 0x02,0x80,0x02,0x80,0x04,0x40,0x04,0x40,0x08,0x20,0x10,0x10,0x20,0x0E,0xC0,0x04};
- sbit sd = P1^6; // 行信号串行输入线
- sbit clk = P1^7; // 串行时钟线
- sbit stbd= P1^5; // 锁存输出脉冲线
- main() { // 主函数
- u8 i;
- SCON=0x00; //移位方式
- TMOD=0x01; //T0初始化为16位定时
- TH0=0xf8; //定时2000us
- TL0=0x30; //初值=65536-2000
- ET0=1; //开定时器1中断
- EA=1; //开总中断
- //初始化位选,让16个行输出是高电平,
- sd=1; // 初始化串行输入数据线为高电平
- clk=1; // 初始化时钟线为高电平
- stbd=0; // 初始化锁存线为低电平
- for(i=0;i<16;i++) //移位16次,使移位寄存器输出全部为高电平
- {
- clk=0;
- clk=1;
- }
- clk=0; //使时钟线为低电平
- //把移位寄存器的16位进行输出锁存
- stbd=1;
- stbd=0;
- TR0=1; //开启T0定时器
- while(1);
- } // 主程序结束
- void T0str() interrupt 1
- {
- TL0=0x30;
- TH0=0xf8; //定时器初值2ms
- j++; //行加1
- if(j==16)
- {
- j=0; //行范围是0--15
- sd=0;
- }
- else
- {
- sd=1;
- }
- TI=0; //串行通信发送标志置0
- SBUF=zmdata[2*j+1]; //移位输出高位
- while(!TI);
- //移位输出完成
- TI=0;
- SBUF=zmdata[2*j]; //移位输出低位
- while(!TI);
- //移位输出完成
- //sd=Lsd[j]; //
- clk=1; //发移位脉冲
- clk=0;
- stbd=1; ////发脉冲点亮当前行
- stbd=0;
- } // max函数结束
- // 中
- //0x01,0x00,0x01,0x00,0x01,0x04,0x7F,0xFE,0x41,0x04,0x41,0x04,0x41,0x04,0
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
给大家分享一些我们老师给的一些经典的单片机程序源码, 一共有十多个.都有详细的注释,然大家快速的理解每一行代码的意思。而且有proteus仿真原理图。大家可以直接验证程序的对错.
本系列所有源码打包下载地址(含proteus仿真工程文件和源程序):
http://www.51hei.com/bbs/dpj-82474-1.html
本例程下载:
点阵.rar
(271.37 KB, 下载次数: 32)
|
|