📄 show.lst
字号:
C51 COMPILER V6.12 SHOW 09/28/2009 16:41:42 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE SHOW
OBJECT MODULE PLACED IN .\show.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\show.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
2 // 功能描述: &
3 // 本程序为显示程序,上电后显示255 &
4 // 主要目的:熟悉硬件,以及不影响其它位的显示编程 &
5 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
6
7 //【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!
8 //【声明】 作者: PIAE小组
9
10 #include <reg52.h>
11 #include <intrins.h>
12
13 //对管脚分配进行了定义
14 //对子函数进行了声明
15
16 # define uchar unsigned char
17 # define uint unsigned int
18
19 # define NOPS {_nop_();_nop_();_nop_();_nop_();_nop_();}/*延时5us*/
20
21 //编码规则是hgfedcba ,h亦是dp,控制小数点,这里都设为1,不亮,eg:9==0b10010000;
22 uchar code led[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
23 uchar Show_Data = 0xff;//数码管要显示的数据
24
25 //IO 口分配
26 sbit LED_RED = P2^1;//红色指示灯,作为接收指示灯
27 sbit LED_GRE = P2^2;//绿色指示灯,作为发送指示灯
28 sbit SJA1000_CS = P2^0;//SJA1000片选管脚. 低电平有效
29
30 void Delay(uchar delay_time); //延时程序
31 void led_seg7(uchar from,uchar number); //数码管显示程序
32
33 void main(void)
34 {
35 1 _nop_();
36 1 while(1)
37 1 {
38 2 NOPS;
39 2 led_seg7(1,Show_Data);
40 2 LED_RED = !LED_RED;
41 2 LED_GRE = !LED_GRE;
42 2 }
43 1 }
44
45 //延时程序
46 void Delay(uchar delay_time)
47 {
48 1 while(delay_time--)
49 1 {}
50 1 }
51
52
53 //from(1_4):数码管显示起始位置(从右到左),number:显示的数
54 //eg: leg_seg7(2,7)
55 void led_seg7(uchar from,uchar number)
C51 COMPILER V6.12 SHOW 09/28/2009 16:41:42 PAGE 2
56 {
57 1 uchar digit,temp_l;
58 1 uchar temp_h=0x7f; //0b0111111
59 1 temp_h = _cror_(temp_h,from-1); //确定从哪一位开始显示,即确定高四位,
60 1 //假设从第一位开始,temp_h==0b10111111
61 1 temp_h = temp_h & 0xf0; //取高四位,temp_h==0b10110000
62 1 temp_l = P2 & 0x0f; //取P2的低四位(c51默认下都是高电平),temp_l==0b00001111
63 1 P2 = temp_h | temp_l; //设定P2口 P2==0b1011111|0b00001111
64 1 //P2==0b1011111,0xbf;
65 1
66 1 if(number==0) //如果number==0的话,立即发送0的数码管码
67 1 {
68 2 P0 = led[0];
69 2 Delay(10);
70 2 P0 = 0xff;
71 2 }
72 1 else
73 1 {
74 2 while(number) //如果数字式大于0,就永远死循环,eg:number==7
75 2 {
76 3 digit = number%10 ; //eg:digit=7%10,digit==7;
77 3 number /= 10; //eg:number=7/10,number==0;
78 3 P0 = led[digit] ; //送数码管码,eg:7亦是0xf8
79 3 Delay(10);
80 3 temp_h = P2 & 0xf0; //取P2的高四位,eg:temp_h=0=0b1011000;
81 3 temp_h = temp_h | 0x0f; //拼装 temp_h,进行位选,eg:temp_h==0b1011111
82 3 temp_h = _cror_(temp_h,1); //eg:temp_h==0b11011111;
83 3 temp_h = temp_h & 0xf0; //取高四位,eg:temp_h==0b11010000
84 3 temp_l = P2 & 0x0f; //取P2的低四位, eg:temp_l==0b101111&0b00001111,temp_l==0b00001111;
85 3 P0 = 0xff; //数码管清除
86 3 P2 = temp_h | temp_l; //设定P2口,eg:P2==0b11010000|0b00001111,P2==0b11011111;
87 3 }
88 2 }
89 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 126 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -