① 使用C语言编程实现单片机与上位机串行通信,其上位机发送数据给单片机,
#include"reg52.h"
#defineucharunsignedchar
#defineLLONG30
//charcodetable[]="Hello!";
ucharcodetable[]={'F','i','r','s','t','C','h','a','r',':',0x0d,0x0a,'W','W','W','.','H','E','B','T','U','.','E','D','U','.','C','N',0x0d,0x0a};
ucharFlag,FirstChar=0,UARTChar[10]={0};
voiart()interrupt4
{
ES=0;//----中断暂停----
RI=0;//----清标志位----
FirstChar=SBUF;
Flag=1;
ES=1;//----中断开启----
}
voidmain()
{
chari=0;
TH1=0xFD;
TL1=0xFD;
TMOD=0x20;//T1在定时器方式
TCON=0x40;//TR1=1
PCON=0x00;//SMOD为0
SCON=0x50;//串行方式1REN=1
IP=0x00;
IE=0x90;
while(1)
{
if(Flag==1)
{
ES=0;//----中断暂停----
Flag=0;//----清标志位----
for(i=0;i<10;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
SBUF=FirstChar;
while(!TI);//----通讯等待----
TI=0;//----清标志位----
for(i=10;i<LLONG;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
ES=1;//----中断开启----
}
}
}
② 单片机C51 C语言编程问题!!!!
voiddisplay(ucharshi,ucharge)
{
uintledout[1],i;//这里应该是ledout[2]
我在proteus上进行了仿真,但是不知道什么原因,只对共阳极LED数码管好使。我就把程序稍微做了改动,仿真结果可以正确计时。
我把程序贴在下面供参考
#include<reg52.h>
#define禅悔ucharunsignedchar
#defineuintunsignedint
ucharnum=0,count=0,num2=0,shi=0,ge=0;
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//共阳//段选数据表
//ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
ucharcodewei[2]={0xfe,0xfd};//位选数据表
voiddisplay(uchar,uchar);
voiddelay(uint);
voidmain()
{
TMOD=0x10;//设定定时器1工作在方式1
TH1=(65536-50000)/256;//装载初值
TL1=(65536-50000)%256;//开总中断
//开定时器1中断
ET1=1;//启动定时器1
TR1=1;//程序在此不停对于数码管动态扫描等待中断
EA=1;
while(1)
{
display(shi,ge);//显示函数
}
}
voiddisplay(ucharshi,ucharge)
{
uintledout[2],i;
ledout[0]=table[shi];雹袭锋//段选数据十位
ledout[1]=table[ge];//段选数据各个
for(i=0;i<2;i++)
{//用P0输出位选数据
P0=wei[i];
//这里用查表的方式来赋值
P2=ledout[i];//用P2输出段选数据
delay(1);//扫描间隔
}
}
//1S中断函数
voidT1_time()interrupt3
{
TH0=(65536-50000)/256;源晌//重新装载初值
TL0=(65536-50000)%256;
count++;
if(count==20)//如果到了20次,说明1秒到
{//把COUNT清零重新计数20次
count=0;
num2++;//用NUM2向来数码管显示到60后归零
if(num2==60)
num2=0;
shi=num2/10;//把NUM2分成2个数十位和个位
ge=num2%10;
}
}
voiddelay(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)//延时程序
for(j=110;j>0;j--);
}
③ 大一新生刚学完C语言,想自学单片机,给点建议~
如果刚开始学,建议先学习51单片机。市场上卖的51学习板都差不多,也可以自己在网上搜一些原理图,自己做一个简单的学习班,既省钱又可以锻炼动手能力。书本和视频教程当然是要看的,找个高年级的学长教你可以起到事半功倍的效果。做实验是一种很快的学习方法,有些想不通的东西,一做实验就懂了。
单片机程序可以用汇编和C语言编写,如果学习ARM和嵌入式的话,建议使用C语言。
关于嵌入式的定义:(来源于http://ke..com/view/30741.htm?fr=ala0_1_1)
定义 IEEE(国际电气和电子工程师协差高祥会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置”(原文为:Devices Used to Control,Monitor or Assist the Operation of Equipment,Machinery or Plants)。这主要是从应用对象上加以定义,从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。 国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。 可以这样认为,嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。
我个人对嵌入式的理解:举个例子说吧,你做了一个万年历,可以显示公历和农历,整点的时候会像一声;过虚搏了一段时间,想加入定时功能,可以把单片机取下来,修改程序;又过了一段时间,想把简单的闹铃改成音乐,但是单片机的程序存储器不够了,你可以换一个程序存储器更大但管脚相同的单片机;又过了一段时间,你想加入温度显示,但是硬件不能完成这个功能,你需要在硬件上加温度传感器,在单片机程序中加入温度检测和显示程序。
我个人对嵌入式的理解就是软件和硬件的综合体。
MP3、电子阅读器、文曲星有些是用单片机做的,有些是FPGA/CPLD可编程逻辑器件做的,还有些是单片机和专用芯片相结合做的。比如MP3,可以直接将MP3解码电路做在一个芯片里,这样就不需要写MP3解码程序了念神。
④ 51单片机C语言编程
你的设计有点问题,不过你看下这个程序对你应该有帮助。
#include <reg52.h>
#define int8 unsigned char
#define int16 unsigned int
#define int32 unsigned long
int8 flag;
int8 n;
int8 code table[][32]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/* " " */
{0x04,0x28,0x08,0x24,0x32,0x22,0xC2,0x21,0xC2,0x26,0x34,0x38,0x04,0x04,0x08,0x18,0x30,0xF0,0xC0,0x17,0x60,0x10,0x18,0x10,0x0C,0x14,0x06,0x18,0x04,0x10,0x00,0x00},/*"欢",0*/
{0x02,0x02,0x04,0x82,0xF8,0x73,0x04,0x20,0x02,0x00,0xE2,0x3F,0x42,0x20,0x82,0x40,0x02,0x40,0xFA,0x3F,0x02,0x20,0x42,0x20,0x22,0x20,0xC2,0x3F,0x02,0x00,0x00,0x00},/*"迎",1*/
{0x00,0x01,0x04,0x02,0x1C,0x0C,0xC0,0x3F,0x1C,0xC0,0x02,0x09,0x02,0x16,0x92,0x60,0x4A,0x20,0x82,0x2F,0x02,0x20,0x0E,0x24,0x00,0x22,0x90,0x31,0x0C,0x20,0x00,0x00},/*"您",2*/
{0x44,0x10,0x44,0x14,0x88,0x54,0x88,0x54,0xD0,0x5F,0x30,0x50,0x60,0x50,0xFE,0x7F,0x40,0x50,0x20,0x90,0xB0,0x9F,0x98,0x92,0x8C,0x94,0x88,0x34,0x80,0x11,0x00,0x00},/*"乘",3*/
{0x82,0x00,0x02,0x01,0x22,0x06,0x22,0x38,0x22,0x04,0x22,0x03,0x22,0x00,0xFE,0xFF,0xA2,0x00,0x22,0x01,0x22,0x02,0x22,0x3C,0x22,0x02,0x02,0x01,0x02,0x00,0x00,0x00},/*"坐",4*/
{0x02,0x00,0x0C,0x00,0xF0,0x3F,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0xA0,0x00,0x60,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00},/*"广",5*/
{0x80,0x00,0x01,0x07,0x06,0x00,0x18,0x00,0xE0,0xFF,0x00,0x04,0x00,0x03,0x00,0x00,0xFE,0x7F,0x00,0x08,0x00,0x06,0x80,0x01,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00},/*"州",6*/
{0x00,0x00,0x04,0x20,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x20,0x04,0x00,0x00,0x00},/*"三",7*/
{0x20,0x08,0x20,0x86,0x7F,0x60,0x80,0x0F,0x00,0x04,0x00,0x1A,0x00,0xEA,0x00,0x2A,0x00,0x2A,0x00,0x2A,0x00,0x2A,0xF0,0x2B,0x0C,0x28,0x02,0x20,0x0F,0x00,0x00,0x00},/*"汽",8*/
{0x00,0x00,0x80,0x00,0x04,0x01,0x0E,0x02,0x14,0x0C,0x24,0x70,0xC4,0x21,0x8C,0x00,0x08,0x00,0x08,0x70,0x28,0x08,0x1E,0x06,0x0C,0x03,0x80,0x01,0x00,0x01,0x00,0x00},/*"公",9*/
{0x00,0x00,0x00,0x08,0xF8,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0xF0,0x49,0x00,0x48,0x04,0x40,0x02,0x40,0xFC,0x7F,0x00,0x00,0x00,0x00},/*"司",10*/
{0x00,0x00,0x80,0x00,0x04,0x01,0x0E,0x02,0x14,0x0C,0x24,0x70,0xC4,0x21,0x8C,0x00,0x08,0x00,0x08,0x70,0x28,0x08,0x1E,0x06,0x0C,0x03,0x80,0x01,0x00,0x01,0x00,0x00},/*"公",11*/
{0x40,0x00,0x40,0x08,0x41,0x08,0x42,0x08,0x4C,0x08,0xF8,0x7F,0x50,0x08,0x40,0x08,0x40,0x08,0x60,0x08,0xD0,0x7F,0x4C,0x08,0x47,0x08,0x42,0x08,0x40,0x00,0x00,0x00},/*"共",12*/
{0x20,0x08,0x20,0x86,0x7F,0x60,0x80,0x0F,0x00,0x04,0x00,0x1A,0x00,0xEA,0x00,0x2A,0x00,0x2A,0x00,0x2A,0x00,0x2A,0xF0,0x2B,0x0C,0x28,0x02,0x20,0x0F,0x00,0x00,0x00},/*"汽",13*/
{0x20,0x00,0x20,0x20,0x20,0x21,0x20,0x23,0x20,0x25,0x20,0x39,0x20,0xE1,0x20,0x21,0xFF,0x2F,0x20,0x21,0x20,0x21,0x20,0x21,0x20,0x21,0x20,0x21,0x20,0x00,0x00,0x00},/*"车",14*/
{0x00,0x00,0x00,0x00,0x1A,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",15*/
{0x00,0x04,0x01,0x04,0x02,0x04,0x04,0x04,0x08,0x04,0x30,0x04,0xC0,0x05,0x00,0xFE,0x80,0x05,0x60,0x04,0x10,0x04,0x0C,0x04,0x06,0x04,0x03,0x04,0x02,0x04,0x00,0x00},/*"大",16*/
{0x00,0x02,0x40,0x0C,0x40,0x08,0x40,0x48,0x40,0x3A,0x40,0x2A,0x42,0x0A,0x41,0x8A,0xFE,0x7A,0x40,0x2B,0x40,0x0A,0x40,0x18,0x40,0xEA,0x40,0x4C,0x40,0x08,0x00,0x00},/*"学",17*/
{0x20,0x08,0x30,0x08,0xE0,0xFF,0x42,0x08,0x4C,0x08,0xF0,0x1F,0x10,0x12,0x1A,0x12,0xF2,0x13,0x04,0x10,0xC8,0xFF,0x30,0x10,0xCC,0x50,0x02,0x37,0x1C,0x12,0x00,0x00},/*"城",18*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0E,0x14,0x10,0x24,0x10,0x44,0x10,0x84,0x11,0x0C,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"2",0*/
{0x04,0x02,0x44,0x06,0xC4,0x1A,0x48,0xE3,0x48,0x46,0x48,0x00,0x04,0x09,0x04,0x09,0x08,0x09,0xC8,0xFF,0x30,0x09,0x28,0x49,0x44,0x39,0x02,0x29,0x1F,0x01,0x00,0x00},/*"线",19*/
{0x00,0x02,0x02,0x42,0x04,0x42,0x08,0x42,0x30,0x42,0xC0,0x7F,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x42,0xFE,0x7F,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x00},/*"开",20*/
{0x40,0x04,0x80,0x08,0x00,0x11,0xFF,0xEF,0x00,0x44,0x02,0x10,0x82,0x10,0x82,0x10,0x82,0x90,0xFE,0x7F,0x82,0x50,0x82,0x10,0x82,0x10,0x82,0x10,0x02,0x10,0x00,0x00},/*"往",21*/
{0x00,0x04,0x01,0x04,0x02,0x04,0x04,0x04,0x08,0x04,0x30,0x04,0xC0,0x05,0x00,0xFE,0x80,0x05,0x60,0x04,0x10,0x04,0x0C,0x04,0x06,0x04,0x03,0x04,0x02,0x04,0x00,0x00},/*"大",22*/
{0x00,0x02,0x40,0x0C,0x40,0x08,0x40,0x48,0x40,0x3A,0x40,0x2A,0x42,0x0A,0x41,0x8A,0xFE,0x7A,0x40,0x2B,0x40,0x0A,0x40,0x18,0x40,0xEA,0x40,0x4C,0x40,0x08,0x00,0x00},/*"学",23*/
{0x20,0x08,0x30,0x08,0xE0,0xFF,0x42,0x08,0x4C,0x08,0xF0,0x1F,0x10,0x12,0x1A,0x12,0xF2,0x13,0x04,0x10,0xC8,0xFF,0x30,0x10,0xCC,0x50,0x02,0x37,0x1C,0x12,0x00,0x00},/*"城",24*/
{0x00,0x00,0x00,0x00,0x1A,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",25*/
{0x00,0x02,0x00,0x42,0x00,0x32,0xFE,0x23,0x04,0x00,0x08,0x44,0xFF,0x55,0x50,0x55,0x50,0x55,0x50,0xFD,0x52,0x55,0x51,0x55,0xFE,0x55,0x00,0x44,0x00,0x04,0x00,0x00},/*"请",26*/
{0x00,0x01,0x04,0x02,0x1C,0x0C,0xC0,0x3F,0x1C,0xC0,0x02,0x09,0x02,0x16,0x92,0x60,0x4A,0x20,0x82,0x2F,0x02,0x20,0x0E,0x24,0x00,0x22,0x90,0x31,0x0C,0x20,0x00,0x00},/*"您",27*/
{0x82,0x00,0x02,0x01,0x22,0x06,0x22,0x38,0x22,0x04,0x22,0x03,0x22,0x00,0xFE,0xFF,0xA2,0x00,0x22,0x01,0x22,0x02,0x22,0x3C,0x22,0x02,0x02,0x01,0x02,0x00,0x00,0x00},/*"坐",28*/
{0x01,0x08,0xC2,0x08,0x44,0x0F,0x28,0xF8,0x30,0x08,0xCE,0x0F,0x04,0x01,0x00,0x41,0x02,0x41,0x01,0x41,0xFE,0x4F,0x00,0x51,0x00,0x61,0x00,0x41,0x00,0x01,0x00,0x00},/*"好",29*/
{0x42,0x08,0x81,0x08,0xFE,0xFF,0x00,0x09,0x01,0x0A,0x01,0x01,0x02,0x11,0x0C,0x11,0x30,0x11,0xC0,0xFF,0x30,0x11,0x08,0x11,0x06,0x11,0x03,0x11,0x02,0x01,0x00,0x00},/*"扶",30*/
{0x20,0x08,0xC0,0x48,0x00,0x4B,0xFF,0x7F,0x00,0x89,0x9C,0x88,0x00,0x10,0xBC,0x2A,0x82,0xCA,0xC2,0x4A,0xB2,0x5A,0x82,0x6A,0xAE,0x0A,0x90,0x0F,0x0C,0x00,0x00,0x00},/*"稳",31*/
{0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",32*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}/* " " */
};
void delay(void);
int16 offset;
void main(void)
{
int8 i;
int8 *p;
flag=0x10;
n=0;
TMOD=0x01;
TH0=0xb1;
TL0=0xe0;
ET0=1;
EA=1;
TR0=1;
p=&table[0][0];
while (1)
{
for (i=0;i<8;i++) //显示左半边屏幕
{
P0=*(p+offset+2*i);
P2=i|0x08; //P2.4=0,P2.3=1 选中U2, 输出扫描码给U6
delay();
P0=*(p+offset+2*i+1);
P2=i|0x10; //P2.4=1,P2.3=0 选中U3, 输出扫描码给U7
delay();
}
for (i=8;i<16;i++) //显示右半边屏幕
{
P0=*(p+offset+2*i);
P2=(i-8)|0x20; //P2.5=1 P2.4=0, P2.3=0 选中U4,输出扫描码U8
delay();
P0=*(p+offset+2*i+1);
P2=(i-8)|0x40; //P2.6=1 P2.5=0, P2.4=0 选中U5,输出扫描码U9
delay();
}
}
}
void delay(void)
{
int16 i;
for (i=0;i<50;i++)
;
}
void timer0() interrupt 1 using 3
{
TF0=0;
TH0=0xb1;
TL0=0xe0;
if (n<10)
{
n++;
}
else
{
offset+=2;
if (offset>1100)
offset=0;
n=0;
}
}
⑤ 关于学习C语言和单片机的问题
先针对你的提问做些回答:从你的描述上看你是想主攻单片机。如果这样对C语言的要求并不高,按正规流程学完指针、结构等就基本上够用了,谭浩强的书更多的是针对PC机的,有些东西不了解也罢。至于对内存的理解,我感觉你的说法不太贴切,应该是了解单片机后就会更容易理解内存的概念,而不是要了解单片机就必须首先理解内存。如果具备数据结构、操作系统原理、编译原理这一类的知识,都会对编程也好处,好的算法会起到事半功倍的效果,这对所有的编程都是一样的,尽管这属于锦上添花,有时间学学还是提倡的,很多东西虽然不能原样照搬,但总可以照葫芦画瓢借鉴的。
要想成为单片机高手仅仅对单片机熟悉是不行的,还要学很多其它知识。一般会有以下几个阶段,我顺序说吧,不成体系但基本上涵盖。
学单片机的学习我推荐一本书给你:《mcs-51、96系列单片机原理及应用》,孙涵方着,32开本大小,北京航空航天大学出版社1988年出版。书虽老,但很经典,对汇编部份讲的最细致、最完整,还有许多常用子程序。附带说一下,51汇编一定要学,对硬件的理解会有很大帮助。(如果买不着,也可以在网络文库中下载PDF格式的电子版)。
另外就是熟悉一下KEIL C单片机编译软件,目前搞51单片机的一般都用这个软件。这类书很多,我推荐的是《单片机高级语言C51应用程序设计》,徐爱均、彭秀华着,电子工业出版社1998年第一版出版,再版次数可能很多,都一样。
如果你以后想以软件为主,上面这两本书读完并消化后,基本上就可以了,因为此时已经具备了一些硬件的基础,以后只要和硬件工程师配合好,搞不懂的硬件多问问,编制软件也就没什么太大的问题了,至少可以成为C51高手。
如果还想更进一步,那么首先要学习模拟电路,这是硬件电路的基础,数字电路只是模拟电路中分化出来的一个大类,也是通过模拟电路构建出来的。模拟电路有一定难度,必须需要大量的实践才能成为高手,不像数字电路那样高手很多。模电好的一定是硬件高手。入门可采用随便哪个学校的教材,以后的自己选择了。
然后就是学习画电路板。眼下PROTEL99SE和PADS2007是两种主流的两种电路板绘制软件。画电路板同样也是有学问的,牵涉到诸如可靠性和电子兼容等问题,就不多说了,这类书更多,不推荐了。
最后,单片机的学习一定要和实践结合起来。初期可以买个开发板,随时学习,随时上机实践。另外我推荐的两本书比较侧重理论,你可以再买两本有习题之类的书,配合使用更好。
鉴于你是打算做长远规划,所以随手写了这么多,希望有所帮助。
⑥ 使用单片机开发产品时用C语言多吗
我以前用华邦和洪晶的单片机做开发的时候就开始用C语灶塌侍言,现在用ARM做东西,更离不开C语言.
因为C语言写出的东西移植性好,可读性也好,而且便于开发,缩短开发周期.但我并不否认汇编的重衫好要性,个人认为汇编对于初学者非常重要,因为汇编可以帮助理解硬件,有助于理解优化C语言程序,另外汇编对一些实时性高的场合(如中断服务程序,DSP数据处理程序)和底层硬件的应用场合(如keil C51、ARM的启动程序)都需要汇编来编写。
但总体上来讲,用单片机开发产品的时候绝大隐吵多数还是用C语言。建议在掌握汇编的基础上使用C开发产品。
⑦ 什么是单片机在实际中有那些应用呢
单片机概述
1、何谓单片机 一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A等。
⑧ 51单片机C语言编程
#include<AT89X51.H>
//设CPU是时钟12MHz的8051系列
dataunsignedintms;
sbitKEY=P2^3;
voidSetupTimer0()
{
TMOD&=0XF0;//仅保留T1信息
TMOD|=0X02;//设置T0:定时功能,方式2,自动重载8位定时器/计数器
TH0=256-250;//定时每0.25ms中断一次
TL0=256-250;
TR0=1;//开启定时器
ET0=1;//定时器0中断打开
}
voidTimer0_ISR()interrupt1//中断服务程序
{
staticdataunsignedcharus250;
if(++us250>=4){++ms;us250=0;}
}
voidprocess1()
{
unsignedchari,d;
unsignedinttime,dlt;
//第一步8灯整体一直闪(闪10下)。
for(i=0;i<10;++i)
{
P1=0;
for(time=ms,dlt=0;dlt<500;dlt=ms-time);
P1=0xFF;
for(time=ms,dlt=0;dlt<500;dlt=ms-time);
}
//第二步整体灭5秒。
P1=0xff;
for(time=ms,dlt=0;dlt<5000;dlt=ms-time);
//第三步从右边逐个点亮并循环4遍。
for(i=0;i<4;++i)
for(d=1;d;d<<=1)
for(P1=~d,time=ms,dlt=0;dlt<500;dlt=ms-time);
//第4步循环完毕后全部熄灭;
P1=0xff;
}
voidprocess2()
{
unsignedchari,d;
unsignedinttime,dlt;
//第一步8灯整体闪3次。
for(i=0;i<3;++i)
{
P1=0;
for(time=ms,dlt=0;dlt<500;dlt=ms-time);
P1=0xFF;
for(time=ms,dlt=0;dlt<500;dlt=ms-time);
}
//第二步从左边逐个点亮并循环2遍。
for(i=0;i<2;++i)
for(d=0x80;d;d>>=1)
for(P1=~d,time=ms,dlt=0;dlt<500;dlt=ms-time);
//第三步循环完毕后8灯一直流水;
for(;KEY;)
for(d=1;d&&KEY;d<<=1)
for(P1=d,time=ms,dlt=0;dlt<500&&KEY;dlt=ms-time);
}
voidprocess3()
{
unsignedchari,j,d;
unsignedinttime,dlt;
//第一步8灯整体保持全灭,灭的时间为500ms,可以修改
P1=0XFF;
for(time=ms,dlt=0;dlt<500;dlt=ms-time);
//第二步8灯从外到里依次点亮,重复两遍。
for(i=0;i<2;++i)
for(d=0x1,j=0x80;d<=0x8;d<<=1,j>>=1)
for(P1=~(d|j),time=ms,dlt=0;dlt<500;dlt=ms-time);
//第三步8灯从里到外依次点亮,重复两遍循环完毕后8灯保持在4亮4灭的状态
for(i=0;i<2;++i)
for(d=0x8,j=0x10;d;d>>=1,j<<=1)
for(P1=~(d|j),time=ms,dlt=0;dlt<500&&KEY;dlt=ms-time);
P1=0xc3;
for(;KEY;);
}
voidprocess4()
{
unsignedchari,d;
unsignedinttime,dlt;
//第一步整体保持全灭。灭的时间为1000ms,可以修改
P1=0XFF;
for(time=ms,dlt=0;dlt<1000;dlt=ms-time);
//第二步从左到右流水两遍。
for(i=0;i<2;++i)
for(d=1;d;d<<=1)
for(P1=d,time=ms,dlt=0;dlt<500;dlt=ms-time);
//第三步从右到左逐个点亮三遍。
for(i=0;i<3;++i)
for(d=0x1;d;d<<=1)
for(P1=~d,time=ms,dlt=0;dlt<500;dlt=ms-time);
//第4步其中一盏灯保持闪
for(;KEY;)
{
for(d=0x8;KEY;d^=0x8)
for(P1=~d,time=ms,dlt=0;dlt<500&&KEY;dlt=ms-time);
}
}
voidmain()
{
//dataunsignedcharp0;
ms=0;
SetupTimer0();
EA=1;//全局中断打开
while(1)
{
process1();
process2();
process3();
process4();
}
}
⑨ 单片机编程用汇编好还是C语言好
单片机编程,C语言编程但很好。
大致分成三类:机器语言、汇编语言、高级语言。机器语言由于繁琐容易出错,大部分用户已经不再便用。
1.单片机汇编语言
汇编语言是一种符号语言,它使用文字助记符来表示机器指令。它是最接近机器代码的语言。它的主要优点是占用资源少,程序执行效率高。由于每条指令对应于一个机器码,所以每一步的执行都非常清楚。
并且程序的大小和栈调用都易于控制,调试也更加方便。但是不同类型的单片机,其汇编语言可能会有一点不同,所以移植起来并不容易,因为它们的指令系统是不同的。但掌握汇编语言可以帮助我们理解影响四川语学习效率的特殊规律。
例如,了解汇编语言指令可以让您使用芯片内ram作为变量,因为芯片外变量需要多个指令来设置访问的累加器和数据指针。
类似地,只有汇编编程经验才能防止在需要浮点数和启用函数时创建大型、低效的程序,这在没有汇编语言的情况下是无法做到的。
2.单片机的C语言
MCUC语言是一种经过编译的程序设计语言,它兼顾了多种高级语言的特点,具有汇编语言的功能。C语言具有丰富的库函数,计算速度快,编译效率高,可移植性好,并能实现对系统硬件的直接控制。
此外C语言程序具有完整的程序模块结构,为软件开发中的模块化编程方法提供了强有力的保证。与组装相比,具有以下优点:
MCU的指令系统不需要知道,只需要对51的内存结构有一个初步的了解,对于寄存器的分配,不同的内存寻址和数据类型等细节都由编译器来管理。程序有一个正式的结构,可以分为不同的功能。这使得程序可以结构化,结合变量选择和特殊操作,并提高程序的可读性。
大大减少了编程和调试时间,从而提高了效率。所提供的库包含许多具有强大数据处理能力的标准子例程,由于其方便的模块化编程技术,可以很容易地将这些子例程编程到新程序中。
功能强大灵活,库中包含了很多标准的子程序,具有较强的数据处理能力,可以方便地编程植入新的程序,因为它具有方便的模块化编程技术。
MCUC语言作为一种非常方便的语言而得到了广泛的支持,(语言程序本身不依赖于机器硬件系统,基本上不根据单片机的修改就可以将U的不同之处快速移植过来。)
利用单片机c语言进行编程,已经成为单片机软件开发的主流,作为一门综合性的技术和参与开发的大型软件系统,单片机开发人员最好能够掌握基本的c语言编程。
(9)单片机c语言论坛扩展阅读:
SCM语言
MCU支持三种高级语言,即PL/M、C和BASIC。C语言是一种通用的编程语言,其码率高,数据类型和运算符丰富,并具有良好的程序结构,适用于各种应用程序的设计,是一种广泛应用的单片机编程语言。
单片机的C语言采用C51编译器(简称C51)。C51生成的目标代码短小、快速、存储空间小,符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,可与A51汇编语言或PL/M51语言目标代码混合使用
⑩ 求51单片机C语言编程
#include<reg52.h>
#include<intrins.h>
#define uintunsignedint
sbitk1=P3^2;
sbitbuz=P2^3;
voiddelay(uintt);//延时程序
voidinit();
voidmain()
{
init();
P1=0xfe;
while(1);
}
voiddelay(uintt)//延时程序
{
uinti,j;
for(i=t;i>0;i--)
for(j=112;j>0;j--);
}
voidinit()
{
IT0=0;
EX0=1;
EA=1;
}
voidcroled()interrupt0
{
buz=0;
delay(10);
if(k1==0)
{
while(k1==0);
P1=_crol_(P1,1);
buz=1;
}
}