完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
下面程序是想用定时器方式3实现数码管显数和流水灯 但是流水灯不知道为什么就是不对 应该只亮一个灯的 但是实际却亮了好几个 谢谢各位大神了
#include #define uint unsigned int #define uchar unsigned char uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; ***it dula=P2^6; ***it wela=P2^7; ***it sda=P2^0; ***it scl=P2^1; bit write=0; uint numh,numl; uchar sec,p; void delay() {;;} void delayms(uint x) { uint i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } void init() { TMOD=0X03; TH0=6; TL0=6; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; scl=1; delay(); sda=1; delay(); } void display(uchar sec) { uchar shi,ge; shi=sec/10; ge=sec%10; dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delayms(5); dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delayms(5); } void start() { sda=1; delay(); scl=1; delay(); sda=0; delay(); } void stop() { sda=0; delay(); scl=1; delay(); sda=1; delay(); } void respons() { uchar a=0; scl=1; delay(); while((sda==1)&&(a<250)) a++; scl=0; delay(); } void write_byte(uchar date) { uchar b,temp; temp=date; for(b=0;b<8;b++) { temp=temp<<1; scl=0; delay(); sda=CY; delay(); scl=1; delay(); } scl=0; delay(); sda=1; delay(); } uchar read_byte() { uchar c,d; scl=0; delay(); sda=1; delay(); for(c=0;c<8;c++) { scl=1; delay(); d=(d<<1)|sda; scl=0; delay(); } return d; } void write_add(uchar address,uchar date) { start(); write_byte(0xa0); respons(); write_byte(address); respons(); write_byte(date); respons(); stop(); } uchar read_add(uchar address) { uchar date; start(); write_byte(0xa0); respons(); write_byte(address); respons(); start(); write_byte(0xa1); respons(); date=read_byte(); stop(); return date; } void main() { init(); sec=read_add(1); //数码管数据在第1存储器里 if(sec>100) sec=0; write_add(2,0xfe); //为二极管数据所在存储器赋初值 p=read_add(2); while(1) { display(sec); P1=p; //二极管数据在第2存储器里 if(write==1) { write=0; write_add(1,sec); } if(write==2) { write=0; write_add(2,p); } } } void time0_SHUMA() interrupt 1 { TH0=6; numh++; if(numh>=3686) { numh=0; sec++; write=1; if(sec==100) { sec=0; } } } void Time0_P1() interrupt 3 { uchar e,f; TL0=6; numl++; if(numl>=3686) { numl=0; e=p<<7; f=p>>1; p=e|f; write_add(2,p); write=2; } } |
|
相关推荐
2个回答
|
|
循环程序里面对不对
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之本地脚本的编写和执行
319 浏览 0 评论
【xG24 Matter开发套件试用体验】深入了解Silicon Labs xG24 Matter开发套件
552 浏览 0 评论
502 浏览 0 评论
531 浏览 0 评论
串口发送中断中对发送I/O口定义为GPIO输出,出现发送数据不完整,缺少2个字节,求解答
2139 浏览 3 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
10915 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-30 19:09 , Processed in 0.494575 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191