void main() //主函数
{
unsigned char // 无符号字符型
tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}//定义一个数组 LED数码管译码用的码表
while(1) //主循环
{
P2=P2|0x07 // P2口与0x07按位进行或运算
while(P2&0x07==0x07)//如果P2扣低三位为111则原地等待
switch(P2&0x07)//获取P2低三位值并且据此执行响应的 *** 作
{
0x06:P0=tab[0x0D]break//P2低三位为06H,数码管显示“d”
0x05:P0=tab[0x0E]break//P2低三位为05H,数码管显示“E”
0x03:P0=tab[0x0F]break//P2低三位为03H,数码管显示“F”
}
}
}
ORG 0000HLJMP START
ORG 0100H
START: MOV TMOD,#01H 置T0为工作方式1
MOV TH0,#3CH 置T0定时初值50ms
MOV TL0,#0B0H
CLR TF0
SETB TR0 启动T0
CLR A
• #define uint unsigned int //定义无符号整型变量• #define uchar unsigned char //定义无符号字符型变量
• bit flag=0,ftser=1,frser=1 //定义位
• void delay(uint z) //延时子程序(Z来控制延时时间)具体时间要看外面的晶振
• {
• uint x,y//定义变量
•for(x=0x<zx++) //for循环
• for(y=0y<248y++)
• }
• void serial() interrupt 4 using 2 //串口中断子程序 入口4
{
if(RI==1) //串口接收中断标志位 RI=1发生中断
{
RI=0//手动清除中断标志
frser=0//接收标志位置0
}
else
{
TI=0 //串口发送中断标志位 T1=1发生中断
ftser=0 //发送标志位置0
}
}
void main(void) //主程序
{
uchar i=0,j=0,temp=0xff
TMOD=0X20 //串口中断初始化 设置为8位自动重装定时器
TH1=0XFd//高8位时间常数
TL1=0XFd//低8位时间常数
SCON=0X50//串行口工作方式2 允许接收
PCON=0X00//波特率不倍增
ES=1 //串行中断使能
EA=1 // 打开中断使能
TR1=1 //打开定时器
while(1)
{
while(frser==1) //判断接收是否完成
frser=1//接收标志位置1
i=SBUF //串口数据变量 i
P0=255-i //将数据转反码后由P0口输出
delay(200) //调用延时
SBUF=i//串口发送数据(和接收的一样)
ftser=1//发送标志位置1
while(ftser==1)//等待串口发送完成
}
里面可以加一些数据判断的,这个小程序玩起来没什么意思,不是很直观!
总体看也就是利用串口助手发一个数据,然后由单片机回传一个相同的数据并在p0口输出其反码
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)