找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9920|回复: 0
打印 上一主题 下一主题
收起左侧

利用8*8点阵实现0-9的显示的单片机仿真与源程序

[复制链接]
跳转到指定楼层
楼主
附上实验结果的截图,完整电路图和程序在压缩包内

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. /*8x8LED显示从0到9数据 */
  2. #include <reg51.h>
  3. #define        uint        unsigned int
  4. #define        uchar        unsigned char

  5. //74HC595 行选
  6. sbit     LOCK  = P2^3;  //禁止输出
  7. sbit     SCLK  = P2^4;  //时钟引脚
  8. sbit     DATA  = P2^5;  //数据

  9. //74HC138  列选
  10. sbit    hc138_A   = P2^0;
  11. sbit    hc138_B   = P2^1;
  12. sbit    hc138_C   = P2^2;

  13. //数字字模,10个数字0~9,每个数字8个字节(纵向,正序)
  14. uchar code shuzi[10][8]=
  15.                                                   {
  16.                                                         {0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},          //0
  17.                                                     {0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00},         //1
  18.                                                         {0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00},         //2
  19.                                                         {0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00},         //3
  20.                                                         {0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00},         //4
  21.                                                         {0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00},         //5
  22.                                                         {0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00},         //6
  23.                                                         {0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00},         //7
  24.                                                         {0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00},         //8
  25.                                                         {0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00},         //9
  26.                                                   };


  27. //数字字模指针                                                                                                                                                                
  28. uchar col=0;

  29. //第几个字符           
  30. uchar count=0;

  31. //定时器定时次数               
  32. uchar time = 0;                                                                

  33. //595串行输入的行数据
  34. uchar d=0;

  35. //8位数据从74HC595的串行输入,并行输出
  36. void   dat74595(unsigned char d)
  37. {
  38.    unsigned char i;
  39.    for (i=0;i<8;i++)        //8位数据串行输入
  40.    {
  41.     SCLK = 0;
  42.     DATA = (bit)(d&0x80);
  43.     SCLK = 1;                 
  44.     d=d<<1;
  45.    }
  46.    DATA = 1;
  47.    LOCK=0;LOCK=1;                //8位数据并行输出
  48. }

  49. void main(void)
  50. {         
  51.         TMOD=0x01;                                                     //定时器0方式1
  52.         TH0=(65536-5000)/256;                                     //设置定时计数初值,5ms
  53.         TL0=(65536-5000)%256;
  54.           TR0=1;
  55.           ET0=1;                                                  //打开定时器0中断
  56.           EA=1;

  57.           while(1);
  58. }


  59. /*定时器0中断服务程序,5ms中断一次,扫描一列*/
  60. void Timer0Int(void) interrupt 1
  61. {       
  62.         TH0=(65536-5000)/256;      
  63.           TL0=(65536-5000)%256;
  64.   
  65.           switch(col)  //列选通
  66.    {
  67.       case 0:  hc138_C =0;  hc138_B=0;  hc138_A=0;  // 选择第0列显示
  68.                break;                              
  69.       case 1:  hc138_C =0;  hc138_B=0;  hc138_A=1;  // 选择第1列显示
  70.                       break;
  71.       case 2:  hc138_C =0;  hc138_B=1;  hc138_A=0;   // 选择第2列显示
  72.                    break;
  73.       case 3:  hc138_C =0;  hc138_B=1;  hc138_A=1;   // 选择第3列显示
  74.                          break;
  75.       case 4:  hc138_C =1;  hc138_B=0;  hc138_A=0;   // 选择第4列显示
  76.                          break;
  77.       case 5:  hc138_C =1;  hc138_B=0;  hc138_A=1;   // 选择第5列显示
  78.                          break;
  79.       case 6:  hc138_C =1;  hc138_B=1;  hc138_A=0;   // 选择第6列显示
  80.                          break;
  81.       case 7:  hc138_C =1;  hc138_B=1;  hc138_A=1;   // 选择第7列显示

  82.       default:   break;
  83.         }

  84.         d=shuzi[count][col];           //行,送数字字模
  85.     dat74595(d);                       //把数一位一位的传给74HC595
  86.           col++;
  87.           if(col==8)
  88.         {
  89.                 col=0;
  90.         }
  91.          
  92.         time++;
  93.         if (time >= 200)                                        //定时200次,1s,每个数字显示1s
  94.         {
  95.                 time = 0;

  96.                 count++;                                                //准备显示下一个数字
  97.                 if (count >= 10)
  98.                 {
  99.                         count = 0;
  100.                 }
  101.         }
  102. }
复制代码


所有资料51hei提供下载:
点阵.zip (61.44 KB, 下载次数: 108)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶1 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表