單片機c語言編程例
⑴ 單片機題目,用c語言,求助!!
單片機題目,用四位一體共陰數碼管,P0口輸出段碼,P2口輸出位碼。用定時器T0定時50ms,採用中斷方式,對中斷計數,中斷20次就為1秒,計數值加一。三個獨立按鍵接在P3.5、P3.6、P3.7上。模擬圖和效果見下圖。
⑵ 求解一道單片機C語言編程題,急
#include"AT89X52.h"
sbit BUTTON = P1^1;
sbite LED = P1^0;
unsigned int reg;
void main(void)
{
while(1)
{
if (!BUTTON)
{
reg= 5000;
while(--reg);
if (!BUTTON)
{
LED = ~LED;
while(!BUTTON);
}
}
}
}
⑶ 51單片機使用T0和T1外部脈沖計數,C語言如何編程
1、使用T0和T1外部脈沖計數,控制兩個電機,到1700個脈沖電機停止,
--統計脈沖個數,用外部中斷更好。
--T0和T1,留著定時用。
用四個按鍵控制,按鍵1控制電機正轉,按鍵2控制電機反轉,按鍵3控制電機1正轉,按鍵4控制電機2正轉。
2、常式:
#include<reg51.h>
sbitk1=?;//自己定義
sbitk2=?
sbitk3=?
sbitk4=?
sbitDIAN1=?
sbitDIAN2=?
sbitDIAN3=?
sbitDIAN4=?
sbitSEN1=?
sbitSEN2=?
voiddelay(unsignedintx)
{
unsignedintm,n;
for(m=x;m>0;m--)for(n=115;n>0;n--);
}
voidmain(void)
{
TMOD=0x55;
IE=0x8a;
while(1){
if(!k1){
delay(10);
if(!k1){
while(!k1);
TH0=(65536-1700)/256;
TL0=(65536-1700)%256;
SEN1=0;
DIAN1=0;DIAN2=1;
SEN1=1;
TR0=1;
}
}
if(!k2){
delay(10);
if(!k2){
while(!k2);
TH0=(65536-1700)/256;
TL0=(65536-1700)%256;
SEN1=0;
DIAN1=1;DIAN2=0;
SEN1=1;
TR0=1;
}
}
if(!k3){
delay(10);
if(!k3){
while(!k3);
TH1=(65536-1700)/256;
TL1=(65536-1700)%256;
SEN2=0;
DIAN3=0;DIAN4=1;
SEN2=1;
TR1=1;
}
}
if(!k4){
delay(10);
if(!k4){
while(!k4);
TH1=(65536-1700)/256;
TL1=(65536-1700)%256;
SEN2=0;
DIAN3=1;DIAN4=0;
SEN2=1;
TR1=1;
}
}
}
}
⑷ 求各位大神解決單片機程序C語言代碼跟解釋
11.程序如下:
#include<reg52.h>
//包含單片機寄存器的頭文件
#include<intrins.h>
#define
uchar
unsigned
char
//定義一下方便使用
#define
uint
unsigned
int
//定義一下方便使用
uchar
num,num1;
uchar
code
table[]={
//數字編碼0~9
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
void
main()
//主程序
{
TMOD=0x01;
//定時器T0,工作方式1
TH0=(65536-50000)/256;
//裝載初值,中斷一次50ms
TL0=(65536-50000)%256;
EA=1;
//開總中斷
ET0=1;
//開T0中斷
TR0=1;
//啟動定時器
while(1)
//大循環
{
P2=0xaa;
//數碼管位選,10101010b
P0=table[num];
//段選信號
}
}
void
T0_time()
interrupt
1
//中斷函數
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num1++;
if(num1==20)
//中斷20次為1秒
{num1=0;
num++;
//每1秒加1
if(num==10)
//數碼管顯示的編碼0~9
ET0=0;
for(int
i=0;i<10000;i++)
{
P1=0xff;
delay();
P1=0xfe;
delay();
}
num=0;
}
}
void
delay()();
{
unsigned
char
i;
for(i=20;i>0;i--);
}
12.#include
<reg52.h>
#include
<intrins.h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
void
DelayMS(uint
x)
{
uchar
t;
while(x--)
{
for(t=120;t>0;t--);
}
}
void
main()
{
uchar
i;
P2=0x01;
while(1)
{
for(i=7;i>0;i--)
{
P2=_crol_(P2,1);
DelayMS(150);
}
for(i=7;i>0;i--)
{
P2=_cror_(P2,2);
DelayMS(150);
}
}
}
⑸ 求一個51單片機C語言程序編程
實驗內容:單片機甲、乙進行雙機串列通信,甲機通過串口控制乙機LED閃爍(如下圖所示,要求利用晶元MAX232),雙方的晶振頻率均為11.0592MHz(波特率為9600kb/s)要求:甲機按開關K1一次,發送字元「A」給乙機,點亮燈D1與D2;按開關K1兩次,發送字元「B」給乙機,點亮燈D3與D4;按開關K1三次,發送字元「C」給乙機,全部點亮;按下第四次K1,燈全滅
#include<reg51.h> /*甲機*/
sbit k=P1^0;
sbit P00=P0^0;
sbit P03=P0^3;
unsignedchari,NO;
voidmain(void) /*主函數*/
{
SCON=0x40; /*方式1隻發送,不接收*/TMOD=0x20;
TH1=0xfd; /*給定時器T1賦初值,波特率為9600*/
TL1=0xfd;
TR1=1;
k=1;
NO=0;
while(1)
{
if(k==0)
{while(k==0);
NO=(NO+1)%4;
}
switch(NO)
{case0:P0=0xff;
break;
case1:P00=0;P03=1;
SBUF='A';
while(TI==0);
TI=0;
break;
case2:P00=1;
P03=0;
SBUF='B';
while(TI==0);
TI=0;
break;
case3:P00=0;
P03=0;
SBUF='C';
while(TI==0);
TI=0;
break;
}
}
for(i=250;i>0;i--){;} //延時
}
#include<reg51.h> /*乙機*/
sbit k=P1^0;
sbit P00=P0^0;
sbit P03=P0^3;
unsignedcharNO;
voidmain() /*主函數*/
{
SCON=0x50; /*設置串口為方式3,允許接收REN=1*/
TMOD=0x20;
TH1=0xfd; /*給定時器T1賦初值,波特率為9600*/
TL1=0xfd;
TR1=1;
P0=0xff;
while(RI==0);/*檢測接收中斷標志RI,RI=0,未接收完,則循環等待*/
{RI=0;
switch(SBUF)
{case'A':P00=0;P03=1;
break;
case'B':P00=1;P03=0;
break;
case'C':P00=P03=0;
break;
}
}
}