① 单片机c51求大神写一个C语言程序!挺急的
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
unsignedchari;
while(a--)
for(i=0;i<120;i++);
}
voidext0()interrupt0
{
P1=0xff;
delay(5000);
}
main()
{
unsignedcharled=0xfe;
EX0=1;
IT0=1;
EA=1;
while(1)
念搜返{
漏凯P1=led;
led=_crol_(led,1);
delay(500);
仔饥}
}
② c51单片机代码求解释
不知道这些代码是干嘛的,指或程序也不完整,只能给你字面的解释:
//XX子程序,有两个输入参数,一个是位变量CHTimeIcon,UCHAR的原型应该是关键字unsigned char 那么另一个是无符号字符型变量RowSeq
void LeftShift(bit CHTimeIcon, UCHAR RowSeq)
{
bit cFlg;//定义了1个位变量cFlg
UCHAR i, k;//定义了2个无符号字符型变量毕桐i和k
UCHAR bdata CHCode;//定义了1个可位寻址的无符号字符型变量CHCode
i = RowSeq<<1;//RowSeq没有在该子程序内声明,应该是全局变量,将RowSeq整个数据左移1位,最高位被移走,最低位变成0,然后将该值赋给变量i
if (CHTimeIcon==1 || G_OrderIcon!=0)//如果CHTimeIcon的值是1或者G_OrderIcon的值不等于0则进入下一行(CHTimeIcon和G_OrderIcon也是全局变量)
cFlg = IBytesLeftShift(&G_Cur_TimeCode[i+1], 0);//执行IBytesLeftShift(&G_Cur_TimeCode[i+1], 0)这个子程序,返回1个位变量,并将该值赋给cFlg,&G_Cur_TimeCode[i+1]的意思是把数组G_Cur_TimeCode[]的第i+1位数取出来作为地址变量参数送到IBytesLeftShift子程序中。
else
{
if (i == 0 || i == 16)//如果i等于0或者i=16,执行下面一句程序
CHCode = G_Cur_CHCode[i/16];将数组G_Cur_CHCode[]中的第i/16位数值取出送给变量CHCode
//取字节最高位,并左移
//cFlg = ReturnFlg(&CHCode);
cFlg = (CHCode & 0x80)>>7;//将CHCode除了最高位,其它位统统清0,然后把最高位移动到最低位的位置上,例如10110001->10000000->00000001,然后把结果赋值给变量cFlg,要注意的是cFlg是bit变唯数伍量,在C语言里char变量赋值给bit变量,只要char变量的值不为0则赋给bit变量的值就是1,反之则是0。
CHCode<<=1;//CHCode整体左移1位,例如00000001->00000010
}
//显示缓冲区汉字点阵码左移位
for (k = _WIN_CH_NUM_; k > 0; k--)//将_WIN_CH_NUM_的值赋给k,作为k的初值,只要k的值大于0则执行下面的程序,执行完毕后k的值减1,然后判断k的值是否还大于0,大于0则继续循环,否则退出for语句
cFlg = TwoBytesLeftShift(&G_CHCode[k-1][i+1], cFlg);//执行TwoBytesLeftShift(&G_CHCode[k-1][i+1], cFlg)这个子程序,返回1个bit变量,并将该值赋给cFlg,TwoBytesLeftShift有两个输入参数,1个是&G_CHCode[k-1][i+1],1个是cFlg,上面有类似的语句说明。
}
③ 编写一个完整的单片机C51程序
#include<reg51.h>
sbit led=P1^0; //单片机管脚位声明
void main()
{
TMOD=0x01; //定时器TO工作在方式1
TH0=(65536-5000)/256; //装初值,12M晶振 1为1us; 5000为5000us=5ms;
TL0=(65536-5000)%256;
EA =1; //开总中断
ET0=1; //开定时器TO中断
TR0=1; //启动定时器
P1=0; //初始化P1口
while(1) ; //程序在这里等待中断发生
}
void T0_time() interrupt 1
{
unsigned char num;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
num++;
if(num==100) //0.5S (1s闪烁1次==0.5S亮0.5S灭)
{
num=0;
led=~led; //led状态取反
}
}
④ 求C51单片机 按键切换三种样式流水灯代码
#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar
ucharled,tm,key;
sbitK=P1^0;
voidt0isr()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tm++;
if(tm>=10)
{
tm=0;
switch(key)
{
case0:led=_crol_(led,1);P0=led;break;
念搜返case1:led=_cror_(led,1);P0=led;break;
case2:led=~led;P0=led;break;
漏凯default:break;
仔饥}
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
led=0xfe;
key=0;
while(1)
{
if(K==0)
{
while(K==0);
key++;
key%=3;
if(key==0)led=0xfe;
elseif(key==1)led=0x7f;
elseled=0x55;
}
}
}
⑤ 单片机c51编程
也不晓楼主把空蚂轿这个C程序发出来,有不有什么问题需要帮助的
我自各儿做的一个斗肆数字钟物做:00-00-00型的,为24小时制的,汇编程序和Protues都发给了你,注意查收噢!(twp……@126.com)
⑥ C51 单片机代码问题
void t0(void) interrupt 1 using 0
{
TH0=(65536-3000)/256;
TL0=(65536-3000)%256;
counter++; //高前计时雹念稿加1
P2=table[num]; //P2读取列位值
if((counter&0x80)==0)
P0=Dispay[temp][num]; //P0读取:数组-数字和字母
else
P0=0; //每128*3mS 显示关源孝闭一次.
num++; //按数序
if(num==8) //每组8个BIT
{num=0;}
}
⑦ c51单片机,请问这两行代码作用
这看程序或写程序必须结合电路,根据电路来分折,才能看懂。你的仿真图中,是用锁存器74HC573来锁存数据的,段控和位控各用一片锁存器。要锁存数据,除了P0口要输出数据,还必须在锁存器的LE端加一个锁存脉冲信号,先加高电平,即wela=1; 然后P0口输出数据,P0=0x00,锁存器输入数据,输出端就得到了这个数据,要锁存,还要变成低电平,才能保存数据不变, wela=0; 而下一条,P0=0xff;是恢复P0口为高电平,因为锁存器已经锁存了数据了,即保持不变了。因数码管是共阴的,所以,位控要加低电平,即P0=0x00。同理,在锁存段码时也是这样操作的。
纯用手机敲的字,请及时采纳吧。
⑧ C51单片机 简单代码
//TR0 =0;
//TR = 1
这两条指令简枯不行。在c语言中//表示解释说拦枯洞明,单片机败稿是不认识的!