LC教你单片机简单程序
dr.lc2012/12/08电子技术 IP:陕西
LC什么都不想说了。。。
就是想标题一样。。
LC不想讲什么C语言基础了。。。
直接给出程序,将就着看吧。。。
看不懂的就看看书,还看不懂的再看一遍书。。
实在不懂再问LC。。。
LC也正在学习,有可能还会在本贴更新过程中提出一些问题。。。

LC争取日日更新。。。
也希望大家能够支持一下。。
谢谢各位捧场了。。[s:217] [s:217]
来自:电子信息 / 电子技术
25
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
dr.lc 作者
12年2个月前 IP:未同步
477089
先带来8LED流水灯程序。。
主要练习位操作和一些基本的C语句


#include<STC12C5A60S2.H>//定义头文件,介绍本程序给谁看

#define lc_led P1//定义P1,给P1起个好听的昵称

void delay(unsigned int j)//毫秒级延迟函数,小弟函数,帮助我们进行延时
{
    unsigned int k;
    while(--j!=0)
    {
        for(k=0;k<600;k++);//延时部分,让单片机从1加到600
    }
}

void main(void)//主函数,大哥级别的函数
{

    unsigned int i;//定义无符号整形变量,作为循环变量
  while(1)//无限循环
  {
    lc_led=0x7f;//8个LED依次全部点亮
    for(i=0;i<8;i++)
    {
        delay(500);
        lc_led>>=1;
    }
    lc_led=0x01;//8个LED依此熄灭闪动
    for(i=0;i<8;i++)
    {
        delay(500);
        lc_led<<=1;
    }
    lc_led=0x80;//8个LED依次全部熄灭
    for(i=0;i<8;i++)
    {
        delay(500);
        lc_led>>=1;
        lc_led=lc_led|0x80;
    }
    lc_led=0x80;//8个LED依次点亮闪动
    for(i=0;i<8;i++)
    {
        lc_led=~lc_led;
        delay(500);
        lc_led=~lc_led;
        lc_led>>=1;
    }
    lc_led=0xfe;
    for(i=0;i<8;i++)
    {
        delay(500);
        lc_led<<=1;
    }
    lc_led=0x80;
    for(i=0;i<8;i++)
    {
        delay(500);
        lc_led>>=1;
    }    
    lc_led=0x01;
    for(i=0;i<8;i++)
    {
        delay(500);
        lc_led<<=1;
        lc_led=lc_led|0x01;
    }
    lc_led=0x01;
    for(i=0;i<8;i++)
    {
        lc_led=~lc_led;
        delay(500);
        lc_led=~lc_led;
        lc_led<<=1;
    }
  }
}

什么什么?
文字看不清??
行!
LC有截图!
程序1.jpg
程序2.jpg
程序3.jpg

今天就这么多,下面LC宣布,自由讨论可以开始了!
+3
科创币
hx
2012-12-08
+1
科创币
wenrui
2012-12-08
大哥函数和小弟函数是杜洋&lt;爱上单片机&gt;里的吧
+1
科创币
leeqingyang
2012-12-08
lc_led………………………………………………………………
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
woowoowoowo
12年2个月前 IP:未同步
477128
unsigned int i;//定义无符号整形变量,作为循环变量
  while(1)//无限循环
  {
    lc_led=0x7f;// 01111111,只有最左边的灯亮
    for(i=0;i<8;i++) //  循环8次
    {
        delay(500); //延迟
        lc_led>>=1; //左移的意思吗
    }
+1
科创币
dr.lc
2012-12-08
事实上,是右移。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
tromso
12年2个月前 IP:未同步
477134
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
tromso
12年2个月前 IP:未同步
477136
这个好像精简点 ,
+1
科创币
dr.lc
2012-12-08
感觉一样呃。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
rudolf
12年2个月前 IP:未同步
477150
大学虽然上过C++的课程,但是表示完全看不懂程序……
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
tromso
12年2个月前 IP:未同步
477221
既然来的人那么少, 我就再来个花样灯的吧,(借用的,)
+1
科创币
dr.lc
2012-12-08
啊!!! 讨厌!!! LC刚写完查表花样灯。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
tromso
12年2个月前 IP:未同步
477363
啊,,,,,呵呵, 你还需要什么程序..我给你提供..
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dr.lc作者
12年2个月前 IP:未同步
477392
回 7楼(y363300158) 的帖子
那帮忙整个调脉宽的子函数么。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dr.lc作者
12年2个月前 IP:未同步
477452
虽然饭碗被LS抢了。。。
但LC做完的东西还是要发上来。。。
LC的原则就是饭不能烂在锅里。。。

这个是查表式花样灯。。
写了两个数组,主要是让新手们熟悉一下数组。。。
二维数组,可以去LC的光立方程序里面找找(LC印象中写了这么一段程序。。)



#include<STC12C5A60S2.H>

#define lc_led P1
unsigned char code doublelights1 [16]=//定义数组,把我们要用的IO状态存在数组这个大盒子里面,即用即取
{
    0xff,0xfe,0xfd,0xfa,0xf5,0xea,0xd5,0xaa,0x55,0xab,0x57,0xaf,0x5f,0xbf,0x7f,0xff
};
unsigned char code doublelights2 [10]=
{
    0xff,0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e,0xff
};

void delay(unsigned int i)
{
    unsigned int j;
    while(--i!=0)
    {
        for(j=0;j<600;j++);
    }
}

void main(void)
{
    unsigned int k;
    while(1)
    {
        for(k=0;k<16;k++)
        {
            lc_led=doublelights1[k];//选取数组大盒子里面的第k个数值(从0计数)
            delay(500);
        }
        for(k=0;k<10;k++)
        {
            lc_led=doublelights2[k];
            delay(500);
        }
        for(k=0;k<16;k++)
        {
            lc_led=doublelights1[15-k];
            delay(500);
        }
        for(k=0;k<10;k++)
        {
            lc_led=doublelights2[k];
            delay(500);
        }
    }
}

按照传统,截图来了!
程序1.jpg
程序2.jpg

今天就这样。。
LC明天还有好多事。。
睡觉去了。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
hitxp
12年2个月前 IP:未同步
477483
#include "REG51.H"

unsigned char led[34]={ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                        0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00,
                        0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,
                        0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
unsigned char i,j;

void init(void)
{
    IE=0X82;
    TCON=0X10;
    TMOD=0X01;
    TH0=0x3c;
    TL0=0xb0;
}

void timer0(void)  interrupt 1
{
    int k;
    k++;
    TH0=0x3c;
    TL0=0xb0;
    
    if(k==1)
    {
        k = 0;
        j++;
           if(j==24)
        {
            j = 0;
        }
    }
}

void main(void)
{
       init();
    while(1)
    {
         for(i = 0;i < 8;i++)
        {
            P0 = led[i+j];
        }
  
    }
}
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
tromso
12年2个月前 IP:未同步
477595
PWM脉宽调制亮度,
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
tromso
12年2个月前 IP:未同步
477598
[s:266]我可没抢你饭碗....
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dr.lc作者
12年2个月前 IP:未同步
477601
回 11楼(y363300158) 的帖子
。。。谢了啊。。。
我去看看怎么封装一下,做个子函数。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
tromso
12年2个月前 IP:未同步
477619
你的说, 你要照搬 . 可是一定要用子函数么 ?
照搬的话我也不知道你具体电路是什么样的,
先给你提供下系函数的示例吧
void delay(uint z)
{    
       uint x;    
       for(;z>0;z--)    
       for(x=100;x>0;x--);
}
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dr.lc作者
12年2个月前 IP:未同步
477621
回 14楼(y363300158) 的帖子
。。。delay函数。。。
这个需要提供么。。。
去上课了。。
想想怎么弄。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dr.lc作者
12年2个月前 IP:未同步
477902
回 14楼(y363300158) 的帖子
做了个脉宽调制的封装子函数。。
LC自己觉得还算挺好用的。。。
就是有些粗糙。。。
延时函数方面很不方便。。

#include<STC12C5A60S2.H>

#define lc_led P1

/*******************************************************
100us延时子函数
*******************************************************/
void delay_100us(unsigned int i)
{
    unsigned int j;
    while(--i!=0)
    {
        for(j=0;j<60;j++);
    }
}

/********************************************************
                 脉宽调制子函数
输入P1口状态,以及输出高电平时间所占比例(即亮度,0~100的
正整数)
********************************************************/
void bright(unsigned char lc_light,unsigned int lc_bright)
{
    while(lc_bright--!=0)
    {
        lc_led=lc_light;
        delay_100us(1);
    }
    lc_bright=100-lc_bright;
    while(lc_bright--!=0)
    {
        lc_led=0xff;
        delay_100us(1);
    }
}

void main(void)//P7所接的led由亮到暗,最终熄灭
{
    unsigned int a,b;
    a=100;
    do
    {
        for(b=0;b<100;b++)
        {
            bright(0x7f,a);
        }
        a=a-5;
    }
    while(a!=0);
    for(b=0;b<1000;b++)
    {
        bright(0x7f,a);
    }
}

传统。。。
截图。。。

程序1.jpg
程序2.jpg

希望高手能改进一下。。。
最好可以做的精巧一点,这个实在是太糙了。。
计时太不准。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
tromso
12年2个月前 IP:未同步
477907
编译通过了 ?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dr.lc作者
12年2个月前 IP:未同步
477910
回 17楼(y363300158) 的帖子
嗯。。。
正在我边上闪着呢。。。
+1
科创币
delete
2012-12-10
而且这都凌晨了,还那么迅速,你跟我说,是不是你有新的回复你家会响起警报 ?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
tromso
12年2个月前 IP:未同步
477912
亲, 你敢不敢告诉我, 你几秒刷新一次科创 ? 我刚发完你就回复, 你敢再快点么 ?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dr.lc作者
12年2个月前 IP:未同步
477913
回 19楼(y363300158) 的帖子
10秒刷一次。。。
够快吧!!
QQ都没这么快!!
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Blake
12年2个月前 IP:未同步
477985
STC12C5A60S2带硬件PWM 可以不用软件模拟
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dr.lc作者
12年2个月前 IP:未同步
477988
回 21楼(管爷传奇) 的帖子
不讨论特例。。。
主要是做封装好的普适的函数。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Blake
12年2个月前 IP:未同步
478000
好吧  现在硬件带PWM的很多   而且用定时器更精准。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
snomom
12年2个月前 IP:未同步
478445
有更简单点的,入门方法吗?[s:274]
+1
科创币
dr.lc
2012-12-12
买套件去吧骚年。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
dr.lc
学者 笔友
文章
95
回复
1623
学术分
1
2012/04/30注册,7年0个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}