51单片机C语言编程 51单片机c程序!
51\u5355\u7247\u673a C\u8bed\u8a00\u7f16\u7a0b\u9996\u5148\u8981\u660e\u786e\u5355\u7247\u673a\u7684\u7aef\u53e3\u540d\u79f0\u4e00\u822c\u90fd\u662f\u89c4\u5b9a\u597d\u4e86\u7684\uff08\u53c2\u8003\u8be5\u5355\u7247\u673a\u7684datasheet\uff09\uff1b
\u5176\u6b21\uff0c\u8981\u7ed9\u67d0\u4e2a\u7aef\u53e3\u8d4b\u503c\uff081\u62160\uff09\uff0c\u8fd8\u662f\u7ed9\u7aef\u53e3\u7ec4\uff088\u4f4d\u5355\u7247\u673a\u4e00\u4e2a\u7ec4\u516b\u4e2a\u811a\uff09\u8d4b\u503c\uff0c\u8fd9\u5c31\u662f\u6309\u4f4d\u64cd\u4f5c\u8fd8\u662f\u6309\u5b57\u8282\u64cd\u4f5c\u7684\u95ee\u9898\u3002\u4f8b\u5982\uff1a\u5355\u7247\u673a\u6709PA\u53e3\uff0cPB\u53e3\uff0c\u5176\u4e2dPA\u53e3\u6709PA0~PA7\u516b\u4e2a\u811a\uff0c\u62c9\u9ad8PA\u53e3\uff08PA = 0XFF;\uff09,\u62c9\u9ad8PA0\u811a\uff08PA &=0X01;\u6216\u8005PA0 = 1; \uff09\u3002\u5f53\u7136\u6709\u4e9b\u5355\u7247\u673a\u662f\u901a\u8fc7\u8bfb\u5199IO\u53e3\u8f93\u5165\u8f93\u51fa\u5bc4\u5b58\u5668\u6765\u5b9e\u73b0\u7684\u3002
\u518d\u8005\uff0cRTX,TDX\u4e24\u4e2a\u811a\u5e94\u8be5\u662f\u901a\u4fe1\u7684\u811a\uff0c\u4e0e\u901a\u7528IO\u53e3\u4e3a\u590d\u7528\u7684\u811a\uff0c\u8981\u600e\u4e48\u7528\uff0c\u600e\u4e48\u53d1\u9001\u6570\u636e\u3001\u63a5\u6536\u6570\u636e\u5c31\u6d89\u53ca\u5230\u901a\u4fe1\u534f\u8bae\u4e86\uff0c\u4e0d\u540c\u901a\u4fe1\u65b9\u5f0f\uff0c\u5de5\u4f5c\u65b9\u5f0f\u5c31\u4e0d\u4e00\u6837\u4e86\uff0c\u5177\u4f53\uff08\u53c2\u8003\u8be5\u5355\u7247\u673a\u7684datasheet\uff09\u3002
\u5efa\u8bae\u5148\u4ed4\u7ec6\u9605\u8bfb\u5355\u7247\u673a\u7684datasheet\u548c\u8be5\u5355\u7247\u673a\u7684\u7f16\u7a0b\u6307\u5357\uff08\u5982\u679c\u6709\u7684\u8bdd\uff09
\u5e0c\u671b\u80fd\u89e3\u51b3\u4f60\u7684\u7591\u95ee
\u6b63\u786e\u7684\u8868\u8fbe\u5f0f\u5e94\u8be5\u662f\uff1aP0=number[a[0]];
\u8fd9\u5e94\u8be5\u662f\u4eceP0\u53e3\u8f93\u51fa\u6570\u7801\u7ba1\u663e\u793a\u7684\u6bb5\u7801\u6570\u7ec4\uff0c\u800cnumber[ i ]\u662f\u4e2a\u6570\u7ec4\u5373\u4e3a\u6bb5\u7801\u8868\uff0c\u800ca[ i ] \u4e5f\u662f\u4e00\u4e2a\u6570\u7ec4\uff0c\u662f\u4e0e\u6570\u7801\u7ba1\u76f8\u5bf9\u5e94\u7684\u7f13\u51b2\u533a\uff0c\u800ca[0]\u662f\u4fdd\u5b58\u7b2c\u4e00\u4e2a\u6570\u7801\u7ba1\u663e\u793a\u7684\u6570\u636e\uff0c\u4f8b\u5982a[0]=2; \u610f\u601d\u662f\u7b2c\u4e00\u4e2a\u6570\u7801\u7ba1\u8981\u663e\u793a2\uff0c\u628a2\u4ee3\u5165\u6bb5\u7801\u8868\u4e3anumber[2]; \u5f97\u52302\u7684\u6bb5\u7801\uff0c\u4eceP0\u53e3\u8f93\u51fa\uff0c\u5373\u53ef\u5b9e\u73b0\u7b2c\u4e00\u4e2a\u6570\u7801\u7ba1\u663e\u793a2\u4e86\u3002
// 51单片机C语言编程,这个时钟+秒表可以参考一下。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit qingling=P1^0; //清零
sbit tiaofen=P1^1; //调分
sbit tiaoshi=P1^2; //调时
sbit sounder=P1^7; //naozhong
uint a,b;
uchar hour,minu,sec, //时钟
hour0,minu0,sec0,//秒表
hour1,minu1,sec1;
h1,h2,m1,m2,s1,s2,//显示位
k,s;//状态转换标志
uchar code select[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uchar code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*****************函数声明***********************/
void keyscan();
void init();
void delay(uchar z);
void display(uchar,uchar,uchar);
void sounde();
/*****************主函数*************************/
void main()
{
init();
while(1)
{
while(TR1)
{
keyscan(); //扫描函数
while(s==1) //s是状态标志,当s=0时,闹钟取消。s=1时,设定闹钟时间(也是通过调时,调分函数);
{ //s=2时,闹钟工作,时间与设定时刻一致时,闹钟响(一分钟后自动关闭,可手动关闭)。再次切换,s=0.
keyscan(); //s状态切换(0-》1-》2-》0)通过外部中断1实现。
display(hour1,minu1,sec1); //闹钟时刻显示
}
display(hour0,minu0,sec0);//时钟表显示
while(k) /*k是秒表状态(0-》1-》2-》0)通过外部中断0实现。0秒表关;1秒表从零计时;2秒表停,显示计时时间*/
{
display(hour,minu,sec); //秒表显示
}
}
}
}
/*****************初始化函数***********************/
void init()
{
a=0;
b=0;
k=0;
s=0;
hour0=0;
minu0=0;
sec0=0;
hour=0;
minu=0;
sec=0;
hour1=0;
minu1=0;
sec1=0;
TMOD=0x11; //定时器0,1工作于方式1;赋初值
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
EX0=1; //秒表中断
EX1=1; //闹钟设定中断
ET0=1;
ET1=1;
IT0=1; //边沿触发方式
IT1=1;
PX0=1;
PX1=1;
TR0=0; //初始,秒表不工作
TR1=1; //时钟一开始工作
}
/*****************定时器0中断*************/
void timer0_int() interrupt 1 //秒表
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
a++;
if(a==2)
{
a=0;
sec++;
if(sec==100)
{
sec=0; //毫秒级
minu++;
if(minu==60)
{
minu=0; //秒
hour++;
if(hour==60) //分
{
hour=0;
}
}
}
}
}
/*************外部中断0中断函数************/
void ex0_int() interrupt 0
{
k++;
if(k==3)
k=0;
if(k==1)
{
TR0=~TR0;
if(TR0==1)
{
hour=0;
minu=0;
sec=0;
}
}
if(k==2)
{
TR0=~TR0;
}
}
/*************外部中断1中断函数************/
void ex1_int() interrupt 2
{
s++;
if(s==3)
s=0;
}
/*************定时器1中断****************/
void timer1_int() interrupt 3 //控制时钟工作
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(s==2)
{
if(hour1==hour0 && minu0==minu1)
sounde();
}
b++;
if(b==20)
{
b=0;
sec0++;
if(sec0==60)
{
sec0=0;
minu0++;
if(minu0==60)
{
minu0=0;
hour0++;
if(hour0==24)
hour0=0;
}
}
}
}
/*************键盘扫描****************/
void keyscan()
{
if(s==1)
{
if(qingling==0)
{
delay(10);
if(qingling==0)
{
sec1=0;
minu1=0;
hour1=0;
}
}
if(tiaofen==0)
{
delay(10);
if(tiaofen==0)
{
minu1++;
if(minu1==60)
{
minu1=0;
}
while(!tiaofen);
}
}
if(tiaoshi==0)
{
hour1++;
if(hour1==24)
{
hour1=0;
}
while(!tiaoshi);
}
}
else //调整时钟时间
{
if(qingling==0)
{
delay(10);
if(qingling==0)
{
sec0=0;
minu0=0;
hour0=0;
}
}
if(tiaofen==0)
{
delay(10);
if(tiaofen==0)
{
minu0++;
if(minu0==60)
{
minu0=0;
}
while(!tiaofen);
}
}
if(tiaoshi==0)
{
hour0++;
if(hour0==24)
{
hour0=0;
}
while(!tiaoshi);
}
}
}
/*************显示函数****************/
void display(uchar hour,uchar minu,uchar sec)
{
h1=hour/10;
h2=hour%10;
m1=minu/10;
m2=minu%10;
s1=sec/10;
s2=sec%10;
P0=0xff;
P2=table[h1];
P0=select[7];
delay(5);
P0=0xff;
P2=table[h2];
P0=select[6];
delay(5);
P0=0xff;
P2=0x40;;
P0=select[5];
delay(5);
P0=0xff;
P2=table[m1];
P0=select[4];
delay(5);
P0=0xff;
P2=table[m2];
P0=select[3];
delay(5);
P0=0xff;
P2=0x40;
P0=select[2];
delay(5);
P0=0xff;
P2=table[s1];
P0=select[1];
delay(5);
P0=0xff;
P2=table[s2];
P0=select[0];
delay(5);
}
/*************闹钟函数****************/
void sounde()
{
sounder=~sounder;
}
/*************延时函数****************/
void delay(uchar z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
brvrvrb behebhrv irvbhrorv jibbe jsbdbdj ndb.bfb jdbdjfjt jrnfbdfnx hsccevd kfnt;tgtn bhbjrbrb jenjbbvb dbdjtfbt djrbrbfbdy
绛旓細涓柇鎺у埗绋嬪簭锛歩nclude <AT89X52.H> define uchar unsigned char define uint unsigned int define port_count P2 //P2鎺8LED鎺ュ彛 //灏嗚鏁板櫒鐨勪簩杩涘埗鍊肩敤8涓狶ED鏄剧ず鍑烘潵 uchar count;//璁℃暟鍣(瀛樺偍涓柇娆℃暟)void main(void){ count=0; //娓呴浂璁℃暟鍣 port_count=~count;//娓呴浂P2鍙 IT0=...
绛旓細include <reg51.h> include <stdio.h> define uchar unsigned char void convert();void display();void delay();//鍏遍槾锛0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F code unsigned char Led[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x...
绛旓細sinti(); //涓插彛鍒濆鍖栫▼搴 ring=1;while(1){ while (1){ if(CASE1==0){ send('a');ring=0;break;} if(CASE2==0){ send('b');ring=0;break;} if(CASE3==0){ send('c');ring=0;break;} if(CASE4==0){ send('d');ring=0;break;} } if(ring==0){ ...
绛旓細// 51鍗曠墖鏈篊璇█缂栫▼,杩欎釜鏃堕挓+绉掕〃鍙互鍙傝冧竴涓嬨俰nclude<reg51.h> define uchar unsigned char define uint unsigned int sbit qingling=P1^0; //娓呴浂 sbit tiaofen=P1^1; //璋冨垎 sbit tiaoshi=P1^2; //璋冩椂 sbit sounder=P1^7; //naozhong uint a,b;uchar hour,minu,sec, ...
绛旓細{ 7. if( P1_1 == 1 ) //璇诲彇P1.1,灏辨槸璁や负P1.1涓鸿緭鍏,濡傛灉P1.1杈撳叆楂樼數骞砎CC 8. { P0_4 = 0; } //缁橮0_4璧嬪0,寮曡剼P0.4灏辫兘杈撳嚭浣庣數骞矴ND 2 51鍗曠墖鏈篊璇█缂栫▼瀹炰緥 9. else //鍚﹀垯P1.1杈撳叆涓轰綆鐢靛钩GND 10. //{ P0_4 = 0; } //缁橮0_4璧嬪0,寮曡剼P0.4灏辫兘杈撳嚭浣庣數骞矴ND 11. { ...
绛旓細51鍗曠墖鏈锛孲TM32鍗曠墖鏈虹敤姹囩紪鎴栬匔璇█锛岀幇鍦ㄥ熀鏈兘鐢C璇█缂栫▼锛孉rduino鏈夎嚜宸辩殑缂栫▼鐜锛岀敤鎴蜂篃鏄敤C璇█缂栫▼銆51鍗曠墖鏈虹殑缂栫▼ 51鍗曠墖鏈鸿繘鍏ヤ腑鍥芥瘮杈冩棭锛屽湪鏃╁墠鐢ㄦ眹缂栫紪绋嬫瘮杈冨锛屾垜鍦ㄤ笂澶у鏃朵篃鏄涔犵殑姹囩紪缂栫▼锛屼絾鏄幇鍦ㄦ垜鐢–璇█缂栫▼锛屾眹缂栧凡缁忎笉浼氫簡銆51鍗曠墖鏈烘瘮杈冨父鐢ㄧ殑缂栫▼鐜鏄疜eil锛岀幇鍦↘eil鏇存柊...
绛旓細鍦–51鍗曠墖鏈虹殑涓栫晫閲岋紝姣忔潯C璇█鎸囦护鐨勬椂闂存秷鑰楀苟闈炲浐瀹氾紝瀹冨彇鍐充簬鎸囦护鐨勫鏉傛с傞氬父鎯呭喌涓嬶紝涓涓寚浠ゅ彲鑳介渶瑕1鍒4涓満鍣ㄥ懆鏈熸潵瀹屾垚锛屾瘮濡傛墽琛屼箻娉曟垨闄ゆ硶鎿嶄綔鏃讹紝鍙兘闇瑕侀珮杈48涓椂閽熷懆鏈熴傜劧鑰岋紝璁稿51鍗曠墖鏈鍨嬪彿閲囩敤12鍒嗛绯荤粺锛岃繖鎰忓懗鐫涓涓満鍣ㄥ懆鏈熶細琚垎鎴12涓椂閽熷懆鏈熴傝繖灏辨剰鍛崇潃绠鍗曠殑鎸囦护鍙兘鍙...
绛旓細include<reg51.h> define uchar unsigned char sbit pluse1=P1^0;sbit pluse2=P1^1;uchar t1=0,t2=0;void t0isr() interrupt 1 { TH0=(65536-25000)/256;TL0=(65536-25000)%256;t1++;if(t1<15)pluse=1;else pluse=0;if(t1>20)t1=0;} void t1isr() interrupt 3 { TH1=(65536...
绛旓細include <reg51.h> define uchar unsigend uchar define uint unsigned int unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};//鏁扮爜绠℃鐮 void main(){ uint k;TMOD=0X50;//...
绛旓細|P1鍙f帴8涓彂鍏変簩鏋佺鍏遍槼 include <AT89X51.H> unsigned char i;unsigned char temp;unsigned char a,b;void delay(void){ unsigned char m,n,s;for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--);} void main(void){ while(1){ temp=0xfe;P1=temp;delay();for(...