完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛扫一扫,分享给好友
|
#include
unsigned char digtal1[10]={0xc0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //0123456789 #define uchar unsigned char uchar ch; void delay1ms(x) //0.5ms { int y,z; for(y=x;y>0;y--) for(z=60;z>0;z--); } void init_uart() { TMOD=0X20; //定时器/计算器工作模式寄存器 TH1=0XFD; //timer high 1 TL1=0XFD; //timer low 1 TR1=1; //定时器T1的运行控制位 SCON=0X50; //串行控制寄存器 EA=1; //CPU的总中断允许控制位 ES=1; //串行口中断允许位 } void main() { init_uart(); while(1) { P3=ch; P2=digtal1[8]; delay1ms(1000); } } void UART_interrupt() interrupt 4 { if(RI) { RI=0; //接收中断请求标志位 ch=SBUF; } } |
|
相关推荐
22个回答
|
|
试着莣记 发表于 2017-6-28 17:19 #include #define uchar unsigned char #define uint unsigned int //unsigned char digtal1[10]={0xc0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //0123456789 ***it dula=P2^6; //段锁存 ***it wela=P2^7; //位锁存 uchar code table[]={ //共阴数码管 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar swan,wan,qian,bai,shi,ge; uchar ch; uchar flag; //接收完成标志, uchar count=0; //计数变量 void display1();//显示程序声明 void init_uart() { TMOD=0X20; //定时器/计算器工作模式寄存器 TH1=0XFD; //timer high 1 TL1=0XFD; //timer low 1 TR1=1; //定时器T1的运行控制位 SCON=0X50; //串行控制寄存器 EA=1; //CPU的总中断允许控制位 ES=1; //串行口中断允许位 } void main() { init_uart(); while(1) { if(flag==1) //接收完成标志为1 { ES=0; //关串口中断 flag=0; //接收完成标志清0 SBUF=ch; //发送数据 while(!TI); //等待发送中断请求标志位为1 TI=0; //发送中断请求标志位清0 ES=1; //开串口中断 } P1=~ch; //P1接8位LED显示收到的数据 /*************数据分解***************/ swan = ch/100000; // 十万位 wan = (ch%100000)/10000; // 万位 qian = (ch%10000)/1000; // 千位 bai = (ch%1000)/100; // 百位 shi = (ch%100)/10; // 十位 ge = ch%10; // 个位 display1(); //6位数码管显示程序 } } void UART_interrupt() interrupt 4 { RI=0; //接收中断请求标志位 ch=SBUF; //获取SBUF接收到的数据 flag=1; //接收完成标志置1 } void display1()//显示程序 { count++; if(count>=6) count=0; switch(count) { case 0: dula=0; P0=table[swan]; //显示十万位 dula=1; dula=0; wela=0; P0=0x7e; wela=1; wela=0; break; case 1: dula=0; P0=table[wan]; //显示万位 dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; break; case 2: P0=table[qian]; //显示千位 dula=1; dula=0; P0=0x7b; wela=1; wela=0; break; case 3: P0=table[bai]; //显示百位 dula=1; dula=0; P0=0x77; wela=1; wela=0; break; case 4: P0=table[shi]; //显示十位 dula=1; dula=0; P0=0xef; wela=1; wela=0; break; case 5: P0=table[ge]; //显示个位 dula=1; dula=0; P0=0xdf; wela=1; wela=0; break; } } |
|
|
|
|
|
你好,我是想六个数码管一起显示,然后发不同的六组段选数据进行显示。 |
|
|
|
|
|
6个数码管显示3组HEX码 #include #define uchar unsigned char #define uint unsigned int //unsigned char digtal1[10]={0xc0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //0123456789 ***it dula=P2^6; //段锁存 ***it wela=P2^7; //位锁存 uchar code table[]={ //共阴数码管 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar data dis_buf[3];//保存接收的数据范围00~ff uchar swan,wan,qian,bai,shi,ge;//数据分解变量 uchar ch; //接收/发送数据变量 uchar i=3; //获取3次不同数据的变量保存在数组dis_buf[3] uchar flag; //接收完成标志, uchar count=0,count1=0; //数码管位计数变量 void display1();//显示程序声明 void init_uart() { TMOD=0X20; //定时器/计算器工作模式寄存器 TH1=0XFD; //timer high 1 TL1=0XFD; //timer low 1 TR1=1; //定时器T1的运行控制位 SCON=0X50; //串行控制寄存器 EA=1; //CPU的总中断允许控制位 ES=1; //串行口中断允许位 } void main() { init_uart(); while(1) { if(flag==1) //接收完成标志为1 { ES=0; //关串口中断 flag=0; //接收完成标志清0 SBUF=ch; //发送数据 while(!TI); //等待发送中断请求标志位为1 TI=0; //发送中断请求标志位清0 ES=1; //开串口中断 } P1=~ch; //P1接8位LED显示收到的数据 /*************数据分解***************/ /* swan = ch/100000; // 十万位 wan = (ch%100000)/10000; // 万位 qian = (ch%10000)/1000; // 千位 bai = (ch%1000)/100; // 百位 shi = (ch%100)/10; // 十位 ge = ch%10; // 个位 */ /*************按位分解***************/ swan = dis_buf[0]/16; // 十万位 wan = dis_buf[0]%16; // 万位 qian = dis_buf[1]/16; // 千位 bai = dis_buf[1]%16; // 百位 shi = dis_buf[2]/16; // 十位 ge = dis_buf[2]%16; // 个位 display1(); //6位数码管显示程序 } } void UART_interrupt() interrupt 4 { RI=0; //接收中断请求标志位 ch=SBUF; //获取SBUF接收到的数据 i++; if(i>=3) i=0; dis_buf=ch;//获取6次不同字符串 flag=1; //接收完成标志置1 } void display1()//显示程序 { count1++; if(count1>=50) //改变数值(刷新频率)消除闪烁或鬼影 { //最佳刷新周期1~3ms count1=0; count++; if(count>5) count=0; switch(count) { case 0: dula=0; P0=table[swan]; //显示十万位 dula=1; dula=0; wela=0; P0=0x7e; wela=1; wela=0; break; case 1: dula=0; P0=table[wan]; //显示万位 dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; break; case 2: P0=table[qian]; //显示千位 dula=1; dula=0; P0=0x7b; wela=1; wela=0; break; case 3: P0=table[bai]; //显示百位 dula=1; dula=0; P0=0x77; wela=1; wela=0; break; case 4: P0=table[shi]; //显示十位 dula=1; dula=0; P0=0xef; wela=1; wela=0; break; case 5: P0=table[ge]; //显示个位 dula=1; dula=0; P0=0xdf; wela=1; wela=0; break; } } } |
|
|
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2366 浏览 1 评论
4219 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2601 浏览 2 评论
3100 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
4550 浏览 5 评论
有套STM32与西门子200程序需要代写,有兴趣的工程师与有联系!
2470浏览 1评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6783浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 12:12 , Processed in 0.778522 second(s), Total 79, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3958