完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
LED点阵
点阵原理
#include #define LedH P0 //用P0口控制行 #define LedL P1 //用P1口控制列 void main() { while(1) { LedH=0x01; //只让第一个LED导通 LedL=0xfe; } } 显示图形
程序 #include #define LedH P0 #define LedL P1 unsigned char code wei[8]= {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned char code duan[8]= {0x1C,0x3E,0x7E,0xFC,0xFC,0x7E,0x3E,0x1C}; void main() { unsigned char i; while(1) { for(i=0;i<8;i++) { LedL=0xff; //消影 LedH=duan; LedL=~wei; } } }
HC595芯片
#include "intrins.h" #define uchar unsigned char //对数据类型进行声明定义 ***it SRCLK = P3^6; //定义IO口,看开发板的原理图 ***it RCLK1 = P3^5; ***it SER = P3^4; void HC595(uchar dat1) //595芯片驱动程序,,这是传一个,要穿两个可以加一个dat2 { uchar a; SRCLK = 1; RCLK1 = 1; for(a=0;a<8;a++) //发送8位数 { SER=dat1>>7; //从最高位开始发送 dat1<<=1; SRCLK=0; //发送时序 _nop_(); _nop_(); SRCLK=1; } RCLK1=0; _nop_(); _nop_(); RCLK1=1; }
{ {1,2,3}, {4,5,6} }; 或者是
unsigned char a[2][3] = 反过来 等价于 最终程序 #include #include "intrins.h" #define uchar unsigned char uchar code imagewei[8]= { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 }; uchar code imageduan[11][8]= { {0x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00}, //3 {0x00,0x00,0xE4,0xA2,0xA2,0xA2,0x9C,0x00}, //2 {0x00,0x00,0x88,0x84,0xFE,0x80,0x80,0x00}, //1 {0x00,0xC3,0xC3,0xFF,0xFF,0xC3,0xC3,0x00}, //i {0x1C,0x3E,0x7E,0xFC,0xFC,0x7E,0x3E,0x1C}, //心 {0x00,0x7F,0xFF,0xC0,0xC0,0xFF,0x7F,0x00}, //u {0x00,0x18,0x3C,0x78,0x78,0x3C,0x18,0x00}, //小心 {0x1C,0x3E,0x7E,0xFC,0xFC,0x7E,0x3E,0x1C}, //中心 {0x3E,0x7F,0xFF,0xFE,0xFE,0xFF,0x7F,0x3E}, //大 // {0x1C,0x3E,0x7E,0xFC,0xFC,0x7E,0x3E,0x1C}, //中心 {0x00,0x18,0x3C,0x78,0x78,0x3C,0x18,0x00}, //缩小 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //全灭 }; ***it SRCLK = P3^6; ***it RCLK1 = P3^5; ***it SER = P3^4; void HC595(uchar dat1,uchar dat2) //595芯片驱动程序,直接拿上面的来用,修改一下 { uchar a; SRCLK = 1; RCLK1 = 1; for(a=0;a<8;a++) { SER=dat1>>7; dat1<<=1; SRCLK=0; _nop_(); _nop_(); SRCLK=1; } for(a=0;a<8;a++) //传输的第二个数据 { SER=dat2>>7; dat2<<=1; SRCLK=0; _nop_(); _nop_(); SRCLK=1; } RCLK1=0; _nop_(); _nop_(); RCLK1=1; } void main() { int k,x,y; uchar j; uchar i; y=0; while(1) { if(j<6) {x=200;} //让前面321倒计时切换慢点 else {x=60;} //让后面心跳快点 for(k=0;k for(i=0;i<8;i++) //扫描 { HC595(~imagewei,imageduan[j]); } } j++; if(j==11) //单独循环7次后面的心跳 { j=7; y++; } if(y==7) //单独循环完后重新开始 { j=0; y=0; } } } 最终效果展示 啦~最终效果就完成啦 是不是看起来还可以,工科直男也有浪漫的好吧,我们不需要什么玫瑰花,不需要什么礼物,我们玩的高科技,玩的是技术,不开玩笑了,收工~
|
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 06:38 , Processed in 0.835683 second(s), Total 48, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号