B站普中51单片机代码自敲打(一)

单片机扩展74HC165

 1 #include <REGX52.H>
 2 #include <INTRINS.H>
 3 
 4 typedef unsigned int u16;
 5 typedef unsigned char u8;
 6 
 7 #define LED P0
 8 
 9 sbit IN_PL = P1^6;
10 sbit IN_DATA = P1^7;
11 sbit SCK = P3^6;
12 
13 
14                     
15 u8 Read74HC165()
16 {
17     u8 indata;
18     u8 i;
19     
20     IN_PL = 0;
21     _nop_();
22     IN_PL = 1;
23     _nop_();
24     
25     indata = 0;
26     for(i = 0; i < 8; i++)
27     {
28         indata = indata << 1;
29         SCK = 0;
30         _nop_();
31         
32         indata |= IN_DATA;
33         SCK = 1;
34     }
35     return indata;
36 }
37 
38 void main()
39 {
40     u8 h165Value;
41     LED = 0;
42     while(1)
43     {
44         h165Value = Read74HC165();
45         if(h165Value != 0XFF)
46         {
47             LED = ~h165Value; 
48         }
49     }
50 }

 

 单片机扩展74HC595

 1 #include <REGX52.H>
 2 #include <INTRINS.H>
 3 
 4 typedef unsigned int u16;
 5 typedef unsigned char u8;
 6 
 7 #define LED = P0
 8 
 9 sbit RCLK1 = P3^5;
10 sbit SRCLK = P3^6;
11 sbit SER = P3^4;
12 
13 
14 void HC595SendByte(u8 dat)
15 {
16     u8 i;
17     for(i = 0; i < 8; i++)
18     {
19         SER = dat>>7;
20         dat <<= 1;
21         
22         SRCLK = 0;
23         _nop_();
24         _nop_();
25         SRCLK = 1;
26     }
27         RCLK1 = 0;
28         _nop_();
29         _nop_();
30         RCLK1 = 1;
31 }
32 
33 void delay(u16 i)
34 {
35     while(i--);
36 }
37 
38 void main()
39 {
40     u8 LedNum;
41     LedNum = 0X01;
42     
43     while(1)
44     {
45         HC595SendByte(LedNum);
46         LedNum = _crol_(LedNum,1);
47         delay(50000);
48     }
49 }

 LED点阵(亮一个点)

 1 #include <REGX52.H>
 2 #include <INTRINS.H>
 3 
 4 typedef unsigned int u16;
 5 typedef unsigned char u8;
 6 
 7 sbit SER = P3^4;
 8 sbit RCLK1 = P3^5;
 9 sbit SRCLK = P3^6;
10 
11 void HC595SendByte(u8 dat1, u8 dat2, u8 dat3, u8 dat4)
12 {
13     u8 a;
14     SRCLK = 1;
15     RCLK1 = 1;
16     for(a = 0; a < 8; a++)
17     {
18         SER = dat1 >> 7;
19         dat1 <<= 1;
20         
21         SRCLK = 0;
22         _nop_();
23         _nop_();
24         SRCLK = 1;
25     }
26     
27     for(a = 0; a < 8; a++)
28     {
29         SER = dat2 >> 7;
30         dat2 <<= 1;
31         
32         SRCLK = 0;
33         _nop_();
34         _nop_();
35         SRCLK = 1;
36     }
37     
38     for(a = 0; a < 8; a++)
39     {
40         SER = dat3 >> 7;
41         dat3 <<= 1;
42         
43         SRCLK = 0;
44         _nop_();
45         _nop_();
46         SRCLK = 1;
47     }
48     
49     for(a = 0; a < 8; a++)
50     {
51         SER = dat4 >> 7;
52         dat4 <<= 1;
53         
54         SRCLK = 0;
55         _nop_();
56         _nop_();
57         SRCLK = 1;
58     }
59         RCLK1 = 0;
60         _nop_();
61         _nop_();
62         RCLK1 = 1;
63 }
64 
65 
66 void main()
67 {
68     HC595SendByte(0xFF,0XFE,0x00,0x01);
69     while(1);
70 }

 

LED点阵(点亮一个汉字)

 1 #include <REGX52.H>
 2 #include <INTRINS.H>
 3 
 4 typedef unsigned int u16;
 5 typedef unsigned char u8;
 6 
 7 sbit SER = P3^4;
 8 sbit RCLK1 = P3^5;
 9 sbit SRCLK = P3^6;
10 
11 u8 code ledwei[] =
12 {
13     0x00,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
14     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,0x00,
15 };
16 
17 u8 code ledduan[] = 
18 {
19     /*--  文字:  囧  --*/
20     /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
21     0x00,0xFE,0x82,0x42,0x22,0x1A,0x02,0x02,0x02,0x0A,0x12,0x62,0x02,0xFE,0x00,0x00,
22     0x00,0xFF,0x40,0x40,0x40,0x7F,0x41,0x41,0x41,0x7F,0x40,0x40,0x40,0xFF,0x00,0x00,
23 };
24 
25 void delay(u16 i)
26 {
27     while(i--);
28 }
29 void HC595SendByte(u8 dat1, u8 dat2, u8 dat3, u8 dat4)
30 {
31     u8 a;
32     SRCLK = 1;
33     RCLK1 = 1;
34     for(a = 0; a < 8; a++)
35     {
36         SER = dat1 >> 7;
37         dat1 <<= 1;
38         
39         SRCLK = 0;
40         _nop_();
41         _nop_();
42         SRCLK = 1;
43     }
44     
45     for(a = 0; a < 8; a++)
46     {
47         SER = dat2 >> 7;
48         dat2 <<= 1;
49         
50         SRCLK = 0;
51         _nop_();
52         _nop_();
53         SRCLK = 1;
54     }
55     
56     for(a = 0; a < 8; a++)
57     {
58         SER = dat3 >> 7;
59         dat3 <<= 1;
60         
61         SRCLK = 0;
62         _nop_();
63         _nop_();
64         SRCLK = 1;
65     }
66     
67     for(a = 0; a < 8; a++)
68     {
69         SER = dat4 >> 7;
70         dat4 <<= 1;
71         
72         SRCLK = 0;
73         _nop_();
74         _nop_();
75         SRCLK = 1;
76     }
77         RCLK1 = 0;
78         _nop_();
79         _nop_();
80         RCLK1 = 1;
81 }
82 
83 
84 void main()
85 {
86     u8 i;
87     while(1)
88     {
89         for(i = 0; i < 16; i++)
90         {
91             HC595SendByte(~ledwei[i+16],~ledwei[i],ledduan[16+i],ledduan[i]);
92             delay(10);
93         }
94     }    
95 }

 

posted @ 2020-09-12 17:09  阿雷Sun  阅读(608)  评论(0)    收藏  举报