高手帮我解答下单片机C语言每个语句的意思 请高手帮帮小弟解答一下下面单片机c语言编程的表示意思

作者&投稿:唐满 (若有异议请与网页底部的电邮联系)
#include "reg51.h" //调用头文件reg51.h(内含有关单片机寄存器,端口的定义)
#define uchar unsigned char //宏定义 uchar表示unsigned char
#define uint unsigned int //宏定义 uint 表示unsigned int
uchar bai,shi,ge,n,temp=120; //定义 bai,shi,ge,n,temp 5个无符号字符型变量,初始值为120
uchar code table[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e}; //定义一个数组 LED数码管译码用的码表
void chushi() //定义初始化操作函数 (名称不太规范哦)
{
bai=temp/100; //bai 为temp除以100(取百位,因为temp是unsigned char数值范围0~255)
shi=temp/10%10; //shi 为temp处以10后再和10取余(先把十位搞到各位去,然后提取出个位)
ge=temp%10; //ge 为temp与10取余 (提取其个位)
P1=table[bai]; //查表法 把bai对应的段码送P1口
P2=table[shi]; //查表法 把shi对应的段码送P2口
P0=table[ge]; //查表法 把ge对应的段码送P0口
EA=1; //开总中断
ET0=1; //允许定时器中断
TMOD=0x01; //定时器1设置工作方式1
TH0=(65536-50000)/256; //设定定时器初始值高位
TL0=(65536-50000)%256; //设定定时器初始值低位 (12M晶振时约20ms)
TR0=1; //开始定时器

}
void zhongduan() interrupt 1 //中断服务程序 ,定时器中断
{
TH0=(65536-50000)/256; //设定定时器初始值高位 (定时器重新装载)
TL0=(65536-50000)%256; //设定定时器初始值低位 (12M晶振时约20ms)
n++; //计数值n自增
}
void xianshi(uchar bai,uchar shi,uchar ge) //数码管显示函数 (静态显示)
{
P1=table[bai]; //查表法 把bai对应的段码送P1口
P2=table[shi]; //查表法 把shi对应的段码送P2口
P0=table[ge]; //查表法 把ge对应的段码送P0口
}

void main() //主函数
{

chushi(); //掉用chushi函数进行初始化
while(1) //主循环
{
if(n==20) //判断n是否等于20 (50ms*20=1秒!)
{ //当n=20时
n=0; //n清零
temp--; //计数值temp自减
bai=temp/100; //bai 为temp除以100(取百位)
shi=temp/10%10; //shi 为temp处以10后再和10取余(取十位)
ge=temp%10; //ge 为temp与10取余 (取个位)
if(temp<=0) //如果temp 小于等于0 (好像不可能小于最多等于吧)
{
temp=120; //temp赋值为120(兄弟你是不是在作120秒篮球计时器那道题?)
bai=temp/100; //bai 为temp除以100(取百位)
shi=temp/10%10; //shi 为temp处以10后再和10取余(取十位)
ge=temp%10; //ge 为temp与10取余 (取个位)(又来了一遍,直接把if语句放在前面if(temp==255))temp=120不行么?)
P1=table[bai]; //查表法 把bai对应的段码送P1口
P2=table[shi]; //查表法 把shi对应的段码送P2口
P0=table[ge]; //查表法 把ge对应的段码送P0口
}

}
xianshi(bai,shi,ge); //调用显示函数显示数值
}
}

好吧我承认我是无聊,没心情看书。。。

一分没有,大段的简单程序,一看就是做毕设的。楼上两位还真有闲,居然真给回答。

#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
uchar bai,shi,ge,n,temp=120;

// 共阳数码管0~F的显示编码
uchar code table[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};

void chushi()
{
// 把数分开,开始时temp为120
// 经过下面3条语句,后bai=1;shi=2;ge=0
bai=temp/100;
shi=temp/10%10;
ge=temp%10;

// 在数码管上显示百位
P1=table[bai];
// 在数码管上显示十位
P2=table[shi];
// 在数码管上显示个位
P0=table[ge];

// 开总中断
EA=1;
// 开定时器0中断
ET0=1;

// 设定定时器0为工作模式1
TMOD=0x01;

// 装计时初值
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
// 启动定时器0
TR0=1;

}
void zhongduan() interrupt 1
{
// 定时器计数溢出,重新装初值
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
n++;
}
void xianshi(uchar bai,uchar shi,uchar ge)
{
// 这个和上面一样,不用讲了
P1=table[bai];
P2=table[shi];
P0=table[ge];
}

void main()
{
// 后面的和上面的都差不多~~~~
chushi();
while(1)
{
if(n==20)
{
n=0;
temp--;
bai=temp/100;
shi=temp/10%10;
ge=temp%10;
if(temp<=0)
{
temp=120;
bai=temp/100;
shi=temp/10%10;
ge=temp%10;
P1=table[bai];
P2=table[shi];
P0=table[ge];
}

}
xianshi(bai,shi,ge);
}
}

高手帮我解答下单片机C语言每个语句的意思~

数码管显示,定时器用于动态显示刷新而已。

#include
#define uchar unsigned char(宏定义 uchar ==unsigned char无符号字符变量)
#define uint unsigned int(无符号整数)
sbit key_s1=p3^0;
sbit key_s2=p3^1;
sbit key_s3=p3^2;
sbit key_s4=p3^3;
void delay(uint)(带参数的延时子程序)
{
uint i.j;(无符号整数)
for(i=0;i<k;i++)
{
for(j=0;j<121;j++)
{;}
}(FOR嵌套,使延时的时间可以更长)
}
void main(void)(没有什么意思这是格式)
{
delay(50);(延时,变量为50)
while(1)
{
if(!key_s1){p1=0xe7;}(!表示不,意思是KEY——SI不等于0)
else if (!key_s2){p1=0xdb;}
else if (!key_s3{p1=0xbd;}
else if (!key_s4{p1=0x7e;}
else{p1=0xc3;}
delay(5);
}

这个单片机程序该怎么用c语言写 说说每一步是干什么的 谢谢
答:这个很好处理呀,比如以下举例,独立+矩阵,实现独立按键相当于类似SHIFT作用的效果。include<reg51.h> define uchar unsigned char uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0到f uchar keyval,num;sbit skey=P1^0; ...

请高手解释一下这个单片机流水灯C语言程序,新手~~
答:include "reg52.h"include "intrins.h" //循环移动函数要用到的头文件 void Delay(unsigned int t) //延时子程序 { unsigned i;while(t--!=0){ for(i=0;i<500;i++){;} } } void main(void){ unsigned char temp,num1,num2;P0=0xff; //LED初始化 起始状态 灭 P2=0x...

单片机c语言
答:无键盘事件返回0//按下sw1, 返回1 抬起,返回2//按下sw2, 返回3 抬起,返回4unsigned char key(){data unsigned int t;t= ms-k1t;if (t>1000) k1t=ms-1000;if (sw1==1 && k1s==0 &&t>10){k1s=1; k1t=ms; return 2;}if (sw1==0 && k1s==1 &&t>10){k1s=...

一个关于单片机控制步进电机的C语言程序 想请高人帮我把每一步都注释...
答:C语言程序源代码 include <REGX51.H> // 51寄存器定义 include "intrins.h"define control P1 //P1_0:A相,P1_1:B相,P1_2:C相,P1_3:D相 define discode P0 //显示代码控制端口 define uchar unsigned char //定义无符号型变量 define uint unsigned int sbit en_dm=P3^0; //...

关于单片机C语言的问题
答:5:a(),b(),c()函数同主程序一样,不会影响中断服务程序的执行,除非里面包含有影响中断的语句,例如开关中断等;6:程序是按语句顺序一句一句连续执行的,所谓单步运行状态,是通过开发系统中的监控程序和硬件的帮助,让用户程序运行一条指令就停止,目的是便于调试。实际在用户系统中运行的程序是没有...

单片机c语言,这份代码我看不懂,打打注释
答:设晶振频率为12MHz。*//***/#include<reg52.h> //52单片机头文件#include <intrins.h> //包含有左右循环移位子函数的库#define uint unsigned int //宏定义#define uchar unsigned char //宏定义sbit beep=P2^3;//应该是蜂鸣器吧采的uchar tt;//自定义计数全局变量uint fre,flag;//自定义...

高分悬赏急求哪位单片机C语言编程高手帮我翻译这个程序,由于要提问到...
答:内容太多了,你就说哪些你不会吧,减少下工作量吧。/***/ define LCD XBYTE[0xffff] // 定义LCD显示的数组,这边用0xffff浪费 // 只要32就可以了 define uint unsigned int // 宏定义“短表示”,方便书写 define uchar unsigned char // 同上 void lcd_mwc(uchar i) // 这个...

51单片机c语言,请解释一下这句的意思,还有=~的意思?提前谢谢了?_百度...
答:这是位操作 这句话一说是首先i 向左移一位,再取反,最后i = i + 1 比如 i = 8, 假设 i 是16位,即0X00 08 那么左移一位是0X00 01 00 , 取反 0X FE FF, 然后i 变为0X 00 09

请高手介绍单片机C语言的程序
答:由于嵌入式系统软硬件结合紧密,定时器0为什么工作在计数状态,谁给的计数信号,数码管共阴还是共阳等都需要硬件电路才能分析清楚,其实读单片机的程序最重要的是作者的思路,有时候单看其中每句都明白意思(本意),但就是看不出作者要干什么,这就是我给的注释不太详细但都给出了思路和作用的缘故。。

单片机 C语言 这个程序的大致意思望备注 谢谢!!!
答:}else if(P3_3==0)//P3.3为键K4{return 4;}else {return 0;//没有按键返回0}}void Display(unsigned char Num) //数码管显示程序{P2_4=0;P2_3=0;P2_2=0;//段选控制位P0 = SHUMA[Num]; //位码送P0口}void main(void){while(1){if(KeyScan()==1)//按键K1按下{Display(...