完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
利用单片机 AT89C51 的 I/O 口,对 LED 和数码管分别进行控制。以实现 LED灯做流水运动,数码管显示所亮 LED 的位置。
使用74LS373可以节省I/O口 74LS373简介: 74LS373是三态输出的八D锁存器,共有54S373和74LS373两种线路。373 的输出端 Q0~Q7 可直接与总线相连。当锁存允许端LE为高电平时,Q 随数据D而变,当LE为低电平时,D 被锁存在已建立的数据电平。 电路原理图: 代码如下: #include"reg51.h" #define LED P1 #define SM P0 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; ***it P25=P2^5; ***it P26=P2^6; ***it P27=P2^7; u8 i,coun=0; void InitTimer0(void); //共阴极数码管数字显示表 unsigned char tab[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}; // 对应显示 1 2 3 4 5 6 7 8 //数码管选择 unsigned char XZ[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void delay(u16 i) { while(i--); } void main() { InitTimer0(); LED=0xfe; //delay(50000); //延时 P25=1; P26=1; //数码管读取工作 P27=0; //数码管选择关闭 while(1) { for(i=0;i<8;i++) { P1=~(0x01< delay(50000); //延时 50000 450ms } } } void InitTimer0(void) { TMOD = 0x01; //T0计时器,方式一 TH0 = 0x50;//定时45ms TL0 = 0x38; EA = 1; ET0 = 1; TR0 = 1; } void Timer0Interrupt(void) interrupt 1 { TH0 = 0x50;//定时45ms TL0 = 0x38; P26=1; P27=0; SM=tab; //数码管读取赋值 P26=0; //数码管读取锁存 SM=0xff; //消影 P27=1; //数码管选择工作 SM = XZ; //选择数码管 P27=0; //数码管选择停止 SM=tab; } 效果截图: |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2956 浏览 16 评论
3458 浏览 1 评论
9002 浏览 16 评论
4051 浏览 18 评论
1112浏览 3评论
573浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
570浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2303浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1859浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 01:11 , Processed in 1.191722 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号