📄 点阵流动广告模拟.lst
字号:
C51 COMPILER V7.06 _阏罅鱛__鉥_腳拟 06/16/2010 18:19:58 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE _阏罅鱛__鉥_腳拟
OBJECT MODULE PLACED IN .\obj\点阵流动广告模拟.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 点阵流动广告模拟.c BROWSE DEBUG OBJECTEXTEND PRINT(.\obj\点阵流动广告模拟.l
-st) OBJECT(.\obj\点阵流动广告模拟.obj)
stmt level source
1 /*-----------------------------------------------
2 名称:双色点阵
3 论坛:www.doflye.net
4 编写:shifang
5 修改:无
6 内容:使用hc595驱动双色点阵
7 ------------------------------------------------*/
8 #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
9 #include <intrins.h>
10
11
12 unsigned char segout[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //8列
13 unsigned char code tab[]={
14 0x00,0x38,0x04,0x38,0x04,0x38,0x00,0x00, // w
15 0x00,0x38,0x04,0x38,0x04,0x38,0x00,0x00, // w
16 0x00,0x38,0x04,0x38,0x04,0x38,0x00,0x00, // w
17 0x00,0x06,0x06,0x00,0x00,0x00,0x00,0x00, // .
18 0x00,0x00,0x0C,0x12,0x12,0x7E,0x00,0x00, // d
19 0x00,0x00,0x1C,0x22,0x22,0x1C,0x00,0x00, // o
20 0x00,0x10,0x3E,0x50,0x40,0x00,0x00,0x00, // f
21 0x00,0x00,0x00,0x7E,0x02,0x04,0x00,0x00, // l
22 0x00,0x00,0x71,0x09,0x09,0x7E,0x00,0x00, // y
23 0x00,0x00,0x3C,0x52,0x52,0x32,0x00,0x00, // e
24 0x00,0x06,0x06,0x00,0x00,0x00,0x00,0x00, // .
25 0x00,0x00,0x1C,0x22,0x22,0x22,0x00,0x00, // c
26 0x00,0x00,0x1C,0x22,0x22,0x1C,0x00,0x00, // o
27 0x00,0x00,0x1E,0x20,0x3E,0x20,0x1E,0x00, // m
28 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 // 空格
29 };
30 /*------------------------------------------------
31 硬件端口定义
32 ------------------------------------------------*/
33 sbit LATCH = P1^0;
34 sbit SRCLK= P1^1;
35 sbit SER = P1^2;
36
37
38 sbit LATCH_B = P2^2;
39 sbit SRCLK_B= P2^1;
40 sbit SER_B= P2^0;
41
42
43 /*------------------------------------------------
44 uS延时函数,含有输入参数 unsigned char t,无返回值
45 unsigned char 是定义无符号字符变量,其值的范围是
46 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
47 长度如下 T=tx2+5 uS
48 ------------------------------------------------*/
49 void DelayUs2x(unsigned char t)
50 {
51 1 while(--t);
52 1 }
53 /*------------------------------------------------
54 mS延时函数,含有输入参数 unsigned char t,无返回值
C51 COMPILER V7.06 _阏罅鱛__鉥_腳拟 06/16/2010 18:19:58 PAGE 2
55 unsigned char 是定义无符号字符变量,其值的范围是
56 0~255 这里使用晶振12M,精确延时请使用汇编
57 ------------------------------------------------*/
58 void DelayMs(unsigned char t)
59 {
60 1
61 1 while(t--)
62 1 {
63 2 //大致延时1mS
64 2 DelayUs2x(245);
65 2 DelayUs2x(245);
66 2 }
67 1 }
68 /*------------------------------------------------
69 发送字节程序
70 带有方向参数,可以选择从高位节写入或者低位写入
71 ------------------------------------------------*/
72 void SendByte(unsigned char dat,bit direction)
73 {
74 1 unsigned char i,temp;
75 1 if(direction==0)
76 1 temp=0x80;
77 1 else
78 1 temp=0x01;
79 1
80 1 for(i=0;i<8;i++)
81 1 {
82 2 SRCLK=0;
83 2 SER=dat&temp;
84 2 if(direction==0)
85 2 dat<<=1;
86 2 else
87 2 dat>>=1;
88 2 SRCLK=1;
89 2 }
90 1
91 1 }
92 /*------------------------------------------------
93 发送双字节程序
94 ------------------------------------------------*/
95 void Send2Byte(unsigned char dat1,unsigned char dat2,bit direction)
96 {
97 1 SendByte(dat1,direction);
98 1 SendByte(dat2,direction);
99 1 }
100 /*------------------------------------------------
101 595锁存程序
102 ------------------------------------------------*/
103 void Out595(void)
104 {
105 1 LATCH=0;
106 1 _nop_();
107 1 LATCH=1;
108 1 }
109
110 /*------------------------------------------------
111 发送位码字节程序
112 使用另外一片单独595
113 ------------------------------------------------*/
114 void SendSeg(unsigned char dat)
115 {
116 1 unsigned char i;
C51 COMPILER V7.06 _阏罅鱛__鉥_腳拟 06/16/2010 18:19:58 PAGE 3
117 1
118 1 for(i=0;i<8;i++) //发送字节
119 1 {
120 2 SRCLK_B=0;
121 2 SER_B=dat&0x80;
122 2 dat<<=1;
123 2 SRCLK_B=1;
124 2 }
125 1 LATCH_B=0; //锁存
126 1 _nop_();
127 1 LATCH_B=1;
128 1
129 1 }
130 /*------------------------------------------------
131 主程序
132 ------------------------------------------------*/
133 void main()
134 {
135 1 unsigned char i,k,l;
136 1 while(1)
137 1 {
138 2
139 2
140 2 for(k=0;k<=112;k++) //所有的字符个数
141 2 for(l=20;l>0;l--) //延时长度,改变此值可以改变流动速度
142 2 for(i=0;i<=7;i++) //8列显示
143 2 {
144 3 SendSeg(segout[7-i]);
145 3 Send2Byte(~(*(tab+i+k)),0xff,1); //写入字节方向改变
146 3 Out595();
147 3 DelayMs(1);
148 3 Send2Byte(0xff,0xff,0);//delay(10); //防止重影
149 3 Out595();
150 3 }
151 2 }
152 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 191 ----
CONSTANT SIZE = 120 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -