标题:
利用8*8点阵实现0-9的显示的单片机仿真与源程序
[打印本页]
作者:
青宁
时间:
2018-8-28 08:11
标题:
利用8*8点阵实现0-9的显示的单片机仿真与源程序
附上实验结果的截图,完整电路图和程序在压缩包内
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
捕获.JPG
(234.48 KB, 下载次数: 83)
下载附件
2018-8-28 08:09 上传
单片机源程序如下:
/*8x8LED显示从0到9数据 */
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
//74HC595 行选
sbit LOCK = P2^3; //禁止输出
sbit SCLK = P2^4; //时钟引脚
sbit DATA = P2^5; //数据
//74HC138 列选
sbit hc138_A = P2^0;
sbit hc138_B = P2^1;
sbit hc138_C = P2^2;
//数字字模,10个数字0~9,每个数字8个字节(纵向,正序)
uchar code shuzi[10][8]=
{
{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, //0
{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00}, //1
{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, //2
{0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00}, //3
{0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, //4
{0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, //5
{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, //6
{0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00}, //7
{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, //8
{0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00}, //9
};
//数字字模指针
uchar col=0;
//第几个字符
uchar count=0;
//定时器定时次数
uchar time = 0;
//595串行输入的行数据
uchar d=0;
//8位数据从74HC595的串行输入,并行输出
void dat74595(unsigned char d)
{
unsigned char i;
for (i=0;i<8;i++) //8位数据串行输入
{
SCLK = 0;
DATA = (bit)(d&0x80);
SCLK = 1;
d=d<<1;
}
DATA = 1;
LOCK=0;LOCK=1; //8位数据并行输出
}
void main(void)
{
TMOD=0x01; //定时器0方式1
TH0=(65536-5000)/256; //设置定时计数初值,5ms
TL0=(65536-5000)%256;
TR0=1;
ET0=1; //打开定时器0中断
EA=1;
while(1);
}
/*定时器0中断服务程序,5ms中断一次,扫描一列*/
void Timer0Int(void) interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
switch(col) //列选通
{
case 0: hc138_C =0; hc138_B=0; hc138_A=0; // 选择第0列显示
break;
case 1: hc138_C =0; hc138_B=0; hc138_A=1; // 选择第1列显示
break;
case 2: hc138_C =0; hc138_B=1; hc138_A=0; // 选择第2列显示
break;
case 3: hc138_C =0; hc138_B=1; hc138_A=1; // 选择第3列显示
break;
case 4: hc138_C =1; hc138_B=0; hc138_A=0; // 选择第4列显示
break;
case 5: hc138_C =1; hc138_B=0; hc138_A=1; // 选择第5列显示
break;
case 6: hc138_C =1; hc138_B=1; hc138_A=0; // 选择第6列显示
break;
case 7: hc138_C =1; hc138_B=1; hc138_A=1; // 选择第7列显示
default: break;
}
d=shuzi[count][col]; //行,送数字字模
dat74595(d); //把数一位一位的传给74HC595
col++;
if(col==8)
{
col=0;
}
time++;
if (time >= 200) //定时200次,1s,每个数字显示1s
{
time = 0;
count++; //准备显示下一个数字
if (count >= 10)
{
count = 0;
}
}
}
复制代码
0.png
(44.81 KB, 下载次数: 66)
下载附件
2018-8-28 18:20 上传
所有资料51hei提供下载:
点阵.zip
(61.44 KB, 下载次数: 108)
2018-8-28 08:10 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1