哈哈!我的第一个C程序和第二个和第……
爱非神话2009/07/07软件综合 IP:广东
不懂C,学AVR太艰难了,于是周末去购书中心买了本C语言入门,狂啃了2天,今晚熬到现在总算用自己的思路(当然里面还是有许多书上例题的影子的[s:98])编出了自己的第一个程序并上板调试通过,哈哈,发帖纪念下……[s:232]
简单的功能,两位数码管循环显示从00~99……不容易啊,尝试了N种方法,N次失败啊……
总算成功了![s:92] C路漫长,加油!

******************我的第一个C程序:双数码管循环显示0~99******************
#include <iom48v.h>
#include <macros.h>
#include "delay.h"        /*拿来主义的延时函数*/  
#include "led_dis.h"      /*LED数码管断码表*/

#define Led_a 0b11111110      /*定义十位数码管点亮输出脚*/  
#define Led_b 0b11111101     /*定义个位数码管点亮输出脚*/  
#define Led_M 0b11111111    /*定义关闭所有数码管*/  

void main (void)
{
    unsigned char Counter=10;
    int a,b,c;
    
    DDRC=0xFF;
    DDRB=0xFF;
    DDRD=0xFF;
    PORTC=0xFF;
    PORTB=0xFF;
    PORTD=0xFF;
    
    haha: ;
    a=0;
    b=0;
    c=0;
    
    for (;c<10000;Counter=c/100)     /*这两个参数决定了计数器的递增频率与总循环数*/
    {
        a=Counter/10;
        PORTD=DisTab[a];
        PORTB=Led_a;        /*点亮十位数码管*/
        Delay_ms(3);
        b=Counter%10;
        PORTD=DisTab[b];
        PORTB=Led_b;        /*点亮个位数码管*/
        Delay_ms(3);
        PORTB=Led_M;                     /*关闭所有的数码管*/
        Delay_ms(10);
        c++;
    }
    
    goto haha;
}
来自:计算机科学 / 软件综合
17
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
爱非神话 作者
15年0个月前 IP:未同步
120141
也许这样实现两位数显是不科学的……不过以目前的学习进度只能想到这种方法了…… [s:245]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
爱非神话作者
15年0个月前 IP:未同步
120207
LS~

引用第2楼jrcsh于2009-07-07 03:10发表的  :
拿来主义  不会是哪本书吧   是很合抄来用  我也有本 不过是在新华书店买的
.......


购书中心==新华书店

引用第4楼93°于2009-07-07 08:53发表的  :
C最萌啊。。。


0100100110001110010……最萌

[s:124]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
爱非神话作者
15年0个月前 IP:未同步
120220
引用第7楼jrcsh于2009-07-07 10:16发表的  :



购书中心 指点的是 体育中心旁边哪个

.......


呃……原来是这样子,我一直以为是一个……汗~
那边规模怎样?比起购书中心?反正我每次去购书中心都是直奔四楼的……其它楼层一概无视。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
爱非神话作者
15年0个月前 IP:未同步
120811
引用第11楼jrcsh于2009-07-07 20:46发表的  :


购书中心  的情况~~~我发这贴了

北京路哪家 唯一的一本单片机书就是  "拿来主意"  我也买回来了


我的是《深入浅出AVR单片机》,然后觉得学起来有点困难,所以又去买了本《零基础学C语言》。

引用第12楼phpskycn于2009-07-07 20:52发表的  :
购书中心?莫非是杭州庆春路那家?


广州的……
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
爱非神话作者
15年0个月前 IP:未同步
120813
引用第10楼rc5于2009-07-07 16:22发表的  :
这几个写的不象C的文风

2. 循环变量应该在for循环中初始化和增量,而不是在for之前和{}之内。
3. 没有绝对必要不要用goto语句
4. 应该写成if(!P) 而不是if(p==0)



谢谢指教!
2.呃,我试试看……
3.我试试套个while循环
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
爱非神话作者
15年0个月前 IP:未同步
120854
*****************修改后的代码,感谢RC5的指点,已经简洁多了******************

#include <iom48v.h>
#include <macros.h>
#include "delay.h"        /*拿来主义的延时函数*/  
#include "led_dis.h"      /*LED数码管断码表*/

#define Led_a 0b11111110
#define Led_b 0b11111101
#define Led_M 0b11111111

void main (void)
{
    DDRC=0xFF;
    DDRB=0xFF;
    DDRD=0xFF;
    PORTC=0xFF;
    PORTB=0xFF;
    PORTD=0xFF;
    while(1)
    {
    unsigned char Counter;
    int a=0,b=0,c=0;
    
    for (Counter=10;c<10000;Counter=c++/100)         /*这两个参数决定了计数器的递增频率与总循环数*/
    {
        a=Counter/10;
        PORTD=DisTab[a];
        PORTB=Led_a;                     /*点亮十位数码管*/
        Delay_ms(5);
        b=Counter%10;
        PORTD=DisTab[b];
        PORTB=Led_b;                     /*点亮个位数码管*/
        Delay_ms(5);
        PORTB=Led_M;                    /*关闭所有的数码管*/
        }
    }        
}

************************分割线*********************************

有个问题,就是根据您的建议,我想将循环变量  Counter ,a,b,c 放进初始化表达式中却总是失败,但只放Counter就没问题,是否for函数的初始化表达式只允许放一个变量呢?不解……试了好几次了。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
爱非神话作者
15年0个月前 IP:未同步
120917
引用第15楼phpskycn于2009-07-08 01:24发表的  :
for应该只能放进一个
C++中精典的…
for(i=0,i<100,i++){
......
}
.......


C++没了解过,怎么是用逗号隔开的?

嘿,又花了几个小时时间,终于写出了我的第二个C程序:四数码管循环显示0~999,一开始以为很简单,就在原来的双数码管显示代码基础上小作修改,结果除了个位其它的怎么都是显示乱码,要么干脆几位不显示,想了好久没找到原因,后来尝试用“程序思维”一步步跟下去,终于发现了问题所在,一位数显示与两位数显示没有太大分别,可上了三位数就得区分了,关键在于区分“几位数”以及“取其位值”,虽然中间绕了很远,但,最终还是成功了,兴奋N久!
[s:232]
***********************我的第二个C程序:四数码管循环显示0~999*******************************
#include <iom48v.h>
#include <macros.h>
#include "delay.h"  
#include "led_dis.h"

#define Led_a 0b11111110
#define Led_b 0b11111101
#define Led_c 0b11111011
#define Led_d 0b11110111
#define Led_off 0b11111111

void main (void)
{
    DDRC=0xFF;
    DDRB=0xFF;
    DDRD=0xFF;
    PORTC=0xFF;
    PORTB=0xFF;
    PORTD=0xFF;
    while(1)
    {
    int a=0,b=0,c=0,d=0,e=0,Counter;
    
    for (Counter=0;e<10000;Counter=e++/2)     /*这两个参数决定了计数器的递增频率与总循环数*/
    {
        if(Counter<=999&&Counter>99)    /*三位数情况*/
        {
        d=Counter%10;
        c=Counter/10%10;
        b=Counter/100;
        }
        else if(Counter<=9999&&Counter>999)    /*四位数情况*/
        {
        d=Counter%10;
        c=Counter/10%100%10;
        b=Counter/100%10;
        a=Counter/1000;
        }
        else             /*一或两位数情况*/
        {
        d=Counter%10;
        c=Counter/10;
        }
                
        PORTD=DisTab[a];
        PORTC=Led_a;            /*点亮千位数码管*/
        Delay_ms(5);
        PORTD=DisTab[b];
        PORTC=Led_b;        /*点亮百位数码管*/
        Delay_ms(5);
        PORTD=DisTab[c];
        PORTC=Led_c;        /*点亮十位数码管*/
        Delay_ms(5);
        PORTD=DisTab[d];
        PORTC=Led_d;        /*点亮个位数码管*/
        Delay_ms(5);
        PORTC=Led_off;    /*关闭所有的数码管*/
        }
    }        
}
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

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

所属专业
上级专业
同级专业
爱非神话
学者 笔友
文章
71
回复
981
学术分
11
2008/03/23注册,6年4个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

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