找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3269|回复: 13
收起左侧

求各位大佬帮帮小弟啦 3个单片机问题

  [复制链接]
ID:226695 发表于 2017-8-11 09:27 | 显示全部楼层 |阅读模式
C求各位大佬帮帮小弟啦~


现在我有三个问题:
1.如何用AT89c52控制三个led小灯用不同频率闪烁?我用定时器只能做到两个,第三个定时器我不会开

2.如何用AT89C52做一个按键控制LED1602A显示的程序,这个我是纯小白,学的时间太短了。。
3.程序我烧到单片机里后,如何和三个led小灯连接到一起才不会吧单片机烧掉。。。




感谢各位大佬!!!
回复

使用道具 举报

ID:123289 发表于 2017-8-11 10:16 | 显示全部楼层
太浪费资源了,一个定时器就可以搞定了
回复

使用道具 举报

ID:226695 发表于 2017-8-11 14:13 | 显示全部楼层
yzwzfyz 发表于 2017-8-11 10:16
太浪费资源了,一个定时器就可以搞定了

大佬可不可以详细地说一下呢~
我是新手,搞不太懂
回复

使用道具 举报

ID:227013 发表于 2017-8-11 17:15 | 显示全部楼层
你可以调PWM
回复

使用道具 举报

ID:190832 发表于 2017-8-11 17:56 | 显示全部楼层
只用一个定时器计数,再来三个变量每次计数器满了就加一,三个变量达到设定数值(三个设定数值由你的频率决定)就切换灯的状态。第二个问题写好1602的驱动,根据按键显示值。第三个用三极管,单片机IO口接基极。
回复

使用道具 举报

ID:227034 发表于 2017-8-11 18:01 | 显示全部楼层
 太浪费资源了,一个定时器就可以搞定了
回复

使用道具 举报

ID:227034 发表于 2017-8-11 18:01 | 显示全部楼层
第三个用三极管,单片机IO口接基极
回复

使用道具 举报

ID:111634 发表于 2017-8-11 19:43 | 显示全部楼层
一个定时器就可以
回复

使用道具 举报

ID:190832 发表于 2017-8-12 22:02 | 显示全部楼层
看我以前传的51自学笔记,里面有1602例程,我自己写的。http://www.51hei.com/bbs/dpj-85237-1.html
回复

使用道具 举报

ID:205934 发表于 2017-8-12 22:29 | 显示全部楼层
用一个定时器,每0.1毫秒加一,对三个小灯设定一个值,用if函数控制,低于相应的值就高电平,超过就低电平。
回复

使用道具 举报

ID:78850 发表于 2017-8-12 22:59 | 显示全部楼层
开一个定时器,每10毫秒三个小灯的计数值累加一次,然后判断计数值,到了阈值就变化一次(亮灭)
回复

使用道具 举报

ID:217089 发表于 2017-8-12 23:38 | 显示全部楼层
论坛大神多,帮你顶帖等待。
回复

使用道具 举报

ID:47286 发表于 2017-8-12 23:48 | 显示全部楼层
1. 楼上前辈都回答了 同上
2. 网上有很多手把手的教材 你下一个跟着做就行了 我就是这么学的
3. 简单的可以从vcc分别串联3个电阻到3个led 每个10K 这样一个led的电流也就几毫安 三个一起也不会烧片子 复杂一点的就要加驱动 用三极管 mosfet或者2303都可以
回复

使用道具 举报

ID:218870 发表于 2017-8-13 05:53 | 显示全部楼层
//液晶1602(带字库)显示测试程序// #include<reg51.h> #define uint unsigned int #define uchar unsigned char        //宏定义 uchar code table[]=" LU LIE QI "; uchar code table1[]="WWW.LAOWANG.COM"; sbit LCD_RS=P2^6;          //位定义 sbit LCD_RW=P2^5; sbit LCD_EN=P2^7; uchar num;           //定义全局变量 //延时程序===1ms// void delay_1ms(uint mas) {         uint i,j;         for(i=0;i<mas;i++)         for(j=0;j<110;j++); } void write_com(uchar com)  //  写命令 {         LCD_RS=0;         LCD_RW=0;         P0=com;         delay_1ms(5);         LCD_EN=1;         delay_1ms(5);         LCD_EN=0; } void write_data(uchar dadt) //写数据 {         LCD_RS=1;         P0=dadt;         delay_1ms(5);         LCD_EN=1;         delay_1ms(5);         LCD_EN=0;  } void init()  //初始化函数 {         LCD_EN=0;         write_com(0x38);        //显示模式设置16X2,5X7点阵,8位数据口         write_com(0x0f);        //开显示、开关标、关标闪烁         write_com(0x06);        //关标加一         write_com(0x01);        //清屏         write_com(0x80+0x10);        //数据指针位置         } //=====主函数======// void main() {         init();                  for(num=0;num<10;num++)         {                         write_data(table[num]);                         delay_1ms(20);                                          }         write_com(0x80+0x50);         for(num=0;num<15;num++)         {                         write_data(table1[num]);                         delay_1ms(20);                                          }         for(num=0;num<16;num++)         {                 write_com(0x18);                 delay_1ms(500);                 }         while(1); }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表