完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 nickychung 于 2014-1-23 10:08 编辑
/*这个程序的要求是要用的I IC总线,然后动态显示98-255*/ 此程序有错,数码管显示从0知道25然后再回到0,同时只显示前两个数码管。请高手完善 #include #include #include #define uchar unsigned char #define uint unsigned int ***it sda=P2^0; ***it scl=P2^1; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void led(uchar address,uint z); void init1(); void delay() {;;} void start() { sda=1; delay(); scl=1; delay(); sda=0; delay(); } void stop() { sda=0; delay(); scl=1; delay(); sda=1; delay(); } void response() { uchar i; scl=1; delay(); while((sda==1)&&i<250)i++; scl=0; delay(); } void init() { sda=1; delay(); scl=1; delay(); } void write_byte(uchar date) { uchar i,temp; temp=date; for(i=0;i<8;i++) { temp=temp<<1; scl=0; delay(); sda=CY; delay(); scl=1; delay(); } scl=0; delay(); sda=1; delay(); } uchar read_byte() { uchar i,k; scl=0; delay(); sda=1; delay(); for(i=0;i<8;i++) { scl=1; delay(); k=(k<<1)|sda; scl=0; delay(); } return k; } void delay1(uint z) { uint x,y; for(x=z;x>0;x--) for(y=100;y>0;y--); } void write_add(uchar address,uchar date) { start(); write_byte(0xa0); response(); write_byte(address); response(); write_byte(date); response(); stop(); } uchar read_add(uchar address) { uchar date; start(); write_byte(0xa0); response(); write_byte(address); response(); start(); write_byte(0xa1); response(); date=read_byte(); stop(); return date; } void main() { init(); write_add(23,0xfe); delay1(50); led(read_add(23),98); while(1); } void led(uchar address,uint z) { uchar temp,bai,shi,ge,temp1; uint x; init1(); x=z; temp1=address; while(1) { bai=x/100; shi=x%100/10; ge=x%10; temp=temp1; P0=temp; P1=table[bai]; delay1(1); temp=_crol_(temp1,1); P0=temp; P1=table[shi]; delay1(1); temp=_crol_(temp1,2); P0=temp; P1=table[ge]; delay1(1); x++; if(x==255) x=0; } } void init1() { TMOD=0x01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; TR0=1; ET0=1; } void timer0() interrupt 1 { uint t; TH0=(65536-10000)/256; TL0=(65536-10000)%256; if(t==1) t=0; t++; TR0=0; } |
|
相关推荐
12个回答
|
|
发帖时要把你的问题说清楚,哪里出错
|
|
|
|
菜鸟,这程序运行产生什么结果,你感觉在什么地方出错,你是不是该把问题说清楚呢
|
|
|
|
已经把问题写上去了,尽管你是高级工程师,请放尊重点,你也是从初学者过来的。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void timer0() interrupt 1
{ uint t; TH0=(65536-10000)/256; TL0=(65536-10000)%256; if(t==1) t=0; t++; TR0=0; } 这个中断只进入一次就不再进入了,希望你能把整个程序的执行过程简要的说明一下,否则光看程序不好查出错误 |
|
|
|
|
|
|
|
#include
#define uint unsigned int #define uchar unsigned char bit write=0; ***it scl=P2^1; ***it sda=P2^0; ***it dula=P2^6; ***it wela=P2^7; uchar sec,tcnt; uchar code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f}; void delay() { ;; } void delay1ms(uint z) { uint x,y; for(x=z;x>0;x--) for (y=110;y>0;y--); } 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 i; scl=1; delay(); while((sda==1)&&(i<250))i++; scl=0; delay(); } void init() { sda=1; delay(); scl=1; delay(); } void write_byte(uchar date) { uchar i,temp; temp=date; for(i=0;i<8;i++) { temp=temp<<1; scl=0; delay(); sda=CY; delay(); scl=1; delay(); } scl=0; delay(); sda=1; delay(); } uchar read_byte() { uchar i,k; scl=0; delay(); sda=1; delay(); for (i=0;i<8;i++) { scl=1; delay(); k=(k<<1)|sda; scl=0; delay(); } return k; } 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 display(uchar shi_c,uchar ge_c) { dula=0; P0=table[shi_c]; dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; delay1ms(5); dula=0; P0=table[ge_c]; dula=1; dula=0; wela=0; P0=0x7b; wela=1; wela=0; delay1ms(5); } void main() { init(); sec=read_add(4);//读出保存的数据赋予sec if(sec>100) sec=0; TMOD=0x01; ET0=1; EA=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; while(1) { display(sec/10,sec%10);//分离显示函数 if (write==1); { write=0; write_add(4,sec); } } } void t0()interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tcnt++; if(tcnt==20) { tcnt=0; sec++; write=1; if(sec==100) sec=0; } } 这个程序是24c02的程序,有IIc总线,0-99循环,时间1S,希望对你有用 |
|
|
|
{:23:} {:23:}{:23:} 谢谢。 |
|
|
|
问题不清楚啊,麻烦说清楚一点
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
205 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1253 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
848 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
853 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12013 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 07:03 , Processed in 0.725926 second(s), Total 61, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号