一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

搜索
楼主: zhuaii3721

[其他综合] 想抽些时间好好学单片机了,求师!求指教!

 火.. [复制链接]
 楼主| 发表于 2012-9-7 14:23 | 显示全部楼层
这几天工地上的事情脱不开身,零零碎碎的凑了个大概程序,晚上发给大家看下,请多多指教啊!
回复

使用道具 举报

 楼主| 发表于 2012-9-9 11:40 | 显示全部楼层
请大家多多指教!
#include<reg51.h>    //  包含51单片机寄存器定义的头文件
sbit sin=P3^2;                 //信号输入
sbit ge=P0^7;            //个位
sbit shi=P0^6;      //十位
unsigned char code num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int s=0;  //定义一个全局变量s,用于存放秒的数值

void timer(void) interrupt 1 using 1
{
        int i;
        if(i==19)  //若i=20,则是1秒,我的如果是20的话会稍慢,所以改为19
        {
                s++;   //秒数自加1
                i=0;        //对i清零        
        }        
        if(s==60)        //如果到了60秒,则对秒数清零
        {
                s=0;
        }
        i++; //每中断一次,i的值加1
        TH0=(65536-8800)/256;          //再给定时器赋初始值
        TL0=(65536-8800)%256;
}

void init(void)//定时器初始函数,对定时器初始化
{
        EA=1;                                        //允许所有的中断请求
        TMOD=0x01;                                //设定时器0的工作模式为 方式1 即16位定时器
        ET0=1;                                        //允许定时器0的中断请求
        TH0=(65536-8800)/256;        //定时时间为50ms,初始值要根据具体情况微调
        TL0=(65536-8800)%256;
        TR0=1;                                        //打开定时器0,开始定时
        EX0=1;                                        // 允许使用外中断
        IT0=1;                                        // 选择负跳变来触发外中断,这句不要按键时LED会闪烁
}

/**************************************************************
函数功能:外中断T0的中断服务程序
**************************************************************/
void int0(void) interrupt 0 using 0 //外中断0的中断编号为0
{
  //P2=~P2;  //每产生一次中断请求,P1取反一次。
s++;

}

void main()
{
        unsigned int i;                //定义一个变量,用于数码管延时
        init();                        //调用定时器初始化函数,对定时器进行初始化
        while(1)                        //死循环,让数码管不断显示
        {
//下面是只让第一段显示 ,其他的关闭
                i=1000;                                //赋值给变量
                shi=0;                                //三极管导通,只让第1段显示,其他段关闭
                P1=num[s/10];                  //分离出秒的十位 ,让数码管的第一段显示
                while(i--);                        //延时一下,让眼睛视觉残留
                shi=1;                                //关闭第1段

//下面是只让第二段显示,其他的关闭
                i=1000;                                //重新赋值给变量
                ge=0;                                //三极管导通,只让第2段显示,其他段关闭
                P1=num[s%10];                //分离出秒的个位,让数码管的第二段显示
                while(i--);                        //延时一下,让眼睛视觉残留
                ge=1;                                //关闭第2段
        }
}
回复

使用道具 举报

发表于 2013-1-3 23:02 | 显示全部楼层
回复 21# fat


    关于冯老师提到的冒泡法排序,以前一直没看懂,近几天看到C语言视频教程上的讲解,才算是真正弄明白了,多谢
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-18 23:14 , Processed in 0.033324 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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