原创 彬太郎51单片机开发板视频教程C语言版之8*8点阵

2011-3-24 09:07 4181 10 11 分类: MCU/ 嵌入式

attachment downloada39a86a1-5f24-4386-9111-68582412e387.jpg


467ec36b-9ecf-4691-84d6-7d08e4de5e9f.jpgc158df80-f023-48c6-bc57-5f5f3bd1d66f.jpg7da8e281-52fe-4b5e-a5b0-7c3dc641f0f7.jpg2655e96d-3eb0-4a17-baff-637d54c7c3b0.jpg


/***程序:点阵1***/
/***作者:爱因斯尼@SCUT***/
/***时间:2010.07.23***/
/***必要的头文件和宏定义***/
#include<reg52.h>//51单片机的头文件
#define uint unsigned int//两个常用的宏定义


#define uchar unsigned char
sbit DS=P1^0;//595串口数据输入端
sbit OE=P1^1;//使能端,低电平有效
sbit SH=P1^2;//移位寄存器的时钟输入
sbit ST=P1^3;//存储器的时钟输入
sbit duan=P1^5;//定义段选端
sbit wei=P1^6;//定义位选端
sbit lie=P1^7;//定义8*8点阵的列扫描
/*********带形参的延时子函数***************/


void delay(uint ms)
{
 uint i,j;
 for(i=0;i<ms;i++)
   for(j=0;j<1141;j++);
 }
/*********数码管的初始化函数***************/
void Init_smg()
{
 P0=0x00;
 duan=1;
 P0=0x00;//关段选端
 duan=0;


 P0=0xff;
 wei=1;
 P0=0xff;//关位选端
 wei=0;


 lie=1;
 P0=0xff;//点阵全灭
 lie=0;
 }


/***595串转并***/
void show_595(uchar num)
{
 uchar i,zf;
 P1=0x00;
 zf=num;
 for(i=0;i<8;i++)
 {
  if(zf&0x80)//从高位开始移位
    DS=1;
  else DS=0;
    SH=1;// 移位寄存器的上升沿时钟
    SH=0;
    zf<<=1;
  }
    ST=1;//存储器的上升沿时钟
    ST=0;
    OE=0;
 }
/*****主函数******/


void main()
{
 uchar i,num;
 
 Init_smg();
while(1)
{num=0x01;
for(i=0;i<8;i++)
 {
  show_595(num);
  lie=1;
  P0=~num;
  lie=0;
  delay(60);
  num<<=1;
  }
 }}


/***程序:点阵2***/
/***作者:爱因斯尼@SCUT***/
/***时间:2010.07.23***/
/***必要的头文件和宏定义***/
#include<reg52.h>//51单片机的头文件
#define uint unsigned int//两个常用的宏定义


#define uchar unsigned char
sbit DS=P1^0;//595串口数据输入端
sbit OE=P1^1;//使能端,低电平有效
sbit SH=P1^2;//移位寄存器的时钟输入
sbit ST=P1^3;//存储器的时钟输入
sbit duan=P1^5;//定义段选端
sbit wei=P1^6;//定义位选端
sbit lie=P1^7;//定义8*8点阵的列扫描
uchar code table_595[]={
0x48,0x29,0x19,0xF,0x19,0x29,0x48,0x0,//天
0x48,0x29,0x19,0xF,0x19,0x29,0x48,0x0,//天
0x88,0x49,0x29,0x1F,0x9,0xFF,0x9,0x8,//开
0x1E,0x3F,0x7F,0xFE,0xFE,0x7F,0x3F,0x1E//心形
};
uchar code table_lie[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//列的选通
/*********带形参的延时子函数***************/


void delay(uint ms)
{
 uint i,j;
 for(i=0;i<ms;i++)
   for(j=0;j<1141;j++);
 }
/*********数码管的初始化函数***************/
void Init_smg()
{
 P0=0x00;
 duan=1;
 P0=0x00;//关段选端
 duan=0;


 P0=0xff;
 wei=1;
 P0=0xff;//关位选端
 wei=0;


 lie=1;
 P0=0xff;//点阵全灭
 lie=0;
 }


/***595串转并***/
void show_595(uchar num)
{
 uchar i,zf;
 P1=0x00;
 zf=table_595[num];
 for(i=0;i<8;i++)
 {
  if(zf&0x80)//从高位开始移位
    DS=1;
  else DS=0;
    SH=1;// 移位寄存器的上升沿时钟
    SH=0;
    zf<<=1;
  }
    ST=1;//存储器的上升沿时钟
    ST=0;
    OE=0;
 }
/***点阵显示***/


void show_dianzhen()
{
uint i,j,shu;
for(j=1;j<5;j++)//4个字
{
for(shu=0;shu<600;shu++)//每个字显示的次数
{
for(i=(j-1)*8;i<(j-1)*8+8;i++)
 {
  show_595(i);
  lie=1;
  P0=table_lie[i%8];//取余,8列中的哪一列
  lie=0;
  }}
  lie=1;
  P0=0xff;
  lie=0;
  delay(60);
  }
 }


/*****主函数******/
void main()
{
 Init_smg();
 while(1)
 {
  show_dianzhen();
  }
 }


/***程序:点阵3***/
/***作者:爱因斯尼@SCUT***/
/***时间:2010.07.23***/
/***必要的头文件和宏定义***/
#include<reg52.h>//51单片机的头文件
#define uint unsigned int//两个常用的宏定义
#define uchar unsigned char


sbit DS=P1^0;//595串口数据输入端
sbit OE=P1^1;//使能端,低电平有效
sbit SH=P1^2;//移位寄存器的时钟输入
sbit ST=P1^3;//存储器的时钟输入
sbit duan=P1^5;//定义段选端
sbit wei=P1^6;//定义位选端
sbit lie=P1^7;//定义8*8点阵的列扫描
uchar code table_595[]={
0x7E,0x41,0x51,0x31,0x3E,0x41,0x41,0x3E,//GO
0x48,0x29,0x19,0xF,0x19,0x29,0x48,0x0,//天
0x00,0x00,
0x48,0x29,0x19,0xF,0x19,0x29,0x48,0x0,//天
0x00,0x00,
0x88,0x49,0x29,0x1F,0x9,0xFF,0x9,0x8,//开
0x00,0x00,
0x1E,0x3F,0x7F,0xFE,0xFE,0x7F,0x3F,0x1E,//心形
0x00,0x00,
0x7E,0x81,0xB5,0xB1,0xB1,0xB5,0x81,0x7E,//猪头
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00//空格
};
uchar code table_lie[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//列的选通
/*********带形参的延时子函数***************/


void delay(uint ms)
{
 uint i,j;
 for(i=0;i<ms;i++)
   for(j=0;j<1141;j++);
 }
/*********数码管的初始化函数***************/
void Init_smg()
{
 P0=0x00;
 duan=1;
 P0=0x00;//关段选端
 duan=0;


 P0=0xff;
 wei=1;
 P0=0xff;//关位选端
 wei=0;


 lie=1;
 P0=0xff;//点阵全灭
 lie=0;
 }


/***595串转并***/
void show_595(uchar num)
{
 uchar i,zf;
 P1=0x00;
 zf=table_595[num];
 for(i=0;i<8;i++)
 {
  if(zf&0x80)//从高位开始移位
    DS=1;
  else DS=0;
    SH=1;// 移位寄存器的上升沿时钟
    SH=0;
    zf<<=1;
  }
    ST=1;//存储器的上升沿时钟
    ST=0;
    OE=0;
 }
/***点阵显示***/


void show_dianzhen()
{
uint i,h,shu;
for(shu=0;shu<4000;shu++)//显示GO一段时间
{
for(i=0;i<8;i++)
 {
  show_595(i);
  lie=1;
  P0=table_lie[i%8];//取余,8列中的哪一列
  lie=0;
  }}


for(h=8;h<56;h++)//4个字    8*4=32行
{
for(shu=0;shu<200;shu++)//每个字显示的次数
{
for(i=0;i<8;i++)
 {
  show_595(i+h);
  lie=1;
  P0=table_lie;//取余,8列中的哪一列,左移
  lie=0;
  }}
  lie=1;
  P0=0xff;
  lie=0;
  delay(6);
  }
 }


/*****主函数******/
void main()
{
 Init_smg();
 while(1)
 {
  show_dianzhen();
  }
 }


欢迎光临我们的淘宝网店:http://item.taobao.com/auction/item_detail.htm?item_num_id=9447334857

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1618165 2011-4-23 14:21

太有用了,楼主给力
相关推荐阅读
用户302949 2011-10-22 22:32
磁珠及磁珠与电感的区别
磁珠及磁珠与电感的区别 (2011-3-25 08:49)一、磁珠的原理         磁珠的主要原料为铁氧体。铁氧体是一种立方晶格结构的亚铁磁性材料。铁氧体材料为铁镁合金或铁镍合金,它的制造工艺和...
用户302949 2011-09-29 00:50
用Altium Designer 6时遇到的几个问题及解决办法
用Altium Designer 6时遇到的几个问题及解决办法 /P> 1.烦人的坐标信息 在画PCB板时,鼠标上附带有烦人的坐标等信息,经过查询,找到了解决办法,用“SHIFT+H”可解决...
用户302949 2011-06-01 12:36
16*16点阵滚动显示汉字
/***程序:16*16点阵滚动显示汉字***//***作者:许彬***//***时间:2011.04.18***//***地点:华南理工大学***/ //程序说明//四个8*8点阵组成16*16//...
用户302949 2011-05-20 21:16
彬太郎51单片机开发板视频教程汇编语言版之可调节的电子时钟
;程序说明: ;显示的时间格式为:23-59-50,既,时-分-秒;按键说明:P2.4为时调节。P2.5为分调节。P2.6为秒调节。这三个按键均是每按一次加一。;晶振说明:12MHZ;数码管说明:共阴...
用户302949 2011-04-23 14:53
彬太郎51单片机开发板配套电子书视频下载
/****作者:爱因斯尼@SCUT*******时间:2010.08.29******说明:由于开发板学习程序难度逐渐加大,程序比较多和复杂,我在这里就不一一发表了。有需要的同学可以到以下地址下载配套...
用户302949 2011-04-22 12:07
彬太郎51单片机开发板视频教程之贪食蛇
attachment download//**程序:贪食蛇***//***说明:通过外部中断0可控制蛇的速度****//***游戏开始是点阵的测试,贪食蛇一开始身长2个点***//***开始闪烁的那个...
EE直播间
更多
我要评论
1
10
关闭 站长推荐上一条 /3 下一条